super-three 0.133.3 → 0.136.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 (354) hide show
  1. package/build/three.js +1059 -783
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +1424 -895
  4. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  6. package/examples/fonts/open-sans/open-sans.css +9 -0
  7. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  12. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  13. package/examples/js/animation/CCDIKSolver.js +0 -1
  14. package/examples/js/animation/MMDPhysics.js +1 -3
  15. package/examples/js/controls/ArcballControls.js +99 -72
  16. package/examples/js/controls/DragControls.js +7 -0
  17. package/examples/js/controls/OrbitControls.js +5 -36
  18. package/examples/js/controls/TrackballControls.js +3 -2
  19. package/examples/js/controls/TransformControls.js +24 -1
  20. package/examples/js/csm/CSM.js +2 -2
  21. package/examples/js/csm/CSMFrustum.js +133 -0
  22. package/examples/js/curves/CurveExtras.js +0 -2
  23. package/examples/js/effects/AsciiEffect.js +2 -9
  24. package/examples/js/exporters/GLTFExporter.js +148 -64
  25. package/examples/js/exporters/USDZExporter.js +45 -26
  26. package/examples/js/geometries/TeapotGeometry.js +0 -1
  27. package/examples/js/interactive/SelectionBox.js +2 -0
  28. package/examples/js/interactive/SelectionHelper.js +22 -7
  29. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  30. package/examples/js/lines/LineMaterial.js +58 -20
  31. package/examples/js/lines/LineSegments2.js +29 -24
  32. package/examples/js/loaders/3DMLoader.js +24 -11
  33. package/examples/js/loaders/3MFLoader.js +2 -2
  34. package/examples/js/loaders/AMFLoader.js +0 -2
  35. package/examples/js/loaders/ColladaLoader.js +61 -4
  36. package/examples/js/loaders/EXRLoader.js +185 -262
  37. package/examples/js/loaders/FBXLoader.js +4 -5
  38. package/examples/js/loaders/GLTFLoader.js +96 -33
  39. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
  40. package/examples/js/loaders/KTX2Loader.js +23 -2
  41. package/examples/js/loaders/KTXLoader.js +1 -1
  42. package/examples/js/loaders/LDrawLoader.js +26 -30
  43. package/examples/js/loaders/LUT3dlLoader.js +2 -0
  44. package/examples/js/loaders/LUTCubeLoader.js +2 -0
  45. package/examples/js/loaders/LWOLoader.js +8 -6
  46. package/examples/js/loaders/LogLuvLoader.js +766 -0
  47. package/examples/js/loaders/MMDLoader.js +0 -1
  48. package/examples/js/loaders/NRRDLoader.js +9 -2
  49. package/examples/js/loaders/OBJLoader.js +0 -2
  50. package/examples/js/loaders/PLYLoader.js +33 -8
  51. package/examples/js/loaders/RGBELoader.js +2 -16
  52. package/examples/js/loaders/RGBMLoader.js +55 -5
  53. package/examples/js/loaders/SVGLoader.js +9 -5
  54. package/examples/js/loaders/TDSLoader.js +237 -271
  55. package/examples/js/loaders/VOXLoader.js +1 -0
  56. package/examples/js/loaders/VRMLLoader.js +2 -1
  57. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  58. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  59. package/examples/js/math/ImprovedNoise.js +1 -1
  60. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  61. package/examples/js/objects/Lensflare.js +2 -10
  62. package/examples/js/objects/MarchingCubes.js +42 -128
  63. package/examples/js/objects/Reflector.js +7 -0
  64. package/examples/js/objects/Refractor.js +7 -0
  65. package/examples/js/objects/Sky.js +1 -1
  66. package/examples/js/objects/Water.js +2 -2
  67. package/examples/js/objects/Water2.js +4 -7
  68. package/examples/js/postprocessing/GlitchPass.js +3 -1
  69. package/examples/js/postprocessing/SSAOPass.js +1 -0
  70. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  71. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  72. package/examples/js/shaders/ConvolutionShader.js +0 -1
  73. package/examples/js/shaders/FXAAShader.js +1 -1
  74. package/examples/js/shaders/FilmShader.js +1 -1
  75. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  76. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  77. package/examples/js/shaders/SSRShader.js +1 -1
  78. package/examples/js/shaders/SSRrShader.js +1 -1
  79. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  80. package/examples/js/utils/GeometryUtils.js +1 -1
  81. package/examples/js/utils/RoughnessMipmapper.js +18 -28
  82. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  83. package/examples/jsm/animation/MMDPhysics.js +0 -2
  84. package/examples/jsm/controls/ArcballControls.js +80 -77
  85. package/examples/jsm/controls/DragControls.js +7 -0
  86. package/examples/jsm/controls/OrbitControls.js +9 -51
  87. package/examples/jsm/controls/TrackballControls.js +1 -1
  88. package/examples/jsm/controls/TransformControls.js +24 -1
  89. package/examples/jsm/csm/CSM.js +3 -3
  90. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  91. package/examples/jsm/curves/CurveExtras.js +0 -2
  92. package/examples/jsm/effects/AsciiEffect.js +2 -9
  93. package/examples/jsm/exporters/GLTFExporter.js +161 -75
  94. package/examples/jsm/exporters/USDZExporter.js +47 -26
  95. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  96. package/examples/jsm/interactive/SelectionBox.js +1 -0
  97. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  98. package/examples/jsm/libs/flow.module.js +3338 -0
  99. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  100. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  101. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  102. package/examples/jsm/lines/LineMaterial.js +59 -23
  103. package/examples/jsm/lines/LineSegments2.js +22 -18
  104. package/examples/jsm/loaders/3DMLoader.js +18 -12
  105. package/examples/jsm/loaders/3MFLoader.js +2 -2
  106. package/examples/jsm/loaders/AMFLoader.js +0 -2
  107. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  108. package/examples/jsm/loaders/EXRLoader.js +184 -293
  109. package/examples/jsm/loaders/FBXLoader.js +4 -5
  110. package/examples/jsm/loaders/GLTFLoader.js +101 -37
  111. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
  112. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  113. package/examples/jsm/loaders/KTXLoader.js +1 -1
  114. package/examples/jsm/loaders/LDrawLoader.js +23 -24
  115. package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
  116. package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
  117. package/examples/jsm/loaders/LWOLoader.js +8 -6
  118. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  119. package/examples/jsm/loaders/MMDLoader.js +0 -1
  120. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  121. package/examples/jsm/loaders/OBJLoader.js +0 -2
  122. package/examples/jsm/loaders/PLYLoader.js +34 -8
  123. package/examples/jsm/loaders/RGBELoader.js +0 -20
  124. package/examples/jsm/loaders/RGBMLoader.js +61 -7
  125. package/examples/jsm/loaders/SVGLoader.js +9 -6
  126. package/examples/jsm/loaders/TDSLoader.js +236 -275
  127. package/examples/jsm/loaders/VOXLoader.js +1 -0
  128. package/examples/jsm/loaders/VRMLLoader.js +2 -1
  129. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  130. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  131. package/examples/jsm/math/ImprovedNoise.js +1 -1
  132. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  133. package/examples/jsm/node-editor/NodeEditor.js +456 -0
  134. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  135. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  136. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  137. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  138. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  139. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  140. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  141. package/examples/jsm/node-editor/examples/rim.json +1 -0
  142. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  143. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  144. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  145. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  146. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  147. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  148. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  149. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  150. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  151. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  152. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  153. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  154. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  155. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  156. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  157. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  158. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  159. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  160. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  161. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  162. package/examples/jsm/nodes/math/MathNode.js +12 -0
  163. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  164. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  165. package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -164
  166. package/examples/jsm/objects/Lensflare.js +3 -14
  167. package/examples/jsm/objects/MarchingCubes.js +46 -152
  168. package/examples/jsm/objects/Reflector.js +7 -0
  169. package/examples/jsm/objects/Refractor.js +7 -0
  170. package/examples/jsm/objects/Sky.js +1 -1
  171. package/examples/jsm/objects/Water.js +2 -2
  172. package/examples/jsm/objects/Water2.js +4 -8
  173. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  174. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  175. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  176. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  177. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  178. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  179. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  180. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  181. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  182. package/examples/jsm/postprocessing/GlitchPass.js +4 -2
  183. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  184. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  185. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  186. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  187. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  188. package/examples/jsm/postprocessing/SMAAPass.js +1 -1
  189. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  190. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  191. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  192. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  193. package/examples/jsm/postprocessing/SavePass.js +1 -1
  194. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  195. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  196. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  197. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  198. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  199. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  200. package/examples/jsm/renderers/nodes/Nodes.js +15 -13
  201. package/examples/jsm/renderers/nodes/ShaderNode.js +194 -41
  202. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  203. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  204. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  205. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  206. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  207. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  208. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  209. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  210. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  211. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  212. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  213. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  214. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  215. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  216. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  217. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  218. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  219. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  220. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  221. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  222. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  223. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  224. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  225. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  226. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  227. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  228. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  229. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +60 -43
  230. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  231. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  232. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  233. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  234. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  235. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
  236. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  237. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  238. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  239. package/examples/jsm/renderers/nodes/math/MathNode.js +90 -37
  240. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  241. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  242. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  243. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  244. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  245. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  246. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  247. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  248. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  249. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  250. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  251. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  252. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  253. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  254. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  255. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  256. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  257. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  258. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  259. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  260. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  261. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  262. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  263. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +12 -28
  264. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  265. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
  266. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  267. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +453 -95
  268. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  269. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  270. package/examples/jsm/shaders/FXAAShader.js +1 -1
  271. package/examples/jsm/shaders/FilmShader.js +1 -1
  272. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  273. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  274. package/examples/jsm/shaders/SSRShader.js +1 -1
  275. package/examples/jsm/shaders/SSRrShader.js +1 -1
  276. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  277. package/examples/jsm/utils/GeometryUtils.js +1 -1
  278. package/examples/jsm/utils/RoughnessMipmapper.js +19 -31
  279. package/examples/jsm/utils/WorkerPool.js +11 -11
  280. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  281. package/package.json +24 -18
  282. package/src/Three.Legacy.js +18 -0
  283. package/src/Three.js +1 -3
  284. package/src/cameras/StereoCamera.js +8 -7
  285. package/src/constants.js +1 -8
  286. package/src/core/Layers.js +7 -1
  287. package/src/core/Object3D.js +3 -1
  288. package/src/extras/PMREMGenerator.js +23 -109
  289. package/src/extras/core/Interpolations.js +1 -1
  290. package/src/geometries/LatheGeometry.js +70 -47
  291. package/src/helpers/CameraHelper.js +1 -1
  292. package/src/loaders/FileLoader.js +98 -144
  293. package/src/loaders/ImageLoader.js +9 -4
  294. package/src/loaders/LoaderUtils.js +26 -0
  295. package/src/loaders/MaterialLoader.js +7 -4
  296. package/src/loaders/ObjectLoader.js +2 -0
  297. package/src/materials/Material.js +4 -4
  298. package/src/materials/MeshPhysicalMaterial.js +20 -14
  299. package/src/math/Color.js +0 -38
  300. package/src/math/MathUtils.js +5 -16
  301. package/src/math/Ray.js +2 -2
  302. package/src/math/Sphere.js +10 -1
  303. package/src/objects/Skeleton.js +1 -0
  304. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  305. package/src/renderers/WebGLRenderer.js +105 -132
  306. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  307. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  308. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  309. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -74
  310. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  311. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  312. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  313. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  314. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  315. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  316. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  317. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  318. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  319. package/src/renderers/shaders/ShaderLib.js +6 -4
  320. package/src/renderers/shaders/UniformsLib.js +1 -2
  321. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  322. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  323. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  324. package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
  325. package/src/renderers/webgl/WebGLProgram.js +11 -24
  326. package/src/renderers/webgl/WebGLPrograms.js +194 -33
  327. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  328. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  329. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  330. package/src/renderers/webgl/WebGLState.js +76 -17
  331. package/src/renderers/webgl/WebGLTextures.js +367 -61
  332. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  333. package/src/renderers/webxr/WebXRManager.js +77 -109
  334. package/src/scenes/Scene.js +1 -1
  335. package/src/textures/DataTexture.js +0 -2
  336. package/src/textures/DataTexture2DArray.js +0 -2
  337. package/src/textures/DataTexture3D.js +0 -2
  338. package/src/textures/FramebufferTexture.js +25 -0
  339. package/src/textures/Texture.js +6 -0
  340. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  341. package/examples/js/libs/dat.gui.min.js +0 -14
  342. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  343. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  344. package/examples/jsm/libs/glslang.js +0 -78
  345. package/examples/jsm/libs/glslang.wasm +0 -0
  346. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  347. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  348. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  349. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  350. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  351. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  352. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  353. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  354. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -690,7 +690,7 @@ function setValueV4uiArray( gl, v ) {
690
690
  }
