@needle-tools/three 0.145.2 → 0.146.1
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.
- package/README.md +1 -1
- package/build/three.cjs +3559 -6924
- package/build/three.js +3559 -6924
- package/build/three.min.js +1 -2
- package/build/three.module.js +732 -339
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +49 -66
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +70 -134
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +138 -405
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -54
- package/examples/js/controls/FlyControls.js +29 -55
- package/examples/js/controls/OrbitControls.js +85 -95
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +84 -169
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +4 -18
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +26 -30
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
- package/examples/js/effects/PeppersGhostEffect.js +12 -39
- package/examples/js/effects/StereoEffect.js +0 -4
- package/examples/js/environments/RoomEnvironment.js +12 -10
- package/examples/js/exporters/ColladaExporter.js +48 -65
- package/examples/js/exporters/DRACOExporter.js +22 -22
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +143 -261
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +42 -33
- package/examples/js/exporters/PLYExporter.js +38 -33
- package/examples/js/exporters/STLExporter.js +5 -7
- package/examples/js/exporters/USDZExporter.js +110 -25
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +11 -6
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +25 -12
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +22 -33
- package/examples/js/interactive/InteractiveGroup.js +6 -12
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +0 -8
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +38 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +201 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +29 -66
- package/examples/js/loaders/EXRLoader.js +67 -164
- package/examples/js/loaders/FBXLoader.js +286 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +354 -405
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +178 -289
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/MaterialXLoader.js +392 -0
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +50 -65
- package/examples/js/loaders/PCDLoader.js +34 -29
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +9 -39
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +361 -233
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +0 -1
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +243 -340
- package/examples/js/loaders/VTKLoader.js +101 -118
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
- package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
- package/examples/js/materials/MeshGouraudMaterial.js +15 -13
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -3
- package/examples/js/math/ConvexHull.js +183 -139
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +14 -18
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +16 -45
- package/examples/js/misc/VolumeSlice.js +14 -24
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +56 -59
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +2 -14
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +22 -20
- package/examples/js/objects/ReflectorForSSRPass.js +19 -23
- package/examples/js/objects/Refractor.js +52 -30
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +45 -36
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +2 -21
- package/examples/js/renderers/CSS3DRenderer.js +3 -24
- package/examples/js/renderers/Projector.js +29 -85
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +3 -6
- package/examples/js/shaders/MMDToonShader.js +2 -6
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +3 -6
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +234 -168
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +13 -18
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +117 -6
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/exporters/GLTFExporter.js +17 -131
- package/examples/jsm/exporters/USDZExporter.js +94 -28
- package/examples/jsm/interactive/HTMLMesh.js +2 -0
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +16 -2
- package/examples/jsm/loaders/GLTFLoader.js +204 -377
- package/examples/jsm/loaders/KTX2Loader.js +68 -29
- package/examples/jsm/loaders/LDrawLoader.js +14 -13
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +68 -16
- package/examples/jsm/loaders/SVGLoader.js +227 -14
- package/examples/jsm/loaders/USDZLoader.js +31 -16
- package/examples/jsm/nodes/Nodes.js +14 -2
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeVarying.js +7 -4
- package/examples/jsm/nodes/core/VaryingNode.js +6 -4
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
- package/examples/jsm/nodes/materials/Materials.js +9 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -0
- package/examples/jsm/nodes/math/OperatorNode.js +6 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +8 -2
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +10 -0
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/utils/TextureUtils.js +85 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
- package/package.json +11 -12
- package/src/Three.js +1 -0
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -14
- package/src/constants.js +1 -1
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/extras/Earcut.js +67 -67
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +2 -2
- package/src/loaders/FileLoader.js +4 -1
- package/src/loaders/ObjectLoader.js +5 -1
- package/src/materials/Material.js +1 -1
- package/src/math/Color.js +5 -5
- package/src/math/Matrix3.js +53 -18
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +19 -26
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +36 -62
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk.js +3 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +20 -6
- package/src/renderers/shaders/UniformsLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +15 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +15 -7
- package/src/renderers/webgl/WebGLCubeUVMaps.js +1 -1
- package/src/renderers/webgl/WebGLLights.js +0 -4
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -1
- package/src/renderers/webgl/WebGLState.js +31 -1
- package/src/renderers/webgl/WebGLTextures.js +71 -18
- package/src/renderers/webgl/WebGLUniforms.js +116 -20
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +85 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/shaders/PixelShader.js +0 -44
|
@@ -11,33 +11,45 @@
|
|
|
11
11
|
const geometry = new THREE.BufferGeometry();
|
|
12
12
|
super( geometry, material );
|
|
13
13
|
this.isMarchingCubes = true;
|
|
14
|
-
const scope = this;
|
|
14
|
+
const scope = this;
|
|
15
|
+
|
|
16
|
+
// temp buffers used in polygonize
|
|
15
17
|
|
|
16
18
|
const vlist = new Float32Array( 12 * 3 );
|
|
17
19
|
const nlist = new Float32Array( 12 * 3 );
|
|
18
20
|
const clist = new Float32Array( 12 * 3 );
|
|
19
21
|
this.enableUvs = enableUvs;
|
|
20
|
-
this.enableColors = enableColors;
|
|
22
|
+
this.enableColors = enableColors;
|
|
23
|
+
|
|
24
|
+
// functions have to be object properties
|
|
21
25
|
// prototype functions kill performance
|
|
22
26
|
// (tested and it was 4x slower !!!)
|
|
23
27
|
|
|
24
28
|
this.init = function ( resolution ) {
|
|
25
29
|
|
|
26
|
-
this.resolution = resolution;
|
|
30
|
+
this.resolution = resolution;
|
|
31
|
+
|
|
32
|
+
// parameters
|
|
27
33
|
|
|
28
|
-
this.isolation = 80.0;
|
|
34
|
+
this.isolation = 80.0;
|
|
35
|
+
|
|
36
|
+
// size of field, 32 is pushing it in Javascript :)
|
|
29
37
|
|
|
30
38
|
this.size = resolution;
|
|
31
39
|
this.size2 = this.size * this.size;
|
|
32
40
|
this.size3 = this.size2 * this.size;
|
|
33
|
-
this.halfsize = this.size / 2.0;
|
|
41
|
+
this.halfsize = this.size / 2.0;
|
|
42
|
+
|
|
43
|
+
// deltas
|
|
34
44
|
|
|
35
45
|
this.delta = 2.0 / this.size;
|
|
36
46
|
this.yd = this.size;
|
|
37
47
|
this.zd = this.size2;
|
|
38
48
|
this.field = new Float32Array( this.size3 );
|
|
39
49
|
this.normal_cache = new Float32Array( this.size3 * 3 );
|
|
40
|
-
this.palette = new Float32Array( this.size3 * 3 );
|
|
50
|
+
this.palette = new Float32Array( this.size3 * 3 );
|
|
51
|
+
|
|
52
|
+
//
|
|
41
53
|
|
|
42
54
|
this.count = 0;
|
|
43
55
|
const maxVertexCount = maxPolyCount * 3;
|
|
@@ -49,7 +61,6 @@
|
|
|
49
61
|
const normalAttribute = new THREE.BufferAttribute( this.normalArray, 3 );
|
|
50
62
|
normalAttribute.setUsage( THREE.DynamicDrawUsage );
|
|
51
63
|
geometry.setAttribute( 'normal', normalAttribute );
|
|
52
|
-
|
|
53
64
|
if ( this.enableUvs ) {
|
|
54
65
|
|
|
55
66
|
this.uvArray = new Float32Array( maxVertexCount * 2 );
|
|
@@ -68,11 +79,12 @@
|
|
|
68
79
|
|
|
69
80
|
}
|
|
70
81
|
|
|
71
|
-
};
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
///////////////////////
|
|
72
85
|
// Polygonization
|
|
73
86
|
///////////////////////
|
|
74
87
|
|
|
75
|
-
|
|
76
88
|
function lerp( a, b, t ) {
|
|
77
89
|
|
|
78
90
|
return a + ( b - a ) * t;
|
|
@@ -132,7 +144,6 @@
|
|
|
132
144
|
function compNorm( q ) {
|
|
133
145
|
|
|
134
146
|
const q3 = q * 3;
|
|
135
|
-
|
|
136
147
|
if ( scope.normal_cache[ q3 ] === 0.0 ) {
|
|
137
148
|
|
|
138
149
|
scope.normal_cache[ q3 + 0 ] = scope.field[ q - 1 ] - scope.field[ q + 1 ];
|
|
@@ -141,9 +152,10 @@
|
|
|
141
152
|
|
|
142
153
|
}
|
|
143
154
|
|
|
144
|
-
}
|
|
145
|
-
// (this is where most of time is spent - it's inner work of O(n3) loop )
|
|
155
|
+
}
|
|
146
156
|
|
|
157
|
+
// Returns total number of triangles. Fills triangles.
|
|
158
|
+
// (this is where most of time is spent - it's inner work of O(n3) loop )
|
|
147
159
|
|
|
148
160
|
function polygonize( fx, fy, fz, q, isol ) {
|
|
149
161
|
|
|
@@ -171,14 +183,18 @@
|
|
|
171
183
|
if ( field4 < isol ) cubeindex |= 16;
|
|
172
184
|
if ( field5 < isol ) cubeindex |= 32;
|
|
173
185
|
if ( field6 < isol ) cubeindex |= 128;
|
|
174
|
-
if ( field7 < isol ) cubeindex |= 64;
|
|
186
|
+
if ( field7 < isol ) cubeindex |= 64;
|
|
187
|
+
|
|
188
|
+
// if cube is entirely in/out of the surface - bail, nothing to draw
|
|
175
189
|
|
|
176
190
|
const bits = edgeTable[ cubeindex ];
|
|
177
191
|
if ( bits === 0 ) return 0;
|
|
178
192
|
const d = scope.delta,
|
|
179
193
|
fx2 = fx + d,
|
|
180
194
|
fy2 = fy + d,
|
|
181
|
-
fz2 = fz + d;
|
|
195
|
+
fz2 = fz + d;
|
|
196
|
+
|
|
197
|
+
// top of the cube
|
|
182
198
|
|
|
183
199
|
if ( bits & 1 ) {
|
|
184
200
|
|
|
@@ -210,8 +226,9 @@
|
|
|
210
226
|
compNorm( qy );
|
|
211
227
|
VIntY( q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy );
|
|
212
228
|
|
|
213
|
-
}
|
|
229
|
+
}
|
|
214
230
|
|
|
231
|
+
// bottom of the cube
|
|
215
232
|
|
|
216
233
|
if ( bits & 16 ) {
|
|
217
234
|
|
|
@@ -243,9 +260,9 @@
|
|
|
243
260
|
compNorm( qyz );
|
|
244
261
|
VIntY( qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz );
|
|
245
262
|
|
|
246
|
-
}
|
|
247
|
-
|
|
263
|
+
}
|
|
248
264
|
|
|
265
|
+
// vertical lines of the cube
|
|
249
266
|
if ( bits & 256 ) {
|
|
250
267
|
|
|
251
268
|
compNorm( q );
|
|
@@ -284,7 +301,9 @@
|
|
|
284
301
|
o2,
|
|
285
302
|
o3,
|
|
286
303
|
numtris = 0,
|
|
287
|
-
i = 0;
|
|
304
|
+
i = 0;
|
|
305
|
+
|
|
306
|
+
// here is where triangles are created
|
|
288
307
|
|
|
289
308
|
while ( triTable[ cubeindex + i ] != - 1 ) {
|
|
290
309
|
|
|
@@ -303,7 +322,9 @@
|
|
|
303
322
|
|
|
304
323
|
function posnormtriv( pos, norm, colors, o1, o2, o3 ) {
|
|
305
324
|
|
|
306
|
-
const c = scope.count * 3;
|
|
325
|
+
const c = scope.count * 3;
|
|
326
|
+
|
|
327
|
+
// positions
|
|
307
328
|
|
|
308
329
|
scope.positionArray[ c + 0 ] = pos[ o1 ];
|
|
309
330
|
scope.positionArray[ c + 1 ] = pos[ o1 + 1 ];
|
|
@@ -313,7 +334,9 @@
|
|
|
313
334
|
scope.positionArray[ c + 5 ] = pos[ o2 + 2 ];
|
|
314
335
|
scope.positionArray[ c + 6 ] = pos[ o3 ];
|
|
315
336
|
scope.positionArray[ c + 7 ] = pos[ o3 + 1 ];
|
|
316
|
-
scope.positionArray[ c + 8 ] = pos[ o3 + 2 ];
|
|
337
|
+
scope.positionArray[ c + 8 ] = pos[ o3 + 2 ];
|
|
338
|
+
|
|
339
|
+
// normals
|
|
317
340
|
|
|
318
341
|
if ( scope.material.flatShading === true ) {
|
|
319
342
|
|
|
@@ -342,8 +365,9 @@
|
|
|
342
365
|
scope.normalArray[ c + 7 ] = norm[ o3 + 1 ];
|
|
343
366
|
scope.normalArray[ c + 8 ] = norm[ o3 + 2 ];
|
|
344
367
|
|
|
345
|
-
}
|
|
368
|
+
}
|
|
346
369
|
|
|
370
|
+
// uvs
|
|
347
371
|
|
|
348
372
|
if ( scope.enableUvs ) {
|
|
349
373
|
|
|
@@ -355,8 +379,9 @@
|
|
|
355
379
|
scope.uvArray[ d + 4 ] = pos[ o3 + 0 ];
|
|
356
380
|
scope.uvArray[ d + 5 ] = pos[ o3 + 2 ];
|
|
357
381
|
|
|
358
|
-
}
|
|
382
|
+
}
|
|
359
383
|
|
|
384
|
+
// colors
|
|
360
385
|
|
|
361
386
|
if ( scope.enableColors ) {
|
|
362
387
|
|
|
@@ -374,20 +399,21 @@
|
|
|
374
399
|
|
|
375
400
|
scope.count += 3;
|
|
376
401
|
|
|
377
|
-
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/////////////////////////////////////
|
|
378
405
|
// Metaballs
|
|
379
406
|
/////////////////////////////////////
|
|
407
|
+
|
|
380
408
|
// Adds a reciprocal ball (nice and blobby) that, to be fast, fades to zero after
|
|
381
409
|
// a fixed distance, determined by strength and subtract.
|
|
382
410
|
|
|
383
|
-
|
|
384
411
|
this.addBall = function ( ballx, bally, ballz, strength, subtract, colors ) {
|
|
385
412
|
|
|
386
413
|
const sign = Math.sign( strength );
|
|
387
414
|
strength = Math.abs( strength );
|
|
388
415
|
const userDefineColor = ! ( colors === undefined || colors === null );
|
|
389
416
|
let ballColor = new THREE.Color( ballx, bally, ballz );
|
|
390
|
-
|
|
391
417
|
if ( userDefineColor ) {
|
|
392
418
|
|
|
393
419
|
try {
|
|
@@ -400,14 +426,15 @@
|
|
|
400
426
|
|
|
401
427
|
}
|
|
402
428
|
|
|
403
|
-
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// Let's solve the equation to find the radius:
|
|
404
432
|
// 1.0 / (0.000001 + radius^2) * strength - subtract = 0
|
|
405
433
|
// strength / (radius^2) = subtract
|
|
406
434
|
// strength = subtract * radius^2
|
|
407
435
|
// radius^2 = strength / subtract
|
|
408
436
|
// radius = sqrt(strength / subtract)
|
|
409
437
|
|
|
410
|
-
|
|
411
438
|
const radius = this.size * Math.sqrt( strength / subtract ),
|
|
412
439
|
zs = ballz * this.size,
|
|
413
440
|
ys = bally * this.size,
|
|
@@ -423,33 +450,32 @@
|
|
|
423
450
|
let min_x = Math.floor( xs - radius );
|
|
424
451
|
if ( min_x < 1 ) min_x = 1;
|
|
425
452
|
let max_x = Math.floor( xs + radius );
|
|
426
|
-
if ( max_x > this.size - 1 ) max_x = this.size - 1;
|
|
453
|
+
if ( max_x > this.size - 1 ) max_x = this.size - 1;
|
|
454
|
+
|
|
455
|
+
// Don't polygonize in the outer layer because normals aren't
|
|
427
456
|
// well-defined there.
|
|
428
457
|
|
|
429
458
|
let x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val;
|
|
430
|
-
|
|
431
459
|
for ( z = min_z; z < max_z; z ++ ) {
|
|
432
460
|
|
|
433
461
|
z_offset = this.size2 * z;
|
|
434
462
|
fz = z / this.size - ballz;
|
|
435
463
|
fz2 = fz * fz;
|
|
436
|
-
|
|
437
464
|
for ( y = min_y; y < max_y; y ++ ) {
|
|
438
465
|
|
|
439
466
|
y_offset = z_offset + this.size * y;
|
|
440
467
|
fy = y / this.size - bally;
|
|
441
468
|
fy2 = fy * fy;
|
|
442
|
-
|
|
443
469
|
for ( x = min_x; x < max_x; x ++ ) {
|
|
444
470
|
|
|
445
471
|
fx = x / this.size - ballx;
|
|
446
472
|
val = strength / ( 0.000001 + fx * fx + fy2 + fz2 ) - subtract;
|
|
447
|
-
|
|
448
473
|
if ( val > 0.0 ) {
|
|
449
474
|
|
|
450
|
-
this.field[ y_offset + x ] += val * sign;
|
|
451
|
-
// http://www.geisswerks.com/ryan/BLOBS/blobs.html
|
|
475
|
+
this.field[ y_offset + x ] += val * sign;
|
|
452
476
|
|
|
477
|
+
// optimization
|
|
478
|
+
// http://www.geisswerks.com/ryan/BLOBS/blobs.html
|
|
453
479
|
const ratio = Math.sqrt( ( x - xs ) * ( x - xs ) + ( y - ys ) * ( y - ys ) + ( z - zs ) * ( z - zs ) ) / radius;
|
|
454
480
|
const contrib = 1 - ratio * ratio * ratio * ( ratio * ( ratio * 6 - 15 ) + 10 );
|
|
455
481
|
this.palette[ ( y_offset + x ) * 3 + 0 ] += ballColor.r * contrib;
|
|
@@ -482,19 +508,16 @@
|
|
|
482
508
|
cxy,
|
|
483
509
|
dist = size * Math.sqrt( strength / subtract );
|
|
484
510
|
if ( dist > size ) dist = size;
|
|
485
|
-
|
|
486
511
|
for ( x = 0; x < dist; x ++ ) {
|
|
487
512
|
|
|
488
513
|
xdiv = x / size;
|
|
489
514
|
xx = xdiv * xdiv;
|
|
490
515
|
val = strength / ( 0.0001 + xx ) - subtract;
|
|
491
|
-
|
|
492
516
|
if ( val > 0.0 ) {
|
|
493
517
|
|
|
494
518
|
for ( y = 0; y < size; y ++ ) {
|
|
495
519
|
|
|
496
520
|
cxy = x + y * yd;
|
|
497
|
-
|
|
498
521
|
for ( z = 0; z < size; z ++ ) {
|
|
499
522
|
|
|
500
523
|
field[ zd * z + cxy ] += val;
|
|
@@ -526,21 +549,17 @@
|
|
|
526
549
|
cxy,
|
|
527
550
|
dist = size * Math.sqrt( strength / subtract );
|
|
528
551
|
if ( dist > size ) dist = size;
|
|
529
|
-
|
|
530
552
|
for ( y = 0; y < dist; y ++ ) {
|
|
531
553
|
|
|
532
554
|
ydiv = y / size;
|
|
533
555
|
yy = ydiv * ydiv;
|
|
534
556
|
val = strength / ( 0.0001 + yy ) - subtract;
|
|
535
|
-
|
|
536
557
|
if ( val > 0.0 ) {
|
|
537
558
|
|
|
538
559
|
cy = y * yd;
|
|
539
|
-
|
|
540
560
|
for ( x = 0; x < size; x ++ ) {
|
|
541
561
|
|
|
542
562
|
cxy = cy + x;
|
|
543
|
-
|
|
544
563
|
for ( z = 0; z < size; z ++ ) field[ zd * z + cxy ] += val;
|
|
545
564
|
|
|
546
565
|
}
|
|
@@ -554,6 +573,7 @@
|
|
|
554
573
|
this.addPlaneZ = function ( strength, subtract ) {
|
|
555
574
|
|
|
556
575
|
// cache attribute lookups
|
|
576
|
+
|
|
557
577
|
const size = this.size,
|
|
558
578
|
yd = this.yd,
|
|
559
579
|
zd = this.zd,
|
|
@@ -568,21 +588,17 @@
|
|
|
568
588
|
cyz,
|
|
569
589
|
dist = size * Math.sqrt( strength / subtract );
|
|
570
590
|
if ( dist > size ) dist = size;
|
|
571
|
-
|
|
572
591
|
for ( z = 0; z < dist; z ++ ) {
|
|
573
592
|
|
|
574
593
|
zdiv = z / size;
|
|
575
594
|
zz = zdiv * zdiv;
|
|
576
595
|
val = strength / ( 0.0001 + zz ) - subtract;
|
|
577
|
-
|
|
578
596
|
if ( val > 0.0 ) {
|
|
579
597
|
|
|
580
598
|
cz = zd * z;
|
|
581
|
-
|
|
582
599
|
for ( y = 0; y < size; y ++ ) {
|
|
583
600
|
|
|
584
601
|
cyz = cz + y * yd;
|
|
585
|
-
|
|
586
602
|
for ( x = 0; x < size; x ++ ) field[ cyz + x ] += val;
|
|
587
603
|
|
|
588
604
|
}
|
|
@@ -591,11 +607,12 @@
|
|
|
591
607
|
|
|
592
608
|
}
|
|
593
609
|
|
|
594
|
-
};
|
|
610
|
+
};
|
|
611
|
+
|
|
612
|
+
/////////////////////////////////////
|
|
595
613
|
// Updates
|
|
596
614
|
/////////////////////////////////////
|
|
597
615
|
|
|
598
|
-
|
|
599
616
|
this.setCell = function ( x, y, z, value ) {
|
|
600
617
|
|
|
601
618
|
const index = this.size2 * z + this.size * y + x;
|
|
@@ -616,7 +633,6 @@
|
|
|
616
633
|
const fieldCopy = field.slice();
|
|
617
634
|
const size = this.size;
|
|
618
635
|
const size2 = this.size2;
|
|
619
|
-
|
|
620
636
|
for ( let x = 0; x < size; x ++ ) {
|
|
621
637
|
|
|
622
638
|
for ( let y = 0; y < size; y ++ ) {
|
|
@@ -626,17 +642,14 @@
|
|
|
626
642
|
const index = size2 * z + size * y + x;
|
|
627
643
|
let val = fieldCopy[ index ];
|
|
628
644
|
let count = 1;
|
|
629
|
-
|
|
630
645
|
for ( let x2 = - 1; x2 <= 1; x2 += 2 ) {
|
|
631
646
|
|
|
632
647
|
const x3 = x2 + x;
|
|
633
648
|
if ( x3 < 0 || x3 >= size ) continue;
|
|
634
|
-
|
|
635
649
|
for ( let y2 = - 1; y2 <= 1; y2 += 2 ) {
|
|
636
650
|
|
|
637
651
|
const y3 = y2 + y;
|
|
638
652
|
if ( y3 < 0 || y3 >= size ) continue;
|
|
639
|
-
|
|
640
653
|
for ( let z2 = - 1; z2 <= 1; z2 += 2 ) {
|
|
641
654
|
|
|
642
655
|
const z3 = z2 + z;
|
|
@@ -665,6 +678,7 @@
|
|
|
665
678
|
this.reset = function () {
|
|
666
679
|
|
|
667
680
|
// wipe the normal cache
|
|
681
|
+
|
|
668
682
|
for ( let i = 0; i < this.size3; i ++ ) {
|
|
669
683
|
|
|
670
684
|
this.normal_cache[ i * 3 ] = 0.0;
|
|
@@ -677,10 +691,11 @@
|
|
|
677
691
|
|
|
678
692
|
this.update = function () {
|
|
679
693
|
|
|
680
|
-
this.count = 0;
|
|
694
|
+
this.count = 0;
|
|
681
695
|
|
|
682
|
-
|
|
696
|
+
// Triangulate. Yeah, this is slow.
|
|
683
697
|
|
|
698
|
+
const smin2 = this.size - 2;
|
|
684
699
|
for ( let z = 1; z < smin2; z ++ ) {
|
|
685
700
|
|
|
686
701
|
const z_offset = this.size2 * z;
|
|
@@ -694,7 +709,6 @@
|
|
|
694
709
|
for ( let x = 1; x < smin2; x ++ ) {
|
|
695
710
|
|
|
696
711
|
const fx = ( x - this.halfsize ) / this.halfsize; //+ 1
|
|
697
|
-
|
|
698
712
|
const q = y_offset + x;
|
|
699
713
|
polygonize( fx, fy, fz, q, this.isolation );
|
|
700
714
|
|
|
@@ -702,15 +716,20 @@
|
|
|
702
716
|
|
|
703
717
|
}
|
|
704
718
|
|
|
705
|
-
}
|
|
719
|
+
}
|
|
706
720
|
|
|
721
|
+
// set the draw range to only the processed triangles
|
|
707
722
|
|
|
708
|
-
this.geometry.setDrawRange( 0, this.count );
|
|
723
|
+
this.geometry.setDrawRange( 0, this.count );
|
|
724
|
+
|
|
725
|
+
// update geometry data
|
|
709
726
|
|
|
710
727
|
geometry.getAttribute( 'position' ).needsUpdate = true;
|
|
711
728
|
geometry.getAttribute( 'normal' ).needsUpdate = true;
|
|
712
729
|
if ( this.enableUvs ) geometry.getAttribute( 'uv' ).needsUpdate = true;
|
|
713
|
-
if ( this.enableColors ) geometry.getAttribute( 'color' ).needsUpdate = true;
|
|
730
|
+
if ( this.enableColors ) geometry.getAttribute( 'color' ).needsUpdate = true;
|
|
731
|
+
|
|
732
|
+
// safety check
|
|
714
733
|
|
|
715
734
|
if ( this.count / 3 > maxPolyCount ) console.warn( 'THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count.' );
|
|
716
735
|
|
|
@@ -720,14 +739,16 @@
|
|
|
720
739
|
|
|
721
740
|
}
|
|
722
741
|
|
|
723
|
-
}
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
/////////////////////////////////////
|
|
724
745
|
// Marching cubes lookup tables
|
|
725
746
|
/////////////////////////////////////
|
|
747
|
+
|
|
726
748
|
// These tables are straight from Paul Bourke's page:
|
|
727
749
|
// http://paulbourke.net/geometry/polygonise/
|
|
728
750
|
// who in turn got them from Cory Gene Bloyd.
|
|
729
751
|
|
|
730
|
-
|
|
731
752
|
const edgeTable = new Int32Array( [ 0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00, 0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, 0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, 0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, 0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60, 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c, 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc, 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0, 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650, 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460, 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0, 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230, 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190, 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0 ] );
|
|
732
753
|
const triTable = new Int32Array( [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 8, 3, 9, 8, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 8, 3, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 2, 10, 0, 2, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 8, 3, 2, 10, 8, 10, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 11, 2, 8, 11, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 9, 0, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 11, 2, 1, 9, 11, 9, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 10, 1, 11, 10, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 10, 1, 0, 8, 10, 8, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 9, 0, 3, 11, 9, 11, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 3, 0, 7, 3, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 1, 9, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 1, 9, 4, 7, 1, 7, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 2, 10, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 4, 7, 3, 0, 4, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 2, 10, 9, 0, 2, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1, 8, 4, 7, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 11, 4, 7, 11, 2, 4, 2, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 0, 1, 8, 4, 7, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, - 1, - 1, - 1, - 1, 3, 10, 1, 3, 11, 10, 7, 8, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, - 1, - 1, - 1, - 1, 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1, 4, 7, 11, 4, 11, 9, 9, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 5, 4, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 5, 4, 1, 5, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 8, 5, 4, 8, 3, 5, 3, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 2, 10, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 0, 8, 1, 2, 10, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 5, 2, 10, 5, 4, 2, 4, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, - 1, - 1, - 1, - 1, 9, 5, 4, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 11, 2, 0, 8, 11, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 5, 4, 0, 1, 5, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, - 1, - 1, - 1, - 1, 10, 3, 11, 10, 1, 3, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, - 1, - 1, - 1, - 1, 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1, 5, 4, 8, 5, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 7, 8, 5, 7, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 3, 0, 9, 5, 3, 5, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 7, 8, 0, 1, 7, 1, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 7, 8, 9, 5, 7, 10, 1, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, - 1, - 1, - 1, - 1, 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, - 1, - 1, - 1, - 1, 2, 10, 5, 2, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 7, 9, 5, 7, 8, 9, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1, 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, - 1, - 1, - 1, - 1, 11, 2, 1, 11, 1, 7, 7, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, - 1, - 1, - 1, - 1, 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, - 1, 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, - 1, 11, 10, 5, 7, 11, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 8, 3, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 0, 1, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 8, 3, 1, 9, 8, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 6, 5, 2, 6, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 6, 5, 1, 2, 6, 3, 0, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 6, 5, 9, 0, 6, 0, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, - 1, - 1, - 1, - 1, 2, 3, 11, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 11, 0, 8, 11, 2, 0, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 1, 9, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, - 1, - 1, - 1, - 1, 6, 3, 11, 6, 5, 3, 5, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1, 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, - 1, - 1, - 1, - 1, 6, 5, 9, 6, 9, 11, 11, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 5, 10, 6, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 3, 0, 4, 7, 3, 6, 5, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 9, 0, 5, 10, 6, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1, 6, 1, 2, 6, 5, 1, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, - 1, - 1, - 1, - 1, 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, - 1, - 1, - 1, - 1, 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, - 1, 3, 11, 2, 7, 8, 4, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1, 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1, 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, - 1, 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1, 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, - 1, 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, - 1, 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, - 1, - 1, - 1, - 1, 10, 4, 9, 6, 4, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 10, 6, 4, 9, 10, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 10, 0, 1, 10, 6, 0, 6, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1, 1, 4, 9, 1, 2, 4, 2, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, - 1, - 1, - 1, - 1, 0, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 8, 3, 2, 8, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 10, 4, 9, 10, 6, 4, 11, 2, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, - 1, - 1, - 1, - 1, 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1, 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, - 1, 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, - 1, - 1, - 1, - 1, 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, - 1, 3, 11, 6, 3, 6, 0, 0, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 6, 4, 8, 11, 6, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 7, 10, 6, 7, 8, 10, 8, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, - 1, - 1, - 1, - 1, 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, - 1, - 1, - 1, - 1, 10, 6, 7, 10, 7, 1, 1, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1, 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, - 1, 7, 8, 0, 7, 0, 6, 6, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 7, 3, 2, 6, 7, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1, 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, - 1, 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, - 1, 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, - 1, - 1, - 1, - 1, 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, - 1, 0, 9, 1, 11, 6, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, - 1, - 1, - 1, - 1, 7, 11, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 0, 8, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 1, 9, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 8, 1, 9, 8, 3, 1, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 10, 1, 2, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 2, 10, 3, 0, 8, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 9, 0, 2, 10, 9, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, - 1, - 1, - 1, - 1, 7, 2, 3, 6, 2, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 7, 0, 8, 7, 6, 0, 6, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 7, 6, 2, 3, 7, 0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, - 1, - 1, - 1, - 1, 10, 7, 6, 10, 1, 7, 1, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, - 1, - 1, - 1, - 1, 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, - 1, - 1, - 1, - 1, 7, 6, 10, 7, 10, 8, 8, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 6, 8, 4, 11, 8, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 6, 11, 3, 0, 6, 0, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 8, 6, 11, 8, 4, 6, 9, 0, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, - 1, - 1, - 1, - 1, 6, 8, 4, 6, 11, 8, 2, 10, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, - 1, - 1, - 1, - 1, 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, - 1, - 1, - 1, - 1, 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, - 1, 8, 2, 3, 8, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, - 1, - 1, - 1, - 1, 1, 9, 4, 1, 4, 2, 2, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, - 1, - 1, - 1, - 1, 10, 1, 0, 10, 0, 6, 6, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, - 1, 10, 9, 4, 6, 10, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 9, 5, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 8, 3, 4, 9, 5, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 5, 0, 1, 5, 4, 0, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, - 1, - 1, - 1, - 1, 9, 5, 4, 10, 1, 2, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, - 1, - 1, - 1, - 1, 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, - 1, - 1, - 1, - 1, 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, - 1, 7, 2, 3, 7, 6, 2, 5, 4, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, - 1, - 1, - 1, - 1, 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, - 1, - 1, - 1, - 1, 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, - 1, 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, - 1, - 1, - 1, - 1, 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, - 1, 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, - 1, 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, - 1, - 1, - 1, - 1, 6, 9, 5, 6, 11, 9, 11, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, - 1, - 1, - 1, - 1, 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, - 1, - 1, - 1, - 1, 6, 11, 3, 6, 3, 5, 5, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, - 1, - 1, - 1, - 1, 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, - 1, 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, - 1, 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, - 1, - 1, - 1, - 1, 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, - 1, - 1, - 1, - 1, 9, 5, 6, 9, 6, 0, 0, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, - 1, 1, 5, 6, 2, 1, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, - 1, 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, - 1, - 1, - 1, - 1, 0, 3, 8, 5, 6, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 10, 5, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 11, 5, 10, 7, 5, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 11, 5, 10, 11, 7, 5, 8, 3, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 5, 11, 7, 5, 10, 11, 1, 9, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, - 1, - 1, - 1, - 1, 11, 1, 2, 11, 7, 1, 7, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, - 1, - 1, - 1, - 1, 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, - 1, - 1, - 1, - 1, 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, - 1, 2, 5, 10, 2, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, - 1, - 1, - 1, - 1, 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, - 1, - 1, - 1, - 1, 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, - 1, 1, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 8, 7, 0, 7, 1, 1, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 0, 3, 9, 3, 5, 5, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 8, 7, 5, 9, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 5, 8, 4, 5, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, - 1, - 1, - 1, - 1, 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, - 1, - 1, - 1, - 1, 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, - 1, 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, - 1, - 1, - 1, - 1, 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, - 1, 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, - 1, 9, 4, 5, 2, 11, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, - 1, - 1, - 1, - 1, 5, 10, 2, 5, 2, 4, 4, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, - 1, 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, - 1, - 1, - 1, - 1, 8, 4, 5, 8, 5, 3, 3, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 4, 5, 1, 0, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, - 1, - 1, - 1, - 1, 9, 4, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 11, 7, 4, 9, 11, 9, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, - 1, - 1, - 1, - 1, 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, - 1, - 1, - 1, - 1, 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, - 1, 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, - 1, - 1, - 1, - 1, 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, - 1, 11, 7, 4, 11, 4, 2, 2, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, - 1, - 1, - 1, - 1, 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, - 1, - 1, - 1, - 1, 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, - 1, 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, - 1, 1, 10, 2, 8, 7, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 9, 1, 4, 1, 7, 7, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, - 1, - 1, - 1, - 1, 4, 0, 3, 7, 4, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 4, 8, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 0, 9, 3, 9, 11, 11, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 1, 10, 0, 10, 8, 8, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 1, 10, 11, 3, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 2, 11, 1, 11, 9, 9, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, - 1, - 1, - 1, - 1, 0, 2, 11, 8, 0, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 3, 2, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 3, 8, 2, 8, 10, 10, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 9, 10, 2, 0, 9, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, - 1, - 1, - 1, - 1, 1, 10, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1, 3, 8, 9, 1, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 9, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 3, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 ] );
|
|
733
754
|
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
const textureHeight = options.textureHeight || 512;
|
|
15
15
|
const clipBias = options.clipBias || 0;
|
|
16
16
|
const shader = options.shader || Reflector.ReflectorShader;
|
|
17
|
-
const multisample = options.multisample !== undefined ? options.multisample : 4;
|
|
17
|
+
const multisample = options.multisample !== undefined ? options.multisample : 4;
|
|
18
|
+
|
|
19
|
+
//
|
|
18
20
|
|
|
19
21
|
const reflectorPlane = new THREE.Plane();
|
|
20
22
|
const normal = new THREE.Vector3();
|
|
@@ -41,7 +43,6 @@
|
|
|
41
43
|
material.uniforms[ 'color' ].value = color;
|
|
42
44
|
material.uniforms[ 'textureMatrix' ].value = textureMatrix;
|
|
43
45
|
this.material = material;
|
|
44
|
-
|
|
45
46
|
this.onBeforeRender = function ( renderer, scene, camera ) {
|
|
46
47
|
|
|
47
48
|
reflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );
|
|
@@ -49,7 +50,9 @@
|
|
|
49
50
|
rotationMatrix.extractRotation( scope.matrixWorld );
|
|
50
51
|
normal.set( 0, 0, 1 );
|
|
51
52
|
normal.applyMatrix4( rotationMatrix );
|
|
52
|
-
view.subVectors( reflectorWorldPosition, cameraWorldPosition );
|
|
53
|
+
view.subVectors( reflectorWorldPosition, cameraWorldPosition );
|
|
54
|
+
|
|
55
|
+
// Avoid rendering when reflector is facing away
|
|
53
56
|
|
|
54
57
|
if ( view.dot( normal ) > 0 ) return;
|
|
55
58
|
view.reflect( normal ).negate();
|
|
@@ -69,14 +72,16 @@
|
|
|
69
72
|
virtualCamera.far = camera.far; // Used in WebGLBackground
|
|
70
73
|
|
|
71
74
|
virtualCamera.updateMatrixWorld();
|
|
72
|
-
virtualCamera.projectionMatrix.copy( camera.projectionMatrix );
|
|
75
|
+
virtualCamera.projectionMatrix.copy( camera.projectionMatrix );
|
|
73
76
|
|
|
77
|
+
// Update the texture matrix
|
|
74
78
|
textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 );
|
|
75
79
|
textureMatrix.multiply( virtualCamera.projectionMatrix );
|
|
76
80
|
textureMatrix.multiply( virtualCamera.matrixWorldInverse );
|
|
77
|
-
textureMatrix.multiply( scope.matrixWorld );
|
|
78
|
-
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
81
|
+
textureMatrix.multiply( scope.matrixWorld );
|
|
79
82
|
|
|
83
|
+
// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
|
|
84
|
+
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
80
85
|
reflectorPlane.setFromNormalAndCoplanarPoint( normal, reflectorWorldPosition );
|
|
81
86
|
reflectorPlane.applyMatrix4( virtualCamera.matrixWorldInverse );
|
|
82
87
|
clipPlane.set( reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant );
|
|
@@ -84,15 +89,18 @@
|
|
|
84
89
|
q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
|
|
85
90
|
q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
|
|
86
91
|
q.z = - 1.0;
|
|
87
|
-
q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
|
|
92
|
+
q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
|
|
88
93
|
|
|
89
|
-
|
|
94
|
+
// Calculate the scaled plane vector
|
|
95
|
+
clipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );
|
|
90
96
|
|
|
97
|
+
// Replacing the third row of the projection matrix
|
|
91
98
|
projectionMatrix.elements[ 2 ] = clipPlane.x;
|
|
92
99
|
projectionMatrix.elements[ 6 ] = clipPlane.y;
|
|
93
100
|
projectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;
|
|
94
|
-
projectionMatrix.elements[ 14 ] = clipPlane.w;
|
|
101
|
+
projectionMatrix.elements[ 14 ] = clipPlane.w;
|
|
95
102
|
|
|
103
|
+
// Render
|
|
96
104
|
scope.visible = false;
|
|
97
105
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
98
106
|
const currentXrEnabled = renderer.xr.enabled;
|
|
@@ -100,9 +108,7 @@
|
|
|
100
108
|
const currentOutputEncoding = renderer.outputEncoding;
|
|
101
109
|
const currentToneMapping = renderer.toneMapping;
|
|
102
110
|
renderer.xr.enabled = false; // Avoid camera modification
|
|
103
|
-
|
|
104
111
|
renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
|
|
105
|
-
|
|
106
112
|
renderer.outputEncoding = THREE.LinearEncoding;
|
|
107
113
|
renderer.toneMapping = THREE.NoToneMapping;
|
|
108
114
|
renderer.setRenderTarget( renderTarget );
|
|
@@ -114,10 +120,11 @@
|
|
|
114
120
|
renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
|
|
115
121
|
renderer.outputEncoding = currentOutputEncoding;
|
|
116
122
|
renderer.toneMapping = currentToneMapping;
|
|
117
|
-
renderer.setRenderTarget( currentRenderTarget );
|
|
123
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
118
124
|
|
|
119
|
-
|
|
125
|
+
// Restore viewport
|
|
120
126
|
|
|
127
|
+
const viewport = camera.viewport;
|
|
121
128
|
if ( viewport !== undefined ) {
|
|
122
129
|
|
|
123
130
|
renderer.state.viewport( viewport );
|
|
@@ -144,7 +151,6 @@
|
|
|
144
151
|
}
|
|
145
152
|
|
|
146
153
|
}
|
|
147
|
-
|
|
148
154
|
Reflector.ReflectorShader = {
|
|
149
155
|
uniforms: {
|
|
150
156
|
'color': {
|
|
@@ -157,9 +163,7 @@
|
|
|
157
163
|
value: null
|
|
158
164
|
}
|
|
159
165
|
},
|
|
160
|
-
vertexShader:
|
|
161
|
-
/* glsl */
|
|
162
|
-
`
|
|
166
|
+
vertexShader: /* glsl */`
|
|
163
167
|
uniform mat4 textureMatrix;
|
|
164
168
|
varying vec4 vUv;
|
|
165
169
|
|
|
@@ -175,9 +179,7 @@
|
|
|
175
179
|
#include <logdepthbuf_vertex>
|
|
176
180
|
|
|
177
181
|
}`,
|
|
178
|
-
fragmentShader:
|
|
179
|
-
/* glsl */
|
|
180
|
-
`
|
|
182
|
+
fragmentShader: /* glsl */`
|
|
181
183
|
uniform vec3 color;
|
|
182
184
|
uniform sampler2D tDiffuse;
|
|
183
185
|
varying vec4 vUv;
|