threepipe
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import {_testFinish, IObject3D, LoadingScreenPlugin, RenderTargetPreviewPlugin, ThreeViewer} from 'threepipe'
  2. import {TweakpaneUiPlugin} from '@threepipe/plugin-tweakpane'
  3. const viewer = new ThreeViewer({
  4. canvas: document.getElementById('mcanvas') as HTMLCanvasElement,
  5. msaa: false,
  6. rgbm: true,
  7. zPrepass: false,
  8. plugins: [LoadingScreenPlugin],
  9. })
  10. async function init() {
  11. const targetPreview = viewer.addPluginSync(RenderTargetPreviewPlugin)
  12. targetPreview.addTarget(()=>viewer.renderManager.composerTarget, 'composer-1', false, false)
  13. viewer.renderManager.renderPass.preserveTransparentTarget = true
  14. targetPreview.addTarget(()=>viewer.renderManager.renderPass.transparentTarget, 'transparent', true, true)
  15. targetPreview.addTarget(()=>viewer.renderManager.composerTarget2, 'composer-2', false, false)
  16. await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr')
  17. const [model, model2] = await Promise.all([
  18. viewer.load<IObject3D>('https://threejs.org/examples/models/gltf/IridescenceLamp.glb', {
  19. autoCenter: true,
  20. autoScale: true,
  21. }),
  22. viewer.load<IObject3D>('https://threejs.org/examples/models/gltf/IridescentDishWithOlives.glb', {
  23. autoCenter: true,
  24. autoScale: true,
  25. }),
  26. ])
  27. if (!model || !model2) {
  28. console.error('model not loaded')
  29. return
  30. }
  31. model.position.x = -1
  32. model2.position.x = 1
  33. model2.position.y = -1.2
  34. const ui = viewer.addPluginSync(new TweakpaneUiPlugin(false))
  35. const m1 = model?.getObjectByName('lamp_transmission')
  36. const m2 = model2?.getObjectByName('glassCover')
  37. const materials = [...m1?.materials || [], ...m2?.materials || []]
  38. for (const material of materials) {
  39. const config = material.uiConfig
  40. if (!config) continue
  41. ui.appendChild(config)
  42. }
  43. }
  44. init().finally(_testFinish)