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

script.tsx 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import {_testFinish, LoadingScreenPlugin, ThreeViewer} from 'threepipe'
  2. // @ts-expect-error no need react here
  3. import React from 'react'
  4. // @ts-expect-error no need react-dom here
  5. import ReactDOM from 'react-dom'
  6. function ThreeViewerComponent({src, env}: {src: string, env: string}) {
  7. const canvasRef = React.useRef(null)
  8. React.useEffect(() => {
  9. const viewer = new ThreeViewer({canvas: canvasRef.current,
  10. plugins: [LoadingScreenPlugin],
  11. })
  12. // Load an environment map
  13. const envPromise = viewer.setEnvironmentMap(env)
  14. const modelPromise = viewer.load(src, {
  15. autoCenter: true,
  16. autoScale: true,
  17. })
  18. Promise.all([envPromise, modelPromise]).then(([env, model])=>{
  19. console.log('Loaded', model, env, viewer)
  20. })
  21. return () => {
  22. viewer.dispose()
  23. }
  24. }, [])
  25. return (
  26. <canvas id="three-canvas" style={{width: 800, height: 600}} ref={canvasRef} />
  27. )
  28. }
  29. async function init() {
  30. ReactDOM.render(
  31. <ThreeViewerComponent
  32. src={'https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf'}
  33. env={'https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr'}
  34. />,
  35. document.getElementById('root')
  36. )
  37. }
  38. init().finally(_testFinish)