threepipe
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

script.ts 2.1KB

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