threepipe
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

script.ts 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import {
  2. _testFinish,
  3. generateUiFolder,
  4. IGeometry,
  5. IMaterial,
  6. IObject3D,
  7. LoadingScreenPlugin,
  8. PickingPlugin,
  9. SimplifyModifierPlugin,
  10. ThreeViewer,
  11. } from 'threepipe'
  12. import {TweakpaneUiPlugin} from '@threepipe/plugin-tweakpane'
  13. import {SimplifyModifier} from 'three/examples/jsm/modifiers/SimplifyModifier.js'
  14. import {createSimpleButtons} from '../examples-utils/simple-bottom-buttons.js'
  15. class SimplifyModifierPluginImpl extends SimplifyModifierPlugin {
  16. protected _simplify(geometry: IGeometry, count: number) {
  17. const res = new SimplifyModifier().modify(geometry, count) as IGeometry
  18. res.computeVertexNormals()
  19. return res
  20. }
  21. uiConfig = generateUiFolder('Simplify Modifier', this)
  22. }
  23. async function init() {
  24. const viewer = new ThreeViewer({
  25. canvas: document.getElementById('mcanvas') as HTMLCanvasElement,
  26. msaa: true,
  27. plugins: [PickingPlugin, LoadingScreenPlugin],
  28. })
  29. const simplify = viewer.addPluginSync(SimplifyModifierPluginImpl)
  30. const ui = viewer.addPluginSync(new TweakpaneUiPlugin(true))
  31. await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr', {
  32. setBackground: true,
  33. })
  34. const result = await viewer.load<IObject3D>('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf', {
  35. autoCenter: true,
  36. autoScale: true,
  37. })
  38. const mats: IMaterial[] = []
  39. result?.traverse((obj) => {
  40. obj.materials?.map(m=>{
  41. if (!m) return
  42. m.wireframe = true
  43. mats.push(m)
  44. })
  45. })
  46. createSimpleButtons({
  47. ['Simplify']: async(_: HTMLButtonElement) => {
  48. await simplify.simplifyAll(result, {factor: 0.5})
  49. },
  50. })
  51. ui.setupPluginUi(SimplifyModifierPluginImpl)
  52. mats.forEach(m=>ui.appendChild(m.uiConfig, {expanded: false}))
  53. }
  54. init().finally(_testFinish)