@plastic-software/three 0.174.0 → 0.175.0

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 (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1429 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +53 -0
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -1,17 +1,79 @@
1
1
  import { Texture } from './Texture.js';
2
2
  import { NearestFilter } from '../constants.js';
3
3
 
4
+ /**
5
+ * This class can only be used in combination with `copyFramebufferToTexture()` methods
6
+ * of renderers. It extracts the contents of the current bound framebuffer and provides it
7
+ * as a texture for further usage.
8
+ *
9
+ * ```js
10
+ * const pixelRatio = window.devicePixelRatio;
11
+ * const textureSize = 128 * pixelRatio;
12
+ *
13
+ * const frameTexture = new FramebufferTexture( textureSize, textureSize );
14
+ *
15
+ * // calculate start position for copying part of the frame data
16
+ * const vector = new Vector2();
17
+ * vector.x = ( window.innerWidth * pixelRatio / 2 ) - ( textureSize / 2 );
18
+ * vector.y = ( window.innerHeight * pixelRatio / 2 ) - ( textureSize / 2 );
19
+ *
20
+ * renderer.render( scene, camera );
21
+ *
22
+ * // copy part of the rendered frame into the framebuffer texture
23
+ * renderer.copyFramebufferToTexture( frameTexture, vector );
24
+ * ```
25
+ *
26
+ * @augments Texture
27
+ */
4
28
  class FramebufferTexture extends Texture {
5
29
 
30
+ /**
31
+ * Constructs a new framebuffer texture.
32
+ *
33
+ * @param {number} width - The width of the texture.
34
+ * @param {number} height - The height of the texture.
35
+ */
6
36
  constructor( width, height ) {
7
37
 
8
38
  super( { width, height } );
9
39
 
40
+ /**
41
+ * This flag can be used for type testing.
42
+ *
43
+ * @type {boolean}
44
+ * @readonly
45
+ * @default true
46
+ */
10
47
  this.isFramebufferTexture = true;
11
48
 
49
+ /**
50
+ * How the texture is sampled when a texel covers more than one pixel.
51
+ *
52
+ * Overwritten and set to `NearestFilter` by default to disable filtering.
53
+ *
54
+ * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
55
+ * @default NearestFilter
56
+ */
12
57
  this.magFilter = NearestFilter;
58
+
59
+ /**
60
+ * How the texture is sampled when a texel covers less than one pixel.
61
+ *
62
+ * Overwritten and set to `NearestFilter` by default to disable filtering.
63
+ *
64
+ * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
65
+ * @default NearestFilter
66
+ */
13
67
  this.minFilter = NearestFilter;
14
68
 
69
+ /**
70
+ * Whether to generate mipmaps (if possible) for a texture.
71
+ *
72
+ * Overwritten and set to `false` by default.
73
+ *
74
+ * @type {boolean}
75
+ * @default false
76
+ */
15
77
  this.generateMipmaps = false;
16
78
 
17
79
  this.needsUpdate = true;
@@ -3,29 +3,98 @@ import { generateUUID } from '../math/MathUtils.js';
3
3
 
4
4
  let _sourceId = 0;
5
5
 
6
+ /**
7
+ * Represents the data source of a texture.
8
+ *
9
+ * The main purpose of this class is to decouple the data definition from the texture
10
+ * definition so the same data can be used with multiple texture instances.
11
+ */
6
12
  class Source {
7
13
 
14
+ /**
15
+ * Constructs a new video texture.
16
+ *
17
+ * @param {any} [data=null] - The data definition of a texture.
18
+ */
8
19
  constructor( data = null ) {
9
20
 
21
+ /**
22
+ * This flag can be used for type testing.
23
+ *
24
+ * @type {boolean}
25
+ * @readonly
26
+ * @default true
27
+ */
10
28
  this.isSource = true;
11
29
 
30
+ /**
31
+ * The ID of the source.
32
+ *
33
+ * @name Source#id
34
+ * @type {number}
35
+ * @readonly
36
+ */
12
37
  Object.defineProperty( this, 'id', { value: _sourceId ++ } );
13
38
 
39
+ /**
40
+ * The UUID of the source.
41
+ *
42
+ * @type {string}
43
+ * @readonly
44
+ */
14
45
  this.uuid = generateUUID();
15
46
 
47
+ /**
48
+ * The data definition of a texture.
49
+ *
50
+ * @type {any}
51
+ */
16
52
  this.data = data;
53
+
54
+ /**
55
+ * This property is only relevant when {@link Source#needsUpdate} is set to `true` and
56
+ * provides more control on how texture data should be processed. When `dataReady` is set
57
+ * to `false`, the engine performs the memory allocation (if necessary) but does not transfer
58
+ * the data into the GPU memory.
59
+ *
60
+ * @type {boolean}
61
+ * @default true
62
+ */
17
63
  this.dataReady = true;
18
64
 
65
+ /**
66
+ * This starts at `0` and counts how many times {@link Source#needsUpdate} is set to `true`.
67
+ *
68
+ * @type {number}
69
+ * @readonly
70
+ * @default 0
71
+ */
19
72
  this.version = 0;
20
73
 
21
74
  }
22
75
 
76
+ /**
77
+ * When the property is set to `true`, the engine allocates the memory
78
+ * for the texture (if necessary) and triggers the actual texture upload
79
+ * to the GPU next time the source is used.
80
+ *
81
+ * @type {boolean}
82
+ * @default false
83
+ * @param {boolean} value
84
+ */
23
85
  set needsUpdate( value ) {
24
86
 
25
87
  if ( value === true ) this.version ++;
26
88
 
27
89
  }
28
90
 
91
+ /**
92
+ * Serializes the source into JSON.
93
+ *
94
+ * @param {?(Object|string)} meta - An optional value holding meta information about the serialization.
95
+ * @return {Object} A JSON object representing the serialized source.
96
+ * @see {@link ObjectLoader#parse}
97
+ */
29
98
  toJSON( meta ) {
30
99
 
31
100
  const isRootObject = ( meta === undefined || typeof meta === 'string' );
@@ -35,11 +35,11 @@ class Texture extends EventDispatcher {
35
35
  * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
36
36
  * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
37
37
  * @param {number} [magFilter=LinearFilter] - The mag filter value.
38
- * @param {number} [minFilter=LinearFilter] - The min filter value.
39
- * @param {number} [format=RGBAFormat] - The min filter value.
40
- * @param {number} [type=UnsignedByteType] - The min filter value.
41
- * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The min filter value.
42
- * @param {string} [colorSpace=NoColorSpace] - The min filter value.
38
+ * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
39
+ * @param {number} [format=RGBAFormat] - The texture format.
40
+ * @param {number} [type=UnsignedByteType] - The texture type.
41
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
42
+ * @param {string} [colorSpace=NoColorSpace] - The color space.
43
43
  */
44
44
  constructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {
45
45
 
@@ -1,21 +1,52 @@
1
1
  import { VideoTexture } from './VideoTexture.js';
2
2
 
3
+ /**
4
+ * This class can be used as an alternative way to define video data. Instead of using
5
+ * an instance of `HTMLVideoElement` like with `VideoTexture`, `VideoFrameTexture` expects each frame is
6
+ * defined manually via {@link VideoFrameTexture#setFrame}. A typical use case for this module is when
7
+ * video frames are decoded with the WebCodecs API.
8
+ *
9
+ * ```js
10
+ * const texture = new THREE.VideoFrameTexture();
11
+ * texture.setFrame( frame );
12
+ * ```
13
+ *
14
+ * @augments VideoTexture
15
+ */
3
16
  class VideoFrameTexture extends VideoTexture {
4
17
 
18
+ /**
19
+ * Constructs a new video frame texture.
20
+ *
21
+ * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
22
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
23
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
24
+ * @param {number} [magFilter=LinearFilter] - The mag filter value.
25
+ * @param {number} [minFilter=LinearFilter] - The min filter value.
26
+ * @param {number} [format=RGBAFormat] - The texture format.
27
+ * @param {number} [type=UnsignedByteType] - The texture type.
28
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
29
+ */
5
30
  constructor( mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
6
31
 
7
32
  super( {}, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
8
33
 
34
+ /**
35
+ * This flag can be used for type testing.
36
+ *
37
+ * @type {boolean}
38
+ * @readonly
39
+ * @default true
40
+ */
9
41
  this.isVideoFrameTexture = true;
10
42
 
11
43
  }
12
44
 
13
- update() {
14
-
15
- // overwrites `VideoTexture.update()` with an empty method since
16
- // this type of texture is updated via `setFrame()`.
17
-
18
- }
45
+ /**
46
+ * This method overwritten with an empty implementation since
47
+ * this type of texture is updated via `setFrame()`.
48
+ */
49
+ update() {}
19
50
 
20
51
  clone() {
21
52
 
@@ -23,6 +54,12 @@ class VideoFrameTexture extends VideoTexture {
23
54
 
24
55
  }
25
56
 
57
+ /**
58
+ * Sets the current frame of the video. This will automatically update the texture
59
+ * so the data can be used for rendering.
60
+ *
61
+ * @param {VideoFrame} frame - The video frame.
62
+ */
26
63
  setFrame( frame ) {
27
64
 
28
65
  this.image = frame;
@@ -1,17 +1,56 @@
1
1
  import { LinearFilter } from '../constants.js';
2
2
  import { Texture } from './Texture.js';
3
3
 
4
+ /**
5
+ * A texture for use with a video.
6
+ *
7
+ * ```js
8
+ * // assuming you have created a HTML video element with id="video"
9
+ * const video = document.getElementById( 'video' );
10
+ * const texture = new THREE.VideoTexture( video );
11
+ * ```
12
+ *
13
+ * Note: After the initial use of a texture, its dimensions, format, and type
14
+ * cannot be changed. Instead, call {@link Texture#dispose} on the texture and instantiate a new one.
15
+ *
16
+ * @augments Texture
17
+ */
4
18
  class VideoTexture extends Texture {
5
19
 
6
- constructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
20
+ /**
21
+ * Constructs a new video texture.
22
+ *
23
+ * @param {Video} video - The video element to use as a data source for the texture.
24
+ * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
25
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
26
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
27
+ * @param {number} [magFilter=LinearFilter] - The mag filter value.
28
+ * @param {number} [minFilter=LinearFilter] - The min filter value.
29
+ * @param {number} [format=RGBAFormat] - The texture format.
30
+ * @param {number} [type=UnsignedByteType] - The texture type.
31
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
32
+ */
33
+ constructor( video, mapping, wrapS, wrapT, magFilter = LinearFilter, minFilter = LinearFilter, format, type, anisotropy ) {
7
34
 
8
35
  super( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
9
36
 
37
+ /**
38
+ * This flag can be used for type testing.
39
+ *
40
+ * @type {boolean}
41
+ * @readonly
42
+ * @default true
43
+ */
10
44
  this.isVideoTexture = true;
11
45
 
12
- this.minFilter = minFilter !== undefined ? minFilter : LinearFilter;
13
- this.magFilter = magFilter !== undefined ? magFilter : LinearFilter;
14
-
46
+ /**
47
+ * Whether to generate mipmaps (if possible) for a texture.
48
+ *
49
+ * Overwritten and set to `false` by default.
50
+ *
51
+ * @type {boolean}
52
+ * @default false
53
+ */
15
54
  this.generateMipmaps = false;
16
55
 
17
56
  const scope = this;
@@ -37,6 +76,12 @@ class VideoTexture extends Texture {
37
76
 
38
77
  }
39
78
 
79
+ /**
80
+ * This method is called automatically by the renderer and sets {@link Texture#needsUpdate}
81
+ * to `true` every time a new frame is available.
82
+ *
83
+ * Only relevant if `requestVideoFrameCallback` is not supported in the browser.
84
+ */
40
85
  update() {
41
86
 
42
87
  const video = this.image;
@@ -1,254 +0,0 @@
1
- import {
2
- Curve,
3
- Vector3
4
- } from 'three';
5
-
6
- import { ParametricGeometry } from './ParametricGeometry.js';
7
-
8
- /**
9
- * Experimenting of primitive geometry creation using Surface Parametric equations
10
- */
11
-
12
- const ParametricGeometries = {
13
-
14
- klein: function ( v, u, target ) {
15
-
16
- u *= Math.PI;
17
- v *= 2 * Math.PI;
18
-
19
- u = u * 2;
20
- let x, z;
21
- if ( u < Math.PI ) {
22
-
23
- x = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( u ) * Math.cos( v );
24
- z = - 8 * Math.sin( u ) - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( u ) * Math.cos( v );
25
-
26
- } else {
27
-
28
- x = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( v + Math.PI );
29
- z = - 8 * Math.sin( u );
30
-
31
- }
32
-
33
- const y = - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( v );
34
-
35
- target.set( x, y, z );
36
-
37
- },
38
-
39
- plane: function ( width, height ) {
40
-
41
- return function ( u, v, target ) {
42
-
43
- const x = u * width;
44
- const y = 0;
45
- const z = v * height;
46
-
47
- target.set( x, y, z );
48
-
49
- };
50
-
51
- },
52
-
53
- mobius: function ( u, t, target ) {
54
-
55
- // flat mobius strip
56
- // http://www.wolframalpha.com/input/?i=M%C3%B6bius+strip+parametric+equations&lk=1&a=ClashPrefs_*Surface.MoebiusStrip.SurfaceProperty.ParametricEquations-
57
- u = u - 0.5;
58
- const v = 2 * Math.PI * t;
59
-
60
- const a = 2;
61
-
62
- const x = Math.cos( v ) * ( a + u * Math.cos( v / 2 ) );
63
- const y = Math.sin( v ) * ( a + u * Math.cos( v / 2 ) );
64
- const z = u * Math.sin( v / 2 );
65
-
66
- target.set( x, y, z );
67
-
68
- },
69
-
70
- mobius3d: function ( u, t, target ) {
71
-
72
- // volumetric mobius strip
73
-
74
- u *= Math.PI;
75
- t *= 2 * Math.PI;
76
-
77
- u = u * 2;
78
- const phi = u / 2;
79
- const major = 2.25, a = 0.125, b = 0.65;
80
-
81
- let x = a * Math.cos( t ) * Math.cos( phi ) - b * Math.sin( t ) * Math.sin( phi );
82
- const z = a * Math.cos( t ) * Math.sin( phi ) + b * Math.sin( t ) * Math.cos( phi );
83
- const y = ( major + x ) * Math.sin( u );
84
- x = ( major + x ) * Math.cos( u );
85
-
86
- target.set( x, y, z );
87
-
88
- }
89
-
90
- };
91
-
92
-
93
- /*********************************************
94
- *
95
- * Parametric Replacement for TubeGeometry
96
- *
97
- *********************************************/
98
-
99
- ParametricGeometries.TubeGeometry = class TubeGeometry extends ParametricGeometry {
100
-
101
- constructor( path, segments = 64, radius = 1, segmentsRadius = 8, closed = false ) {
102
-
103
- const numpoints = segments + 1;
104
-
105
- const frames = path.computeFrenetFrames( segments, closed ),
106
- tangents = frames.tangents,
107
- normals = frames.normals,
108
- binormals = frames.binormals;
109
-
110
- const position = new Vector3();
111
-
112
- function ParametricTube( u, v, target ) {
113
-
114
- v *= 2 * Math.PI;
115
-
116
- const i = Math.floor( u * ( numpoints - 1 ) );
117
-
118
- path.getPointAt( u, position );
119
-
120
- const normal = normals[ i ];
121
- const binormal = binormals[ i ];
122
-
123
- const cx = - radius * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.
124
- const cy = radius * Math.sin( v );
125
-
126
- position.x += cx * normal.x + cy * binormal.x;
127
- position.y += cx * normal.y + cy * binormal.y;
128
- position.z += cx * normal.z + cy * binormal.z;
129
-
130
- target.copy( position );
131
-
132
- }
133
-
134
- super( ParametricTube, segments, segmentsRadius );
135
-
136
- // proxy internals
137
-
138
- this.tangents = tangents;
139
- this.normals = normals;
140
- this.binormals = binormals;
141
-
142
- this.path = path;
143
- this.segments = segments;
144
- this.radius = radius;
145
- this.segmentsRadius = segmentsRadius;
146
- this.closed = closed;
147
-
148
- }
149
-
150
- };
151
-
152
-
153
- /*********************************************
154
- *
155
- * Parametric Replacement for TorusKnotGeometry
156
- *
157
- *********************************************/
158
- ParametricGeometries.TorusKnotGeometry = class TorusKnotGeometry extends ParametricGeometries.TubeGeometry {
159
-
160
- constructor( radius = 200, tube = 40, segmentsT = 64, segmentsR = 8, p = 2, q = 3 ) {
161
-
162
- class TorusKnotCurve extends Curve {
163
-
164
- getPoint( t, optionalTarget = new Vector3() ) {
165
-
166
- const point = optionalTarget;
167
-
168
- t *= Math.PI * 2;
169
-
170
- const r = 0.5;
171
-
172
- const x = ( 1 + r * Math.cos( q * t ) ) * Math.cos( p * t );
173
- const y = ( 1 + r * Math.cos( q * t ) ) * Math.sin( p * t );
174
- const z = r * Math.sin( q * t );
175
-
176
- return point.set( x, y, z ).multiplyScalar( radius );
177
-
178
- }
179
-
180
- }
181
-
182
- const segments = segmentsT;
183
- const radiusSegments = segmentsR;
184
- const extrudePath = new TorusKnotCurve();
185
-
186
- super( extrudePath, segments, tube, radiusSegments, true, false );
187
-
188
- this.radius = radius;
189
- this.tube = tube;
190
- this.segmentsT = segmentsT;
191
- this.segmentsR = segmentsR;
192
- this.p = p;
193
- this.q = q;
194
-
195
- }
196
-
197
- };
198
-
199
- /*********************************************
200
- *
201
- * Parametric Replacement for SphereGeometry
202
- *
203
- *********************************************/
204
- ParametricGeometries.SphereGeometry = class SphereGeometry extends ParametricGeometry {
205
-
206
- constructor( size, u, v ) {
207
-
208
- function sphere( u, v, target ) {
209
-
210
- u *= Math.PI;
211
- v *= 2 * Math.PI;
212
-
213
- const x = size * Math.sin( u ) * Math.cos( v );
214
- const y = size * Math.sin( u ) * Math.sin( v );
215
- const z = size * Math.cos( u );
216
-
217
- target.set( x, y, z );
218
-
219
- }
220
-
221
- super( sphere, u, v );
222
-
223
- }
224
-
225
- };
226
-
227
-
228
- /*********************************************
229
- *
230
- * Parametric Replacement for PlaneGeometry
231
- *
232
- *********************************************/
233
-
234
- ParametricGeometries.PlaneGeometry = class PlaneGeometry extends ParametricGeometry {
235
-
236
- constructor( width, depth, segmentsWidth, segmentsDepth ) {
237
-
238
- function plane( u, v, target ) {
239
-
240
- const x = u * width;
241
- const y = 0;
242
- const z = v * depth;
243
-
244
- target.set( x, y, z );
245
-
246
- }
247
-
248
- super( plane, segmentsWidth, segmentsDepth );
249
-
250
- }
251
-
252
- };
253
-
254
- export { ParametricGeometries };