threepipe
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

script.ts 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import {
  2. _testFinish, _testStart,
  3. downloadBlob,
  4. IMaterial,
  5. IObject3D,
  6. LoadingScreenPlugin,
  7. Mesh,
  8. SphereGeometry,
  9. ThreeViewer,
  10. } from 'threepipe'
  11. import {createSimpleButtons} from '../examples-utils/simple-bottom-buttons.js'
  12. const viewer = new ThreeViewer({canvas: document.getElementById('mcanvas') as HTMLCanvasElement, msaa: true,
  13. plugins: [LoadingScreenPlugin],
  14. })
  15. async function init() {
  16. await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr')
  17. const helmet = await viewer.load<IObject3D>('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf', {
  18. autoCenter: true,
  19. autoScale: true,
  20. })
  21. if (!helmet) {
  22. alert('Unable to load model')
  23. return
  24. }
  25. const mesh = helmet.getObjectByName('node_damagedHelmet_-6514')!
  26. const material = mesh.materials?.[0]
  27. helmet.position.setX(-3)
  28. const sphere = new Mesh(new SphereGeometry(0.5, 32, 32), material)
  29. sphere.position.setX(2)
  30. await viewer.addSceneObject(sphere)
  31. const matBlob = await viewer.export(material)
  32. if (!matBlob) return
  33. const material2 = await viewer.assetManager.importer.importSingle<IMaterial>({file: matBlob, path: 'mat.' + matBlob.ext})
  34. if (!material2) {
  35. return
  36. }
  37. console.log(material2)
  38. const sphere2 = new Mesh(new SphereGeometry(0.5, 32, 32), material2)
  39. sphere2.position.setX(0)
  40. await viewer.addSceneObject(sphere2)
  41. createSimpleButtons({
  42. ['Download PMAT']: async() => {
  43. const blob = await viewer.export(material)
  44. if (!blob) {
  45. alert('Unable to export material')
  46. return
  47. }
  48. downloadBlob(blob, 'material.' + blob.ext)
  49. },
  50. })
  51. }
  52. _testStart()
  53. init().finally(_testFinish)