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

script.ts 3.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import {
  2. _testFinish,
  3. EditorViewWidgetPlugin,
  4. GBufferPlugin,
  5. PickingPlugin,
  6. ThreeViewer,
  7. TransformControlsPlugin,
  8. } from 'threepipe'
  9. import {TweakpaneUiPlugin} from '@threepipe/plugin-tweakpane'
  10. import {ThreeSVGRendererPlugin} from '@threepipe/plugin-svg-renderer'
  11. import {GeometryGeneratorPlugin} from '@threepipe/plugin-geometry-generator'
  12. async function init() {
  13. const viewer = new ThreeViewer({
  14. canvas: document.getElementById('mcanvas') as HTMLCanvasElement,
  15. msaa: false,
  16. rgbm: false,
  17. // zPrepass: true,
  18. tonemap: false,
  19. plugins: [GBufferPlugin, PickingPlugin, TransformControlsPlugin],
  20. })
  21. viewer.addPluginSync(new EditorViewWidgetPlugin('bottom-left', 128))
  22. viewer.scene.backgroundColor = null
  23. // viewer.renderManager.screenPass.clipBackground = true // required when rgbm: true
  24. viewer.scene.mainCamera.controls!.enableDamping = false
  25. viewer.renderEnabled = false
  26. viewer.addPluginSync(new ThreeSVGRendererPlugin(true))
  27. // viewer.scene.addObject(new DirectionalLight2(0xffffff, 1).rotateZ(0.5).rotateX(0.5))
  28. await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr')
  29. const generator = viewer.addPluginSync(GeometryGeneratorPlugin)
  30. // generator.defaultMaterialClass = UnlitMaterial
  31. console.log(generator.generators)
  32. // Head (sphere)
  33. const head = generator.generateObject('sphere', {radius: 0.5, widthSegments: 32, heightSegments: 32})
  34. head.translateY(1)
  35. viewer.scene.addObject(head)
  36. // Body (box)
  37. const body = generator.generateObject('box', {width: 1.5, height: 1.5, depth: 1})
  38. body.material.color.set(0x00ffff)
  39. viewer.scene.addObject(body)
  40. // Legs (cylinders)
  41. const leftLeg = generator.generateObject('cylinder', {radiusTop: 0.125, radiusBottom: 0.125, height: 1.5})
  42. leftLeg.material.color.set(0x00ff00)
  43. leftLeg.translateX(-0.5)
  44. leftLeg.translateY(-1)
  45. viewer.scene.addObject(leftLeg)
  46. const rightLeg = generator.generateObject('cylinder', {radiusTop: 0.125, radiusBottom: 0.125, height: 1.5})
  47. rightLeg.material.color.set(0x00ff00)
  48. rightLeg.translateX(0.5)
  49. rightLeg.translateY(-1)
  50. viewer.scene.addObject(rightLeg)
  51. // Arms (cylinders)
  52. const leftArm = generator.generateObject('cylinder', {radiusTop: 0.125, radiusBottom: 0.125, height: 1})
  53. leftArm.material.color.set(0xff0000)
  54. leftArm.translateX(-1)
  55. leftArm.translateY(0.5)
  56. leftArm.rotateZ(Math.PI / 2)
  57. viewer.scene.addObject(leftArm)
  58. const rightArm = generator.generateObject('cylinder', {radiusTop: 0.125, radiusBottom: 0.125, height: 1})
  59. rightArm.material.color.set(0xff0000)
  60. rightArm.translateX(1)
  61. rightArm.translateY(0.5)
  62. rightArm.rotateZ(Math.PI / 2)
  63. viewer.scene.addObject(rightArm)
  64. viewer.renderEnabled = true
  65. // waiting because we need to render pipeline once to autoscale
  66. await viewer.doOnce('postFrame')
  67. const ui = viewer.addPluginSync(new TweakpaneUiPlugin(true))
  68. ui.setupPlugins(ThreeSVGRendererPlugin)
  69. ui.setupPlugins(GeometryGeneratorPlugin)
  70. ui.setupPlugins(PickingPlugin)
  71. ui.setupPlugins(TransformControlsPlugin)
  72. }
  73. init().finally(_testFinish)