threepipe
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

script.ts 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import {_testFinish, CameraView, CameraViewPlugin, EasingFunctions, ThreeViewer, Vector3} from 'threepipe'
  2. import {TweakpaneUiPlugin} from '@threepipe/plugin-tweakpane'
  3. import {createSimpleButtons} from '../examples-utils/simple-bottom-buttons.js'
  4. async function init() {
  5. const viewer = new ThreeViewer({
  6. canvas: document.getElementById('mcanvas') as HTMLCanvasElement,
  7. })
  8. const cameraViewPlugin = viewer.addPluginSync(CameraViewPlugin)
  9. console.log(cameraViewPlugin)
  10. await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr')
  11. await viewer.load('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf', {
  12. autoCenter: true,
  13. autoScale: true,
  14. })
  15. // Get the current camera view and save it in a variable
  16. const initialView = cameraViewPlugin.getView()
  17. const topView = new CameraView(
  18. 'topView',
  19. new Vector3(0, 6, 0),
  20. initialView.target,
  21. )
  22. const leftView = new CameraView(
  23. 'leftView',
  24. new Vector3(-6, 0, 0),
  25. initialView.target,
  26. )
  27. const rightView = new CameraView(
  28. 'rightView',
  29. new Vector3(6, 0, 0),
  30. initialView.target,
  31. )
  32. createSimpleButtons({
  33. ['Top View']: async() => cameraViewPlugin.animateToView(topView, 1000, EasingFunctions.easeInOutSine),
  34. ['Left View']: async() => cameraViewPlugin.animateToView(leftView, 1000, EasingFunctions.easeInOutSine),
  35. ['Right View']: async() => cameraViewPlugin.animateToView(rightView, 1000, EasingFunctions.easeInOutSine),
  36. ['Pan right/left']: async(btn) => {
  37. btn.disabled = true
  38. const currentView = cameraViewPlugin.getView()
  39. await cameraViewPlugin.animateToView(new CameraView(
  40. 'view',
  41. currentView.position,
  42. new Vector3(4, 0, 0).sub(currentView.target),
  43. ))
  44. btn.disabled = false
  45. },
  46. ['Move up/down']: async(btn) => {
  47. btn.disabled = true
  48. const currentView = cameraViewPlugin.getView()
  49. await cameraViewPlugin.animateToView(new CameraView(
  50. 'view',
  51. new Vector3(currentView.position.x, 5 - currentView.position.y, currentView.position.z),
  52. currentView.target,
  53. ))
  54. btn.disabled = false
  55. },
  56. ['Reset']: async() => cameraViewPlugin.animateToView(initialView, 1000, EasingFunctions.easeInOutSine),
  57. })
  58. const ui = viewer.addPluginSync(TweakpaneUiPlugin, true)
  59. ui.appendChild(viewer.scene.mainCamera.uiConfig)
  60. ui.setupPluginUi(CameraViewPlugin, {expanded: true})
  61. }
  62. init().finally(_testFinish)