threepipe
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

script.ts 2.8KB

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