threepipe
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

script.ts 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import {
  2. _testFinish, _testStart,
  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. _testStart()
  55. init().finally(_testFinish)