threepipe
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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