@needle-tools/three 0.145.4 → 0.146.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +32586 -35951
  3. package/build/three.js +32600 -35965
  4. package/build/three.min.js +6 -7
  5. package/build/three.module.js +1547 -1154
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +49 -66
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +85 -95
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +84 -169
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +143 -261
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +110 -25
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +22 -33
  60. package/examples/js/interactive/InteractiveGroup.js +6 -12
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +38 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +201 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +286 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +354 -405
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/MaterialXLoader.js +392 -0
  98. package/examples/js/loaders/NRRDLoader.js +44 -84
  99. package/examples/js/loaders/OBJLoader.js +50 -65
  100. package/examples/js/loaders/PCDLoader.js +34 -29
  101. package/examples/js/loaders/PDBLoader.js +17 -13
  102. package/examples/js/loaders/PLYLoader.js +9 -39
  103. package/examples/js/loaders/PRWMLoader.js +11 -22
  104. package/examples/js/loaders/PVRLoader.js +7 -16
  105. package/examples/js/loaders/RGBELoader.js +36 -61
  106. package/examples/js/loaders/RGBMLoader.js +26 -87
  107. package/examples/js/loaders/STLLoader.js +20 -27
  108. package/examples/js/loaders/SVGLoader.js +361 -233
  109. package/examples/js/loaders/TDSLoader.js +81 -118
  110. package/examples/js/loaders/TGALoader.js +39 -41
  111. package/examples/js/loaders/TIFFLoader.js +0 -1
  112. package/examples/js/loaders/TTFLoader.js +0 -8
  113. package/examples/js/loaders/TiltLoader.js +14 -15
  114. package/examples/js/loaders/VOXLoader.js +8 -16
  115. package/examples/js/loaders/VRMLLoader.js +243 -340
  116. package/examples/js/loaders/VTKLoader.js +101 -118
  117. package/examples/js/loaders/XYZLoader.js +2 -4
  118. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  119. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  120. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  121. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  122. package/examples/js/math/Capsule.js +0 -17
  123. package/examples/js/math/ColorConverter.js +3 -3
  124. package/examples/js/math/ConvexHull.js +183 -139
  125. package/examples/js/math/ImprovedNoise.js +1 -1
  126. package/examples/js/math/Lut.js +8 -15
  127. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  128. package/examples/js/math/OBB.js +90 -49
  129. package/examples/js/math/Octree.js +2 -57
  130. package/examples/js/math/SimplexNoise.js +74 -88
  131. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  132. package/examples/js/misc/GPUComputationRenderer.js +14 -18
  133. package/examples/js/misc/Gyroscope.js +5 -9
  134. package/examples/js/misc/MD2Character.js +14 -23
  135. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  136. package/examples/js/misc/MorphAnimMesh.js +0 -6
  137. package/examples/js/misc/MorphBlendMesh.js +3 -30
  138. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  139. package/examples/js/misc/RollerCoaster.js +17 -24
  140. package/examples/js/misc/TubePainter.js +18 -12
  141. package/examples/js/misc/Volume.js +16 -45
  142. package/examples/js/misc/VolumeSlice.js +14 -24
  143. package/examples/js/modifiers/CurveModifier.js +19 -21
  144. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  145. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  146. package/examples/js/modifiers/TessellateModifier.js +2 -9
  147. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  148. package/examples/js/objects/Lensflare.js +47 -38
  149. package/examples/js/objects/LightningStorm.js +10 -13
  150. package/examples/js/objects/MarchingCubes.js +80 -59
  151. package/examples/js/objects/Reflector.js +22 -20
  152. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  153. package/examples/js/objects/Refractor.js +52 -30
  154. package/examples/js/objects/ShadowMesh.js +1 -2
  155. package/examples/js/objects/Sky.js +2 -7
  156. package/examples/js/objects/Water.js +23 -18
  157. package/examples/js/objects/Water2.js +20 -19
  158. package/examples/js/physics/AmmoPhysics.js +23 -20
  159. package/examples/js/physics/OimoPhysics.js +19 -17
  160. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  161. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  162. package/examples/js/postprocessing/BloomPass.js +38 -17
  163. package/examples/js/postprocessing/BokehPass.js +29 -12
  164. package/examples/js/postprocessing/ClearPass.js +1 -6
  165. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  166. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  167. package/examples/js/postprocessing/EffectComposer.js +25 -32
  168. package/examples/js/postprocessing/FilmPass.js +7 -5
  169. package/examples/js/postprocessing/GlitchPass.js +10 -11
  170. package/examples/js/postprocessing/HalftonePass.js +9 -9
  171. package/examples/js/postprocessing/LUTPass.js +2 -15
  172. package/examples/js/postprocessing/MaskPass.js +20 -17
  173. package/examples/js/postprocessing/OutlinePass.js +45 -36
  174. package/examples/js/postprocessing/Pass.js +11 -14
  175. package/examples/js/postprocessing/RenderPass.js +3 -7
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -6
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +234 -168
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  254. package/examples/jsm/capabilities/WebGPU.js +3 -1
  255. package/examples/jsm/controls/OrbitControls.js +44 -4
  256. package/examples/jsm/exporters/GLTFExporter.js +17 -131
  257. package/examples/jsm/exporters/USDZExporter.js +75 -19
  258. package/examples/jsm/interactive/HTMLMesh.js +2 -0
  259. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  260. package/examples/jsm/loaders/3DMLoader.js +1 -2
  261. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  262. package/examples/jsm/loaders/FBXLoader.js +16 -2
  263. package/examples/jsm/loaders/GLTFLoader.js +204 -377
  264. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  265. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  266. package/examples/jsm/loaders/LottieLoader.js +4 -2
  267. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  268. package/examples/jsm/loaders/PCDLoader.js +1 -1
  269. package/examples/jsm/loaders/PLYLoader.js +68 -16
  270. package/examples/jsm/loaders/SVGLoader.js +227 -14
  271. package/examples/jsm/loaders/USDZLoader.js +31 -16
  272. package/examples/jsm/nodes/Nodes.js +14 -2
  273. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  274. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  275. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  276. package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
  277. package/examples/jsm/nodes/core/Node.js +1 -1
  278. package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
  279. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  280. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  281. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  282. package/examples/jsm/nodes/core/constants.js +13 -13
  283. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  284. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  285. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  286. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  287. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  288. package/examples/jsm/nodes/materials/Materials.js +9 -7
  289. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  290. package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
  291. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  292. package/examples/jsm/nodes/math/MathNode.js +5 -0
  293. package/examples/jsm/nodes/math/OperatorNode.js +6 -1
  294. package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
  295. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
  296. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
  297. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  298. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  299. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  300. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  301. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  302. package/examples/jsm/nodes/utils/TimerNode.js +1 -1
  303. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  304. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  305. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  306. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  307. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  308. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  309. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  310. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  311. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  312. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  313. package/examples/jsm/postprocessing/OutlinePass.js +10 -0
  314. package/examples/jsm/postprocessing/Pass.js +2 -0
  315. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  316. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  317. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  318. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  319. package/examples/jsm/postprocessing/SavePass.js +17 -1
  320. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  321. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  322. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  323. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  324. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
  325. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  326. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  327. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  328. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  329. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
  330. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  331. package/examples/jsm/shaders/VelocityShader.js +128 -0
  332. package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
  333. package/examples/jsm/utils/SceneUtils.js +129 -4
  334. package/examples/jsm/utils/TextureUtils.js +85 -0
  335. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  336. package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
  337. package/package.json +11 -12
  338. package/src/Three.js +1 -0
  339. package/src/audio/AudioContext.js +5 -5
  340. package/src/cameras/CubeCamera.js +14 -14
  341. package/src/constants.js +1 -1
  342. package/src/core/InstancedBufferGeometry.js +1 -7
  343. package/src/extras/Earcut.js +67 -67
  344. package/src/helpers/DirectionalLightHelper.js +5 -1
  345. package/src/helpers/HemisphereLightHelper.js +4 -1
  346. package/src/helpers/PointLightHelper.js +2 -1
  347. package/src/helpers/SpotLightHelper.js +4 -2
  348. package/src/lights/PointLight.js +2 -2
  349. package/src/lights/SpotLight.js +2 -2
  350. package/src/loaders/FileLoader.js +4 -1
  351. package/src/loaders/ObjectLoader.js +5 -1
  352. package/src/materials/Material.js +1 -1
  353. package/src/math/Color.js +5 -5
  354. package/src/math/Matrix3.js +53 -18
  355. package/src/math/Ray.js +2 -5
  356. package/src/math/Sphere.js +19 -26
  357. package/src/objects/InstancedMesh.js +7 -0
  358. package/src/objects/LOD.js +25 -6
  359. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  360. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  361. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  362. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  363. package/src/renderers/WebGLRenderTarget.js +1 -1
  364. package/src/renderers/WebGLRenderer.js +36 -62
  365. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  367. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  369. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  370. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  371. package/src/renderers/shaders/ShaderChunk.js +3 -0
  372. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  373. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  374. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  375. package/src/renderers/shaders/ShaderLib.js +20 -6
  376. package/src/renderers/shaders/UniformsLib.js +1 -1
  377. package/src/renderers/shaders/UniformsUtils.js +15 -0
  378. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  379. package/src/renderers/webgl/WebGLBackground.js +15 -7
  380. package/src/renderers/webgl/WebGLLights.js +0 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  382. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  383. package/src/renderers/webgl/WebGLState.js +31 -1
  384. package/src/renderers/webgl/WebGLTextures.js +71 -18
  385. package/src/renderers/webgl/WebGLUniforms.js +116 -20
  386. package/src/renderers/webgl/WebGLUtils.js +1 -1
  387. package/src/renderers/webxr/WebXRController.js +46 -13
  388. package/src/renderers/webxr/WebXRManager.js +85 -3
  389. package/src/scenes/Scene.js +8 -0
  390. package/src/textures/CompressedArrayTexture.js +18 -0
  391. package/examples/js/libs/lottie_canvas.js +0 -12751
  392. package/examples/js/shaders/PixelShader.js +0 -51
  393. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -2,13 +2,24 @@