691
691
 
692
692
 
693
- // Array of textures (2D / Cube)
693
+ // Array of textures (2D / 3D / Cube / 2DArray)
694
694
 
695
695
  function setValueT1Array( gl, v, textures ) {
696
696
 
@@ -708,6 +708,22 @@ function setValueT1Array( gl, v, textures ) {
708
708
 
709
709
  }
710
710
 
711
+ function setValueT3DArray( gl, v, textures ) {
712
+
713
+ const n = v.length;
714
+
715
+ const units = allocTexUnits( textures, n );
716
+
717
+ gl.uniform1iv( this.addr, units );
718
+
719
+ for ( let i = 0; i !== n; ++ i ) {
720
+
721
+ textures.setTexture3D( v[ i ] || emptyTexture3d, units[ i ] );
722
+
723
+ }
724
+
725
+ }
726
+
711
727
  function setValueT6Array( gl, v, textures ) {
712
728
 
713
729
  const n = v.length;
@@ -724,6 +740,23 @@ function setValueT6Array( gl, v, textures ) {
724
740
 
725
741
  }
726
742
 
743
+ function setValueT2DArrayArray( gl, v, textures ) {
744
+
745
+ const n = v.length;
746
+
747
+ const units = allocTexUnits( textures, n );
748
+
749
+ gl.uniform1iv( this.addr, units );
750
+
751
+ for ( let i = 0; i !== n; ++ i ) {
752
+
753
+ textures.setTexture2DArray( v[ i ] || emptyTexture2dArray, units[ i ] );
754
+
755
+ }
756
+
757
+ }
758
+
759
+
727
760
  // Helper to pick the right setter for a pure (bottom-level) array
728
761
 
729
762
  function getPureArraySetter( type ) {
@@ -756,12 +789,23 @@ function getPureArraySetter( type ) {
756
789
  case 0x8b62: // SAMPLER_2D_SHADOW
757
790
  return setValueT1Array;
758
791
 
792
+ case 0x8b5f: // SAMPLER_3D
793
+ case 0x8dcb: // INT_SAMPLER_3D
794
+ case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D
795
+ return setValueT3DArray;
796
+
759
797
  case 0x8b60: // SAMPLER_CUBE
760
798
  case 0x8dcc: // INT_SAMPLER_CUBE
761
799
  case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE
762
800
  case 0x8dc5: // SAMPLER_CUBE_SHADOW
763
801
  return setValueT6Array;
764
802
 
803
+ case 0x8dc1: // SAMPLER_2D_ARRAY
804
+ case 0x8dcf: // INT_SAMPLER_2D_ARRAY
805
+ case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY
806
+ case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW
807
+ return setValueT2DArrayArray;
808
+
765
809
  }
766
810
 
767
811
  }
@@ -4,7 +4,19 @@ import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
4
4
  import { Vector3 } from '../../math/Vector3.js';
5
5
  import { Vector4 } from '../../math/Vector4.js';
6
6
  import { WebGLAnimation } from '../webgl/WebGLAnimation.js';
7
+ import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
7
8
  import { WebXRController } from './WebXRController.js';
9
+ import { DepthTexture } from '../../textures/DepthTexture.js';
10
+ import { WebGLMultisampleRenderTarget } from '../WebGLMultisampleRenderTarget.js';
11
+ import {
12
+ DepthFormat,
13
+ DepthStencilFormat,
14
+ RGBAFormat,
15
+ RGBFormat,
16
+ UnsignedByteType,
17
+ UnsignedShortType,
18
+ UnsignedInt248Type,
19
+ } from '../../constants.js';
8
20
 
9
21
  class WebXRManager extends EventDispatcher {
10
22
 
@@ -13,7 +25,6 @@ class WebXRManager extends EventDispatcher {
13
25
  super();
14
26
 
15
27
  const scope = this;
16
- const state = renderer.state;
17
28
 
18
29
  let session = null;
19
30
  let framebufferScaleFactor = 1.0;
@@ -21,21 +32,19 @@ class WebXRManager extends EventDispatcher {
21
32
 
22
33
  let referenceSpace = null;
23
34
  let referenceSpaceType = 'local-floor';
35
+ const hasMultisampledRenderToTexture = renderer.extensions.has( 'WEBGL_multisampled_render_to_texture' );
24
36
 
25
37
  let pose = null;
26
38
  var layers = [];
27
39
 
28
40
  let glBinding = null;
29
- let glFramebuffer = null;
30
41
  let glProjLayer = null;
31
42
  let glBaseLayer = null;
32
43
  let isMultisample = false;
33
- let glMultisampledFramebuffer = null;
34
- let glColorRenderbuffer = null;
35
- let glDepthRenderbuffer = null;
36
44
  let xrFrame = null;
37
- let depthStyle = null;
38
- let clearStyle = null;
45
+ const attributes = gl.getContextAttributes();
46
+ let initialRenderTarget = null;
47
+ let newRenderTarget = null;
39
48
 
40
49
  const controllers = [];
41
50
  const inputSourcesMap = new Map();
@@ -146,21 +155,13 @@ class WebXRManager extends EventDispatcher {
146
155
 
147
156
  // restore framebuffer/rendering state
148
157
 
149
- state.bindXRFramebuffer( null );
150
- renderer.setRenderTarget( renderer.getRenderTarget() );
151
-
152
- if ( glFramebuffer ) gl.deleteFramebuffer( glFramebuffer );
153
- if ( glMultisampledFramebuffer ) gl.deleteFramebuffer( glMultisampledFramebuffer );
154
- if ( glColorRenderbuffer ) gl.deleteRenderbuffer( glColorRenderbuffer );
155
- if ( glDepthRenderbuffer ) gl.deleteRenderbuffer( glDepthRenderbuffer );
156
- glFramebuffer = null;
157
- glMultisampledFramebuffer = null;
158
- glColorRenderbuffer = null;
159
- glDepthRenderbuffer = null;
158
+ renderer.setRenderTarget( initialRenderTarget );
159
+
160
160
  glBaseLayer = null;
161
161
  glProjLayer = null;
162
162
  glBinding = null;
163
163
  session = null;
164
+ newRenderTarget = null;
164
165
 
165
166
  //
166
167
 
@@ -232,6 +233,8 @@ class WebXRManager extends EventDispatcher {
232
233
 
233
234
  if ( session !== null ) {
234
235
 
236
+ initialRenderTarget = renderer.getRenderTarget();
237
+
235
238
  session.addEventListener( 'select', onSessionEvent );
236
239
  session.addEventListener( 'selectstart', onSessionEvent );
237
240
  session.addEventListener( 'selectend', onSessionEvent );
@@ -241,18 +244,16 @@ class WebXRManager extends EventDispatcher {
241
244
  session.addEventListener( 'end', onSessionEnd );
242
245
  session.addEventListener( 'inputsourceschange', onInputSourcesChange );
243
246
 
244
- const attributes = gl.getContextAttributes();
245
-
246
247
  if ( attributes.xrCompatible !== true ) {
247
248
 
248
249
  await gl.makeXRCompatible();
249
250
 
250
251
  }
251
252
 
252
- if ( session.renderState.layers === undefined) {
253
+ if ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {
253
254
 
254
255
  const layerInit = {
255
- antialias: attributes.antialias,
256
+ antialias: ( session.renderState.layers === undefined ) ? attributes.antialias : true,
256
257
  alpha: attributes.alpha,
257
258
  depth: attributes.depth,
258
259
  stencil: attributes.stencil,
@@ -263,43 +264,34 @@ class WebXRManager extends EventDispatcher {
263
264
 
264
265
  session.updateRenderState( { baseLayer: glBaseLayer } );
265
266
 
266
- } else if ( gl instanceof WebGLRenderingContext ) {
267
-
268
- // Use old style webgl layer because we can't use MSAA
269
- // WebGL2 support.
270
-
271
- const layerInit = {
272
- antialias: true,
273
- alpha: attributes.alpha,
274
- depth: attributes.depth,
275
- stencil: attributes.stencil,
276
- framebufferScaleFactor: framebufferScaleFactor
277
- };
278
-
279
- glBaseLayer = new XRWebGLLayer( session, gl, layerInit );
280
-
281
- session.updateRenderState( { layers: [ glBaseLayer ] } );
267
+ newRenderTarget = new WebGLRenderTarget(
268
+ glBaseLayer.framebufferWidth,
269
+ glBaseLayer.framebufferHeight,
270
+ {
271
+ format: RGBAFormat,
272
+ type: UnsignedByteType,
273
+ encoding: renderer.outputEncoding
274
+ }
275
+ );
282
276
 
283
277
  } else {
284
278
 
285
279
  isMultisample = attributes.antialias;
286
280
  let depthFormat = null;
287
-
281
+ let depthType = null;
282
+ let glDepthFormat = null;
288
283
 
289
284
  if ( attributes.depth ) {
290
285
 
291
- clearStyle = gl.DEPTH_BUFFER_BIT;
292
-
293
- if ( attributes.stencil ) clearStyle |= gl.STENCIL_BUFFER_BIT;
294
-
295
- depthStyle = attributes.stencil ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
296
- depthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;
286
+ glDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;
287
+ depthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;
288
+ depthType = attributes.stencil ? UnsignedInt248Type : UnsignedShortType;
297
289
 
298
290
  }
299
291
 
300
292
  const projectionlayerInit = {
301
- colorFormat: attributes.alpha ? gl.RGBA8 : gl.RGB8,
302
- depthFormat: depthFormat,
293
+ colorFormat: ( attributes.alpha || isMultisample ) ? gl.RGBA8 : gl.RGB8,
294
+ depthFormat: glDepthFormat,
303
295
  scaleFactor: framebufferScaleFactor
304
296
  };
305
297
 
@@ -307,41 +299,44 @@ class WebXRManager extends EventDispatcher {
307
299
 
308
300
  glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
309
301
 
310
- glFramebuffer = gl.createFramebuffer();
311
-
312
302
  session.updateRenderState( { layers: [ glProjLayer ] } );
313
303
 
314
304
  if ( isMultisample ) {
315
305
 
316
- glMultisampledFramebuffer = gl.createFramebuffer();
317
- glColorRenderbuffer = gl.createRenderbuffer();
318
- gl.bindRenderbuffer( gl.RENDERBUFFER, glColorRenderbuffer );
319
- gl.renderbufferStorageMultisample(
320
- gl.RENDERBUFFER,
321
- 4,
322
- gl.RGBA8,
306
+ newRenderTarget = new WebGLMultisampleRenderTarget(
323
307
  glProjLayer.textureWidth,
324
- glProjLayer.textureHeight );
325
- state.bindFramebuffer( gl.FRAMEBUFFER, glMultisampledFramebuffer );
326
- gl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, glColorRenderbuffer );
327
- gl.bindRenderbuffer( gl.RENDERBUFFER, null );
328
-
329
- if ( depthFormat !== null ) {
330
-
331
- glDepthRenderbuffer = gl.createRenderbuffer();
332
- gl.bindRenderbuffer( gl.RENDERBUFFER, glDepthRenderbuffer );
333
- gl.renderbufferStorageMultisample( gl.RENDERBUFFER, 4, depthFormat, glProjLayer.textureWidth, glProjLayer.textureHeight );
334
- gl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, glDepthRenderbuffer );
335
- gl.bindRenderbuffer( gl.RENDERBUFFER, null );
308
+ glProjLayer.textureHeight,
309
+ {
310
+ format: RGBAFormat,
311
+ type: UnsignedByteType,
312
+ depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
313
+ stencilBuffer: attributes.stencil,
314
+ ignoreDepth: glProjLayer.ignoreDepthValues,
315
+ useRenderToTexture: hasMultisampledRenderToTexture,
316
+ encoding: renderer.outputEncoding
317
+ } );
336
318
 
337
- }
319
+ } else {
338
320
 
339
- state.bindFramebuffer( gl.FRAMEBUFFER, null );
321
+ newRenderTarget = new WebGLRenderTarget(
322
+ glProjLayer.textureWidth,
323
+ glProjLayer.textureHeight,
324
+ {
325
+ format: attributes.alpha ? RGBAFormat : RGBFormat,
326
+ type: UnsignedByteType,
327
+ depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
328
+ stencilBuffer: attributes.stencil,
329
+ ignoreDepth: glProjLayer.ignoreDepthValues,
330
+ encoding: renderer.outputEncoding
331
+ } );
340
332
 
341
333
  }
342
334
 
343
335
  }
344
336
 
337
+ // Set foveation to maximum.
338
+ this.setFoveation( 1.0 );
339
+
345
340
  referenceSpace = await session.requestReferenceSpace( referenceSpaceType );
346
341
 
347
342
  animation.setContext( session );
@@ -372,8 +367,8 @@ class WebXRManager extends EventDispatcher {
372
367
 
373
368
  this.updateLayers = function() {
374
369
  var layersCopy = layers.map(function (x) { return x; });
375
- layersCopy.push(layersCopy);
376
-
370
+
371
+ layersCopy.unshift( session.renderState.layers[0] );
377
372
  session.updateRenderState( { layers: layersCopy } );
378
373
  };
379
374
 
@@ -627,7 +622,8 @@ class WebXRManager extends EventDispatcher {
627
622
 
628
623
  if ( glBaseLayer !== null ) {
629
624
 
630
- state.bindXRFramebuffer( glBaseLayer.framebuffer );
625
+ renderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );
626
+ renderer.setRenderTarget( newRenderTarget );
631
627
 
632
628
  }
633
629
 
@@ -638,7 +634,6 @@ class WebXRManager extends EventDispatcher {
638
634
  if ( views.length !== cameraVR.cameras.length ) {
639
635
 
640
636
  cameraVR.cameras.length = 0;
641
-
642
637
  cameraVRNeedsUpdate = true;
643
638
 
644
639
  }
@@ -656,19 +651,20 @@ class WebXRManager extends EventDispatcher {
656
651
  } else {
657
652
 
658
653
  const glSubImage = glBinding.getViewSubImage( glProjLayer, view );
654
+ viewport = glSubImage.viewport;
659
655
 
660
- state.bindXRFramebuffer( glFramebuffer );
656
+ // For side-by-side projection, we only produce a single texture for both eyes.
657
+ if ( i === 0 ) {
661
658
 
662
- if ( glSubImage.depthStencilTexture !== undefined ) {
659
+ renderer.setRenderTargetTextures(
660
+ newRenderTarget,
661
+ glSubImage.colorTexture,
662
+ glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );
663
663
 
664
- gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, glSubImage.depthStencilTexture, 0 );
664
+ renderer.setRenderTarget( newRenderTarget );
665
665
 
666
666
  }
667
667
 
668
- gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, glSubImage.colorTexture, 0 );
669
-
670
- viewport = glSubImage.viewport;
671
-
672
668
  }
673
669
 
674
670
  const camera = cameras[ i ];
@@ -691,14 +687,6 @@ class WebXRManager extends EventDispatcher {
691
687
 
692
688
  }
693
689
 
694
- if ( isMultisample ) {
695
-
696
- state.bindXRFramebuffer( glMultisampledFramebuffer );
697
-
698
- if ( clearStyle !== null ) gl.clear( clearStyle );
699
-
700
- }
701
-
702
690
  }
703
691
 
704
692
  //
@@ -716,26 +704,6 @@ class WebXRManager extends EventDispatcher {
716
704
 
717
705
  if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );
718
706
 
719
- if ( isMultisample ) {
720
-
721
- const width = glProjLayer.textureWidth;
722
- const height = glProjLayer.textureHeight;
723
-
724
- state.bindFramebuffer( gl.READ_FRAMEBUFFER, glMultisampledFramebuffer );
725
- state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, glFramebuffer );
726
- // Invalidate the depth here to avoid flush of the depth data to main memory.
727
- gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, [ depthStyle ] );
728
- gl.invalidateFramebuffer( gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
729
- gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, gl.COLOR_BUFFER_BIT, gl.NEAREST );
730
- // Invalidate the MSAA buffer because it's not needed anymore.
731
- gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, [ gl.COLOR_ATTACHMENT0 ] );
732
- state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
733
- state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
734
-
735
- state.bindFramebuffer( gl.FRAMEBUFFER, glMultisampledFramebuffer );
736
-
737
- }
738
-
739
707
  xrFrame = null;
740
708
 
741
709
  }
@@ -18,7 +18,7 @@ class Scene extends Object3D {
18
18
 
19
19
  if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
20
20
 
21
- __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef
21
+ __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
22
22
 
23
23
  }
24
24
 
@@ -16,8 +16,6 @@ class DataTexture extends Texture {
16
16
  this.flipY = false;
17
17
  this.unpackAlignment = 1;
18
18
 
19
- this.needsUpdate = true;
20
-
21
19
  }
22
20
 
23
21
  }
@@ -18,8 +18,6 @@ class DataTexture2DArray extends Texture {
18
18
  this.flipY = false;
19
19
  this.unpackAlignment = 1;
20
20
 
21
- this.needsUpdate = true;
22
-
23
21
  }
24
22
 
25
23
  }
@@ -26,8 +26,6 @@ class DataTexture3D extends Texture {
26
26
  this.flipY = false;
27
27
  this.unpackAlignment = 1;
28
28
 
29
- this.needsUpdate = true;
30
-
31
29
  }
32
30
 
33
31
  }
@@ -0,0 +1,25 @@
1
+ import { Texture } from './Texture.js';
2
+ import { NearestFilter } from '../constants.js';
3
+
4
+ class FramebufferTexture extends Texture {
5
+
6
+ constructor( width, height, format ) {
7
+
8
+ super( { width, height } );
9
+
10
+ this.format = format;
11
+
12
+ this.magFilter = NearestFilter;
13
+ this.minFilter = NearestFilter;
14
+
15
+ this.generateMipmaps = false;
16
+
17
+ this.needsUpdate = true;
18
+
19
+ }
20
+
21
+ }
22
+
23
+ FramebufferTexture.prototype.isFramebufferTexture = true;
24
+
25
+ export { FramebufferTexture };
@@ -65,6 +65,8 @@ class Texture extends EventDispatcher {
65
65
  // update. You need to explicitly call Material.needsUpdate to trigger it to recompile.
66
66
  this.encoding = encoding;
67
67
 
68
+ this.userData = {};
69
+
68
70
  this.version = 0;
69
71
  this.onUpdate = null;
70
72
 
@@ -119,6 +121,8 @@ class Texture extends EventDispatcher {
119
121
  this.unpackAlignment = source.unpackAlignment;
120
122
  this.encoding = source.encoding;
121
123
 
124
+ this.userData = JSON.parse( JSON.stringify( source.userData ) );
125
+
122
126
  return this;
123
127
 
124
128
  }
@@ -225,6 +229,8 @@ class Texture extends EventDispatcher {
225
229
 
226
230
  }
227
231
 
232
+ if ( JSON.stringify( this.userData ) !== '{}' ) output.userData = this.userData;
233
+
228
234
  if ( ! isRootObject ) {
229
235
 
230
236
  meta.textures[ this.uuid ] = output;
@@ -1,147 +0,0 @@
1
- ( function () {
2
-
3
- const _zee = new THREE.Vector3( 0, 0, 1 );
4
-
5
- const _euler = new THREE.Euler();
6
-
7
- const _q0 = new THREE.Quaternion();
8
-
9
- const _q1 = new THREE.Quaternion( - Math.sqrt( 0.5 ), 0, 0, Math.sqrt( 0.5 ) ); // - PI/2 around the x-axis
10
-
11
-
12
- const _changeEvent = {
13
- type: 'change'
14
- };
15
-
16
- class DeviceOrientationControls extends THREE.EventDispatcher {
17
-
18
- constructor( object ) {
19
-
20
- super();
21
-
22
- if ( window.isSecureContext === false ) {
23
-
24
- console.error( 'THREE.DeviceOrientationControls: DeviceOrientationEvent is only available in secure contexts (https)' );
25
-
26
- }
27
-
28
- const scope = this;
29
- const EPS = 0.000001;
30
- const lastQuaternion = new THREE.Quaternion();
31
- this.object = object;
32
- this.object.rotation.reorder( 'YXZ' );
33
- this.enabled = true;
34
- this.deviceOrientation = {};
35
- this.screenOrientation = 0;
36
- this.alphaOffset = 0; // radians
37
-
38
- const onDeviceOrientationChangeEvent = function ( event ) {
39
-
40
- scope.deviceOrientation = event;
41
-
42
- };
43
-
44
- const onScreenOrientationChangeEvent = function () {
45
-
46
- scope.screenOrientation = window.orientation || 0;
47
-
48
- }; // The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''
49
-
50
-
51
- const setObjectQuaternion = function ( quaternion, alpha, beta, gamma, orient ) {
52
-
53
- _euler.set( beta, alpha, - gamma, 'YXZ' ); // 'ZXY' for the device, but 'YXZ' for us
54
-
55
-
56
- quaternion.setFromEuler( _euler ); // orient the device
57
-
58
- quaternion.multiply( _q1 ); // camera looks out the back of the device, not the top
59
-
60
- quaternion.multiply( _q0.setFromAxisAngle( _zee, - orient ) ); // adjust for screen orientation
61
-
62
- };
63
-
64
- this.connect = function () {
65
-
66
- onScreenOrientationChangeEvent(); // run once on load
67
- // iOS 13+
68
-
69
- if ( window.DeviceOrientationEvent !== undefined && typeof window.DeviceOrientationEvent.requestPermission === 'function' ) {
70
-
71
- window.DeviceOrientationEvent.requestPermission().then( function ( response ) {
72
-
73
- if ( response == 'granted' ) {
74
-
75
- window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent );
76
- window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent );
77
-
78
- }
79
-
80
- } ).catch( function ( error ) {
81
-
82
- console.error( 'THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:', error );
83
-
84
- } );
85
-
86
- } else {
87
-
88
- window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent );
89
- window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent );
90
-
91
- }
92
-
93
- scope.enabled = true;
94
-
95
- };
96
-
97
- this.disconnect = function () {
98
-
99
- window.removeEventListener( 'orientationchange', onScreenOrientationChangeEvent );
100
- window.removeEventListener( 'deviceorientation', onDeviceOrientationChangeEvent );
101
- scope.enabled = false;
102
-
103
- };
104
-
105
- this.update = function () {
106
-
107
- if ( scope.enabled === false ) return;
108
- const device = scope.deviceOrientation;
109
-
110
- if ( device ) {
111
-
112
- const alpha = device.alpha ? THREE.MathUtils.degToRad( device.alpha ) + scope.alphaOffset : 0; // Z
113
-
114
- const beta = device.beta ? THREE.MathUtils.degToRad( device.beta ) : 0; // X'
115
-
116
- const gamma = device.gamma ? THREE.MathUtils.degToRad( device.gamma ) : 0; // Y''
117
-
118
- const orient = scope.screenOrientation ? THREE.MathUtils.degToRad( scope.screenOrientation ) : 0; // O
119
-
120
- setObjectQuaternion( scope.object.quaternion, alpha, beta, gamma, orient );
121
-
122
- if ( 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {
123
-
124
- lastQuaternion.copy( scope.object.quaternion );
125
- scope.dispatchEvent( _changeEvent );
126
-
127
- }
128
-
129
- }
130
-
131
- };
132
-
133
- this.dispose = function () {
134
-
135
- scope.disconnect();
136
-
137
- };
138
-
139
- this.connect();
140
-
141
- }
142
-
143
- }
144
-
145
- THREE.DeviceOrientationControls = DeviceOrientationControls;
146
-
147
- } )();