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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import {
  2. _testFinish, _testStart,
  3. HemisphereLight,
  4. IObject3D,
  5. LoadingScreenPlugin,
  6. PerspectiveCamera2,
  7. ProgressivePlugin,
  8. RenderTargetPreviewPlugin,
  9. SSAAPlugin,
  10. ThreeViewer,
  11. Vector3,
  12. VirtualCamerasPlugin,
  13. } from 'threepipe'
  14. import {TweakpaneUiPlugin} from '@threepipe/plugin-tweakpane'
  15. async function init() {
  16. const viewer = new ThreeViewer({
  17. canvas: document.getElementById('mcanvas') as HTMLCanvasElement,
  18. debug: true,
  19. plugins: [new ProgressivePlugin(16), SSAAPlugin, LoadingScreenPlugin],
  20. })
  21. const virtualCameras = viewer.addPluginSync(VirtualCamerasPlugin)
  22. viewer.scene.addObject(new HemisphereLight(0xffffff, 0x444444, 10))
  23. await viewer.load<IObject3D>('https://threejs.org/examples/models/fbx/Samba Dancing.fbx', {
  24. autoCenter: true,
  25. autoScale: true,
  26. })
  27. viewer.scene.mainCamera.position.set(5, 5, 5)
  28. viewer.scene.mainCamera.target.set(0, 0.25, 0)
  29. viewer.scene.mainCamera.setDirty()
  30. const views = [
  31. [new Vector3(5, 0, 0), 'right'],
  32. [new Vector3(0, 5, 0), 'top'],
  33. [new Vector3(0, 0, 5), 'front'],
  34. ] as const
  35. const rt = viewer.addPluginSync(RenderTargetPreviewPlugin)
  36. const ui = viewer.addPluginSync(TweakpaneUiPlugin, true)
  37. ui.appendChild(viewer.scene.mainCamera.uiConfig)
  38. for (const [view, name] of views) {
  39. const camera = new PerspectiveCamera2('', viewer.canvas, false, 45, 1)
  40. camera.name = name
  41. camera.position.copy(view)
  42. camera.target.set(0, 0.25, 0)
  43. camera.userData.autoLookAtTarget = true
  44. camera.setDirty()
  45. camera.addEventListener('update', ()=>{
  46. viewer.setDirty() // since the camera is not added to the scene it wont update automatically when setDirty is called(like from the UI)
  47. })
  48. viewer.scene.mainCamera.addEventListener('update', ()=>{
  49. camera.target.copy(viewer.scene.mainCamera.target) // sync the lookAt target of all the cameras
  50. camera.setDirty()
  51. })
  52. const vCam = virtualCameras.addCamera(camera)
  53. rt.addTarget(()=>vCam.target, name, false, false, true)
  54. ui.appendChild(camera.uiConfig)
  55. }
  56. }
  57. _testStart()
  58. init().finally(_testFinish)