2
2
 
3
3
  class USDZExporter {
4
4
 
5
- async parse( scene ) {
5
+ async parse( scene, options = {
6
+ ar: {
7
+ anchoring: {
8
+ type: 'plane'
9
+ },
10
+ planeAnchoring: {
11
+ alignment: 'vertical'
12
+ }
13
+ }
14
+ } ) {
6
15
 
7
16
  const files = {};
8
- const modelFileName = 'model.usda'; // model file should be first in USDZ archive so we init it here
17
+ const modelFileName = 'model.usda';
9
18
 
19
+ // model file should be first in USDZ archive so we init it here
10
20
  files[ modelFileName ] = null;
11
21
  let output = buildHeader();
22
+ output += buildSceneStart( options );
12
23
  const materials = {};
13
24
  const textures = {};
14
25
  scene.traverseVisible( object => {
@@ -17,11 +28,9 @@
17
28
 
18
29
  const geometry = object.geometry;
19
30
  const material = object.material;
20
-
21
31
  if ( material.isMeshStandardMaterial ) {
22
32
 
23
33
  const geometryFileName = 'geometries/Geometry_' + geometry.id + '.usd';
24
-
25
34
  if ( ! ( geometryFileName in files ) ) {
26
35
 
27
36
  const meshObject = buildMeshObject( geometry );
@@ -43,13 +52,17 @@
43
52
 
44
53
  }
45
54
 
55
+ } else if ( object.isCamera ) {
56
+
57
+ output += buildCamera( object );
58
+
46
59
  }
47
60
 
48
61
  } );
62
+ output += buildSceneEnd();
49
63
  output += buildMaterials( materials, textures );
50
64
  files[ modelFileName ] = fflate.strToU8( output );
51
65
  output = null;
52
-
53
66
  for ( const id in textures ) {
54
67
 
55
68
  const texture = textures[ id ];
@@ -59,19 +72,18 @@
59
72
  const blob = await new Promise( resolve => canvas.toBlob( resolve, isRGBA ? 'image/png' : 'image/jpeg', 1 ) );
60
73
  files[ `textures/Texture_${id}.${isRGBA ? 'png' : 'jpg'}` ] = new Uint8Array( await blob.arrayBuffer() );
61
74
 
62
- } // 64 byte alignment
63
- // https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109
75
+ }
64
76
 
77
+ // 64 byte alignment
78
+ // https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109
65
79
 
66
80
  let offset = 0;
67
-
68
81
  for ( const filename in files ) {
69
82
 
70
83
  const file = files[ filename ];
71
84
  const headerSize = 34 + filename.length;
72
85
  offset += headerSize;
73
86
  const offsetMod64 = offset & 63;
74
-
75
87
  if ( offsetMod64 !== 4 ) {
76
88
 
77
89
  const padLength = 64 - offsetMod64;
@@ -95,7 +107,6 @@
95
107
  }
96
108
 
97
109
  }
98
-
99
110
  function imageToCanvas( image, color ) {
100
111
 
101
112
  if ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) {
@@ -106,7 +117,6 @@
106
117
  canvas.height = image.height * Math.min( 1, scale );
107
118
  const context = canvas.getContext( '2d' );
108
119
  context.drawImage( image, 0, 0, canvas.width, canvas.height );
109
-
110
120
  if ( color !== undefined ) {
111
121
 
112
122
  const hex = parseInt( color, 16 );
@@ -115,7 +125,6 @@
115
125
  const b = ( hex & 255 ) / 255;
116
126
  const imagedata = context.getImageData( 0, 0, canvas.width, canvas.height );
117
127
  const data = imagedata.data;
118
-
119
128
  for ( let i = 0; i < data.length; i += 4 ) {
120
129
 
121
130
  data[ i + 0 ] = data[ i + 0 ] * r;
@@ -132,11 +141,11 @@
132
141
 
133
142
  }
134
143
 
135
- } //
144
+ }
136
145
 
146
+ //
137
147
 
138
148
  const PRECISION = 7;
139
-
140
149
  function buildHeader() {
141
150
 
142
151
  return `#usda 1.0
@@ -148,6 +157,40 @@
148
157
  upAxis = "Y"
149
158
  )
150
159
 
160
+ `;
161
+
162
+ }
163
+
164
+ function buildSceneStart( options ) {
165
+
166
+ return `def Xform "Root"
167
+ {
168
+ def Scope "Scenes" (
169
+ kind = "sceneLibrary"
170
+ )
171
+ {
172
+ def Xform "Scene" (
173
+ customData = {
174
+ bool preliminary_collidesWithEnvironment = 0
175
+ string sceneName = "Scene"
176
+ }
177
+ sceneName = "Scene"
178
+ )
179
+ {
180
+ token preliminary:anchoring:type = "${options.ar.anchoring.type}"
181
+ token preliminary:planeAnchoring:alignment = "${options.ar.planeAnchoring.alignment}"
182
+
183
+ `;
184
+
185
+ }
186
+
187
+ function buildSceneEnd() {
188
+
189
+ return `
190
+ }
191
+ }
192
+ }
193
+
151
194
  `;
152
195
 
153
196
  }
@@ -158,14 +201,14 @@
158
201
  output += dataToInsert;
159
202
  return fflate.strToU8( output );
160
203
 
161
- } // Xform
204
+ }
162
205
 
206
+ // Xform
163
207
 
164
208
  function buildXform( object, geometry, material ) {
165
209
 
166
210
  const name = 'Object_' + object.id;
167
211
  const transform = buildMatrix( object.matrixWorld );
168
-
169
212
  if ( object.matrixWorld.determinant() < 0 ) {
170
213
 
171
214
  console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', object );
@@ -197,8 +240,9 @@
197
240
 
198
241
  return `(${array[ offset + 0 ]}, ${array[ offset + 1 ]}, ${array[ offset + 2 ]}, ${array[ offset + 3 ]})`;
199
242
 
200
- } // Mesh
243
+ }
201
244
 
245
+ // Mesh
202
246
 
203
247
  function buildMeshObject( geometry ) {
204
248
 
@@ -246,7 +290,6 @@ def "Geometry"
246
290
 
247
291
  const index = geometry.index;
248
292
  const array = [];
249
-
250
293
  if ( index !== null ) {
251
294
 
252
295
  for ( let i = 0; i < index.count; i ++ ) {
@@ -258,7 +301,6 @@ def "Geometry"
258
301
  } else {
259
302
 
260
303
  const length = geometry.attributes.position.count;
261
-
262
304
  for ( let i = 0; i < length; i ++ ) {
263
305
 
264
306
  array.push( i );
@@ -281,7 +323,6 @@ def "Geometry"
281
323
  }
282
324
 
283
325
  const array = [];
284
-
285
326
  for ( let i = 0; i < attribute.count; i ++ ) {
286
327
 
287
328
  const x = attribute.getX( i );
@@ -305,7 +346,6 @@ def "Geometry"
305
346
  }
306
347
 
307
348
  const array = [];
308
-
309
349
  for ( let i = 0; i < attribute.count; i ++ ) {
310
350
 
311
351
  const x = attribute.getX( i );
@@ -316,13 +356,13 @@ def "Geometry"
316
356
 
317
357
  return array.join( ', ' );
318
358
 
319
- } // Materials
359
+ }
320
360
 
361
+ // Materials
321
362
 
322
363
  function buildMaterials( materials, textures ) {
323
364
 
324
365
  const array = [];
325
-
326
366
  for ( const uuid in materials ) {
327
367
 
328
368
  const material = materials[ uuid ];
@@ -342,10 +382,10 @@ ${array.join( '' )}
342
382
  function buildMaterial( material, textures ) {
343
383
 
344
384
  // https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html
385
+
345
386
  const pad = ' ';
346
387
  const inputs = [];
347
388
  const samplers = [];
348
-
349
389
  function buildTexture( texture, mapType, color ) {
350
390
 
351
391
  const id = texture.id + ( color ? '_' + color.getHexString() : '' );
@@ -390,7 +430,6 @@ ${array.join( '' )}
390
430
  if ( material.map !== null ) {
391
431
 
392
432
  inputs.push( `${pad}color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>` );
393
-
394
433
  if ( material.transparent ) {
395
434
 
396
435
  inputs.push( `${pad}float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:a>` );
@@ -518,6 +557,52 @@ ${samplers.join( '\n' )}
518
557
 
519
558
  }
520
559
 
560
+ function buildCamera( camera ) {
561
+
562
+ const name = camera.name ? camera.name : 'Camera_' + camera.id;
563
+ const transform = buildMatrix( camera.matrixWorld );
564
+ if ( camera.matrixWorld.determinant() < 0 ) {
565
+
566
+ console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', camera );
567
+
568
+ }
569
+
570
+ if ( camera.isOrthographicCamera ) {
571
+
572
+ return `def Camera "${name}"
573
+ {
574
+ matrix4d xformOp:transform = ${transform}
575
+ uniform token[] xformOpOrder = ["xformOp:transform"]
576
+
577
+ float2 clippingRange = (${camera.near}, ${camera.far})
578
+ float horizontalAperture = ${( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10}
579
+ float verticalAperture = ${( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10}
580
+ token projection = "orthographic"
581
+ }
582
+
583
+ `;
584
+
585
+ } else {
586
+
587
+ return `def Camera "${name}"
588
+ {
589
+ matrix4d xformOp:transform = ${transform}
590
+ uniform token[] xformOpOrder = ["xformOp:transform"]
591
+
592
+ float2 clippingRange = (${camera.near}, ${camera.far})
593
+ float focalLength = ${camera.getFocalLength()}
594
+ float focusDistance = ${camera.focus}
595
+ float horizontalAperture = ${camera.getFilmWidth()}
596
+ token projection = "perspective"
597
+ float verticalAperture = ${camera.getFilmHeight()}
598
+ }
599
+
600
+ `;
601
+
602
+ }
603
+
604
+ }
605
+
521
606
  THREE.USDZExporter = USDZExporter;
522
607
 
523
608
  } )();
@@ -18,7 +18,6 @@
18
18
  let x = - widthHalf;
19
19
  let y = - heightHalf;
20
20
  let z = - depthHalf;
21
-
22
21
  for ( let i = 0; i <= widthSegments; i ++ ) {
23
22
 
24
23
  vertices.push( x, - heightHalf, - depthHalf, x, heightHalf, - depthHalf );
@@ -4,25 +4,29 @@
4
4
 
5
5
  constructor( points = [] ) {
6
6
 
7
- super(); // buffers
7
+ super();
8
+
9
+ // buffers
8
10
 
9
11
  const vertices = [];
10
12
  const normals = [];
11
-
12
13
  if ( THREE.ConvexHull === undefined ) {
13
14
 
14
15
  console.error( 'THREE.ConvexGeometry: ConvexGeometry relies on THREE.ConvexHull' );
15
16
 
16
17
  }
17
18
 
18
- const convexHull = new THREE.ConvexHull().setFromPoints( points ); // generate vertices and normals
19
+ const convexHull = new THREE.ConvexHull().setFromPoints( points );
19
20
 
20
- const faces = convexHull.faces;
21
+ // generate vertices and normals
21
22
 
23
+ const faces = convexHull.faces;
22
24
  for ( let i = 0; i < faces.length; i ++ ) {
23
25
 
24
26
  const face = faces[ i ];
25
- let edge = face.edge; // we move along a doubly-connected edge list to access all face points (see HalfEdge docs)
27
+ let edge = face.edge;
28
+
29
+ // we move along a doubly-connected edge list to access all face points (see HalfEdge docs)
26
30
 
27
31
  do {
28
32
 
@@ -33,8 +37,9 @@
33
37
 
34
38
  } while ( edge !== face.edge );
35
39
 
36
- } // build geometry
40
+ }
37
41
 
42
+ // build geometry
38
43
 
39
44
  this.setAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );
40
45
  this.setAttribute( 'normal', new THREE.Float32BufferAttribute( normals, 3 ) );
@@ -19,35 +19,48 @@
19
19
 
20
20
  constructor( mesh, position, orientation, size ) {
21
21
 
22
- super(); // buffers
22
+ super();
23
+
24
+ // buffers
23
25
 
24
26
  const vertices = [];
25
27
  const normals = [];
26
- const uvs = []; // helpers
28
+ const uvs = [];
29
+
30
+ // helpers
27
31
 
28
- const plane = new THREE.Vector3(); // this matrix represents the transformation of the decal projector
32
+ const plane = new THREE.Vector3();
33
+
34
+ // this matrix represents the transformation of the decal projector
29
35
 
30
36
  const projectorMatrix = new THREE.Matrix4();
31
37
  projectorMatrix.makeRotationFromEuler( orientation );
32
38
  projectorMatrix.setPosition( position );
33
39
  const projectorMatrixInverse = new THREE.Matrix4();
34
- projectorMatrixInverse.copy( projectorMatrix ).invert(); // generate buffers
40
+ projectorMatrixInverse.copy( projectorMatrix ).invert();
41
+
42
+ // generate buffers
35
43
 
36
- generate(); // build geometry
44
+ generate();
45
+
46
+ // build geometry
37
47
 
38
48
  this.setAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );
39
49
  this.setAttribute( 'normal', new THREE.Float32BufferAttribute( normals, 3 ) );
40
50
  this.setAttribute( 'uv', new THREE.Float32BufferAttribute( uvs, 2 ) );
41
-
42
51
  function generate() {
43
52
 
44
53
  let decalVertices = [];
45
54
  const vertex = new THREE.Vector3();
46
- const normal = new THREE.Vector3(); // handle different geometry types
55
+ const normal = new THREE.Vector3();
56
+
57
+ // handle different geometry types
47
58
 
48
59
  const geometry = mesh.geometry;
49
60
  const positionAttribute = geometry.attributes.position;
50
- const normalAttribute = geometry.attributes.normal; // first, create an array of 'DecalVertex' objects
61
+ const normalAttribute = geometry.attributes.normal;
62
+
63
+ // first, create an array of 'DecalVertex' objects
51
64
  // three consecutive 'DecalVertex' objects represent a single face
52
65
  //
53
66
  // this data structure will be later used to perform the clipping
@@ -55,8 +68,8 @@
55
68
  if ( geometry.index !== null ) {
56
69
 
57
70
  // indexed THREE.BufferGeometry
58
- const index = geometry.index;
59
71
 
72
+ const index = geometry.index;
60
73
  for ( let i = 0; i < index.count; i ++ ) {
61
74
 
62
75
  vertex.fromBufferAttribute( positionAttribute, index.getX( i ) );
@@ -68,6 +81,7 @@
68
81
  } else {
69
82
 
70
83
  // non-indexed THREE.BufferGeometry
84
+
71
85
  for ( let i = 0; i < positionAttribute.count; i ++ ) {
72
86
 
73
87
  vertex.fromBufferAttribute( positionAttribute, i );
@@ -76,23 +90,32 @@
76
90
 
77
91
  }
78
92
 
79
- } // second, clip the geometry so that it doesn't extend out from the projector
93
+ }
80
94
 
95
+ // second, clip the geometry so that it doesn't extend out from the projector
81
96
 
82
97
  decalVertices = clipGeometry( decalVertices, plane.set( 1, 0, 0 ) );
83
98
  decalVertices = clipGeometry( decalVertices, plane.set( - 1, 0, 0 ) );
84
99
  decalVertices = clipGeometry( decalVertices, plane.set( 0, 1, 0 ) );
85
100
  decalVertices = clipGeometry( decalVertices, plane.set( 0, - 1, 0 ) );
86
101
  decalVertices = clipGeometry( decalVertices, plane.set( 0, 0, 1 ) );
87
- decalVertices = clipGeometry( decalVertices, plane.set( 0, 0, - 1 ) ); // third, generate final vertices, normals and uvs
102
+ decalVertices = clipGeometry( decalVertices, plane.set( 0, 0, - 1 ) );
103
+
104
+ // third, generate final vertices, normals and uvs
88
105
 
89
106
  for ( let i = 0; i < decalVertices.length; i ++ ) {
90
107
 
91
- const decalVertex = decalVertices[ i ]; // create texture coordinates (we are still in projector space)
108
+ const decalVertex = decalVertices[ i ];
109
+
110
+ // create texture coordinates (we are still in projector space)
92
111
 
93
- uvs.push( 0.5 + decalVertex.position.x / size.x, 0.5 + decalVertex.position.y / size.y ); // transform the vertex back to world space
112
+ uvs.push( 0.5 + decalVertex.position.x / size.x, 0.5 + decalVertex.position.y / size.y );
94
113
 
95
- decalVertex.position.applyMatrix4( projectorMatrix ); // now create vertex and normal buffer data
114
+ // transform the vertex back to world space
115
+
116
+ decalVertex.position.applyMatrix4( projectorMatrix );
117
+
118
+ // now create vertex and normal buffer data
96
119
 
97
120
  vertices.push( decalVertex.position.x, decalVertex.position.y, decalVertex.position.z );
98
121
  normals.push( decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z );
@@ -104,6 +127,7 @@
104
127
  function pushDecalVertex( decalVertices, vertex, normal ) {
105
128
 
106
129
  // transform the vertex to world space, then to projector space
130
+
107
131
  vertex.applyMatrix4( mesh.matrixWorld );
108
132
  vertex.applyMatrix4( projectorMatrixInverse );
109
133
  normal.transformDirection( mesh.matrixWorld );
@@ -114,7 +138,9 @@
114
138
  function clipGeometry( inVertices, plane ) {
115
139
 
116
140
  const outVertices = [];
117
- const s = 0.5 * Math.abs( size.dot( plane ) ); // a single iteration clips one face,
141
+ const s = 0.5 * Math.abs( size.dot( plane ) );
142
+
143
+ // a single iteration clips one face,
118
144
  // which consists of three consecutive 'DecalVertex' objects
119
145
 
120
146
  for ( let i = 0; i < inVertices.length; i += 3 ) {
@@ -129,16 +155,18 @@
129
155
  const d3 = inVertices[ i + 2 ].position.dot( plane ) - s;
130
156
  const v1Out = d1 > 0;
131
157
  const v2Out = d2 > 0;
132
- const v3Out = d3 > 0; // calculate, how many vertices of the face lie outside of the clipping plane
158
+ const v3Out = d3 > 0;
133
159
 
134
- total = ( v1Out ? 1 : 0 ) + ( v2Out ? 1 : 0 ) + ( v3Out ? 1 : 0 );
160
+ // calculate, how many vertices of the face lie outside of the clipping plane
135
161
 
162
+ total = ( v1Out ? 1 : 0 ) + ( v2Out ? 1 : 0 ) + ( v3Out ? 1 : 0 );
136
163
  switch ( total ) {
137
164
 
138
165
  case 0:
139
166
  {
140
167
 
141
168
  // the entire face lies inside of the plane, no clipping needed
169
+
142
170
  outVertices.push( inVertices[ i ] );
143
171
  outVertices.push( inVertices[ i + 1 ] );
144
172
  outVertices.push( inVertices[ i + 2 ] );
@@ -150,6 +178,7 @@
150
178
  {
151
179
 
152
180
  // one vertex lies outside of the plane, perform clipping
181
+
153
182
  if ( v1Out ) {
154
183
 
155
184
  nV1 = inVertices[ i + 1 ];
@@ -198,6 +227,7 @@
198
227
  {
199
228
 
200
229
  // two vertices lies outside of the plane, perform clipping
230
+
201
231
  if ( ! v1Out ) {
202
232
 
203
233
  nV1 = inVertices[ i ].clone();
@@ -239,6 +269,7 @@
239
269
  {
240
270
 
241
271
  // the entire face lies outside of the plane, so let's discard the corresponding vertices
272
+
242
273
  break;
243
274
 
244
275
  }
@@ -256,7 +287,9 @@
256
287
  const d0 = v0.position.dot( p ) - s;
257
288
  const d1 = v1.position.dot( p ) - s;
258
289
  const s0 = d0 / ( d0 - d1 );
259
- const v = new DecalVertex( new THREE.Vector3( v0.position.x + s0 * ( v1.position.x - v0.position.x ), v0.position.y + s0 * ( v1.position.y - v0.position.y ), v0.position.z + s0 * ( v1.position.z - v0.position.z ) ), new THREE.Vector3( v0.normal.x + s0 * ( v1.normal.x - v0.normal.x ), v0.normal.y + s0 * ( v1.normal.y - v0.normal.y ), v0.normal.z + s0 * ( v1.normal.z - v0.normal.z ) ) ); // need to clip more values (texture coordinates)? do it this way:
290
+ const v = new DecalVertex( new THREE.Vector3( v0.position.x + s0 * ( v1.position.x - v0.position.x ), v0.position.y + s0 * ( v1.position.y - v0.position.y ), v0.position.z + s0 * ( v1.position.z - v0.position.z ) ), new THREE.Vector3( v0.normal.x + s0 * ( v1.normal.x - v0.normal.x ), v0.normal.y + s0 * ( v1.normal.y - v0.normal.y ), v0.normal.z + s0 * ( v1.normal.z - v0.normal.z ) ) );
291
+
292
+ // need to clip more values (texture coordinates)? do it this way:
260
293
  // intersectpoint.value = a.value + s * ( b.value - a.value );
261
294
 
262
295
  return v;
@@ -265,8 +298,9 @@
265
298
 
266
299
  }
267
300
 
268
- } // helper
301
+ }
269
302
 
303
+ // helper
270
304
 
271
305
  class DecalVertex {
272
306
 
@@ -276,7 +310,6 @@
276
310
  this.normal = normal;
277
311
 
278
312
  }
279
-
280
313
  clone() {
281
314
 
282
315
  return new this.constructor( this.position.clone(), this.normal.clone() );