@needle-tools/three 0.145.4 → 0.146.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +32586 -35951
- package/build/three.js +32600 -35965
- package/build/three.min.js +6 -7
- package/build/three.module.js +1547 -1154
- 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 +75 -19
- 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/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
|
@@ -2,13 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
class USDZExporter {
|
|
4
4
|
|
|
5
|
-
async parse( scene
|
|
5
|
+
async parse( scene, options = {
|
|
6
|
+
ar: {
|
|
7
|
+
anchoring: {
|
|
8
|
+
type: 'plane'
|
|
9
|
+
},
|
|
10
|
+
planeAnchoring: {
|
|
11
|
+
alignment: 'vertical'
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
} ) {
|
|
6
15
|
|
|
7
16
|
const files = {};
|
|
8
|
-
const modelFileName = 'model.usda';
|
|
17
|
+
const modelFileName = 'model.usda';
|
|
9
18
|
|
|
19
|
+
// model file should be first in USDZ archive so we init it here
|
|
10
20
|
files[ modelFileName ] = null;
|
|
11
21
|
let output = buildHeader();
|
|
22
|
+
output += buildSceneStart( options );
|
|
12
23
|
const materials = {};
|
|
13
24
|
const textures = {};
|
|
14
25
|
scene.traverseVisible( object => {
|
|
@@ -17,11 +28,9 @@
|
|
|
17
28
|
|
|
18
29
|
const geometry = object.geometry;
|
|
19
30
|
const material = object.material;
|
|
20
|
-
|
|
21
31
|
if ( material.isMeshStandardMaterial ) {
|
|
22
32
|
|
|
23
33
|
const geometryFileName = 'geometries/Geometry_' + geometry.id + '.usd';
|
|
24
|
-
|
|
25
34
|
if ( ! ( geometryFileName in files ) ) {
|
|
26
35
|
|
|
27
36
|
const meshObject = buildMeshObject( geometry );
|
|
@@ -43,13 +52,17 @@
|
|
|
43
52
|
|
|
44
53
|
}
|
|
45
54
|
|
|
55
|
+
} else if ( object.isCamera ) {
|
|
56
|
+
|
|
57
|
+
output += buildCamera( object );
|
|
58
|
+
|
|
46
59
|
}
|
|
47
60
|
|
|
48
61
|
} );
|
|
62
|
+
output += buildSceneEnd();
|
|
49
63
|
output += buildMaterials( materials, textures );
|
|
50
64
|
files[ modelFileName ] = fflate.strToU8( output );
|
|
51
65
|
output = null;
|
|
52
|
-
|
|
53
66
|
for ( const id in textures ) {
|
|
54
67
|
|
|
55
68
|
const texture = textures[ id ];
|
|
@@ -59,19 +72,18 @@
|
|
|
59
72
|
const blob = await new Promise( resolve => canvas.toBlob( resolve, isRGBA ? 'image/png' : 'image/jpeg', 1 ) );
|
|
60
73
|
files[ `textures/Texture_${id}.${isRGBA ? 'png' : 'jpg'}` ] = new Uint8Array( await blob.arrayBuffer() );
|
|
61
74
|
|
|
62
|
-
}
|
|
63
|
-
// https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109
|
|
75
|
+
}
|
|
64
76
|
|
|
77
|
+
// 64 byte alignment
|
|
78
|
+
// https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109
|
|
65
79
|
|
|
66
80
|
let offset = 0;
|
|
67
|
-
|
|
68
81
|
for ( const filename in files ) {
|
|
69
82
|
|
|
70
83
|
const file = files[ filename ];
|
|
71
84
|
const headerSize = 34 + filename.length;
|
|
72
85
|
offset += headerSize;
|
|
73
86
|
const offsetMod64 = offset & 63;
|
|
74
|
-
|
|
75
87
|
if ( offsetMod64 !== 4 ) {
|
|
76
88
|
|
|
77
89
|
const padLength = 64 - offsetMod64;
|
|
@@ -95,7 +107,6 @@
|
|
|
95
107
|
}
|
|
96
108
|
|
|
97
109
|
}
|
|
98
|
-
|
|
99
110
|
function imageToCanvas( image, color ) {
|
|
100
111
|
|
|
101
112
|
if ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) {
|
|
@@ -106,7 +117,6 @@
|
|
|
106
117
|
canvas.height = image.height * Math.min( 1, scale );
|
|
107
118
|
const context = canvas.getContext( '2d' );
|
|
108
119
|
context.drawImage( image, 0, 0, canvas.width, canvas.height );
|
|
109
|
-
|
|
110
120
|
if ( color !== undefined ) {
|
|
111
121
|
|
|
112
122
|
const hex = parseInt( color, 16 );
|
|
@@ -115,7 +125,6 @@
|
|
|
115
125
|
const b = ( hex & 255 ) / 255;
|
|
116
126
|
const imagedata = context.getImageData( 0, 0, canvas.width, canvas.height );
|
|
117
127
|
const data = imagedata.data;
|
|
118
|
-
|
|
119
128
|
for ( let i = 0; i < data.length; i += 4 ) {
|
|
120
129
|
|
|
121
130
|
data[ i + 0 ] = data[ i + 0 ] * r;
|
|
@@ -132,11 +141,11 @@
|
|
|
132
141
|
|
|
133
142
|
}
|
|
134
143
|
|
|
135
|
-
}
|
|
144
|
+
}
|
|
136
145
|
|
|
146
|
+
//
|
|
137
147
|
|
|
138
148
|
const PRECISION = 7;
|
|
139
|
-
|
|
140
149
|
function buildHeader() {
|
|
141
150
|
|
|
142
151
|
return `#usda 1.0
|
|
@@ -148,6 +157,40 @@
|
|
|
148
157
|
upAxis = "Y"
|
|
149
158
|
)
|
|
150
159
|
|
|
160
|
+
`;
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function buildSceneStart( options ) {
|
|
165
|
+
|
|
166
|
+
return `def Xform "Root"
|
|
167
|
+
{
|
|
168
|
+
def Scope "Scenes" (
|
|
169
|
+
kind = "sceneLibrary"
|
|
170
|
+
)
|
|
171
|
+
{
|
|
172
|
+
def Xform "Scene" (
|
|
173
|
+
customData = {
|
|
174
|
+
bool preliminary_collidesWithEnvironment = 0
|
|
175
|
+
string sceneName = "Scene"
|
|
176
|
+
}
|
|
177
|
+
sceneName = "Scene"
|
|
178
|
+
)
|
|
179
|
+
{
|
|
180
|
+
token preliminary:anchoring:type = "${options.ar.anchoring.type}"
|
|
181
|
+
token preliminary:planeAnchoring:alignment = "${options.ar.planeAnchoring.alignment}"
|
|
182
|
+
|
|
183
|
+
`;
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function buildSceneEnd() {
|
|
188
|
+
|
|
189
|
+
return `
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
151
194
|
`;
|
|
152
195
|
|
|
153
196
|
}
|
|
@@ -158,14 +201,14 @@
|
|
|
158
201
|
output += dataToInsert;
|
|
159
202
|
return fflate.strToU8( output );
|
|
160
203
|
|
|
161
|
-
}
|
|
204
|
+
}
|
|
162
205
|
|
|
206
|
+
// Xform
|
|
163
207
|
|
|
164
208
|
function buildXform( object, geometry, material ) {
|
|
165
209
|
|
|
166
210
|
const name = 'Object_' + object.id;
|
|
167
211
|
const transform = buildMatrix( object.matrixWorld );
|
|
168
|
-
|
|
169
212
|
if ( object.matrixWorld.determinant() < 0 ) {
|
|
170
213
|
|
|
171
214
|
console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', object );
|
|
@@ -197,8 +240,9 @@
|
|
|
197
240
|
|
|
198
241
|
return `(${array[ offset + 0 ]}, ${array[ offset + 1 ]}, ${array[ offset + 2 ]}, ${array[ offset + 3 ]})`;
|
|
199
242
|
|
|
200
|
-
}
|
|
243
|
+
}
|
|
201
244
|
|
|
245
|
+
// Mesh
|
|
202
246
|
|
|
203
247
|
function buildMeshObject( geometry ) {
|
|
204
248
|
|
|
@@ -246,7 +290,6 @@ def "Geometry"
|
|
|
246
290
|
|
|
247
291
|
const index = geometry.index;
|
|
248
292
|
const array = [];
|
|
249
|
-
|
|
250
293
|
if ( index !== null ) {
|
|
251
294
|
|
|
252
295
|
for ( let i = 0; i < index.count; i ++ ) {
|
|
@@ -258,7 +301,6 @@ def "Geometry"
|
|
|
258
301
|
} else {
|
|
259
302
|
|
|
260
303
|
const length = geometry.attributes.position.count;
|
|
261
|
-
|
|
262
304
|
for ( let i = 0; i < length; i ++ ) {
|
|
263
305
|
|
|
264
306
|
array.push( i );
|
|
@@ -281,7 +323,6 @@ def "Geometry"
|
|
|
281
323
|
}
|
|
282
324
|
|
|
283
325
|
const array = [];
|
|
284
|
-
|
|
285
326
|
for ( let i = 0; i < attribute.count; i ++ ) {
|
|
286
327
|
|
|
287
328
|
const x = attribute.getX( i );
|
|
@@ -305,7 +346,6 @@ def "Geometry"
|
|
|
305
346
|
}
|
|
306
347
|
|
|
307
348
|
const array = [];
|
|
308
|
-
|
|
309
349
|
for ( let i = 0; i < attribute.count; i ++ ) {
|
|
310
350
|
|
|
311
351
|
const x = attribute.getX( i );
|
|
@@ -316,13 +356,13 @@ def "Geometry"
|
|
|
316
356
|
|
|
317
357
|
return array.join( ', ' );
|
|
318
358
|
|
|
319
|
-
}
|
|
359
|
+
}
|
|
320
360
|
|
|
361
|
+
// Materials
|
|
321
362
|
|
|
322
363
|
function buildMaterials( materials, textures ) {
|
|
323
364
|
|
|
324
365
|
const array = [];
|
|
325
|
-
|
|
326
366
|
for ( const uuid in materials ) {
|
|
327
367
|
|
|
328
368
|
const material = materials[ uuid ];
|
|
@@ -342,10 +382,10 @@ ${array.join( '' )}
|
|
|
342
382
|
function buildMaterial( material, textures ) {
|
|
343
383
|
|
|
344
384
|
// https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html
|
|
385
|
+
|
|
345
386
|
const pad = ' ';
|
|
346
387
|
const inputs = [];
|
|
347
388
|
const samplers = [];
|
|
348
|
-
|
|
349
389
|
function buildTexture( texture, mapType, color ) {
|
|
350
390
|
|
|
351
391
|
const id = texture.id + ( color ? '_' + color.getHexString() : '' );
|
|
@@ -390,7 +430,6 @@ ${array.join( '' )}
|
|
|
390
430
|
if ( material.map !== null ) {
|
|
391
431
|
|
|
392
432
|
inputs.push( `${pad}color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>` );
|
|
393
|
-
|
|
394
433
|
if ( material.transparent ) {
|
|
395
434
|
|
|
396
435
|
inputs.push( `${pad}float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:a>` );
|
|
@@ -518,6 +557,52 @@ ${samplers.join( '\n' )}
|
|
|
518
557
|
|
|
519
558
|
}
|
|
520
559
|
|
|
560
|
+
function buildCamera( camera ) {
|
|
561
|
+
|
|
562
|
+
const name = camera.name ? camera.name : 'Camera_' + camera.id;
|
|
563
|
+
const transform = buildMatrix( camera.matrixWorld );
|
|
564
|
+
if ( camera.matrixWorld.determinant() < 0 ) {
|
|
565
|
+
|
|
566
|
+
console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', camera );
|
|
567
|
+
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
if ( camera.isOrthographicCamera ) {
|
|
571
|
+
|
|
572
|
+
return `def Camera "${name}"
|
|
573
|
+
{
|
|
574
|
+
matrix4d xformOp:transform = ${transform}
|
|
575
|
+
uniform token[] xformOpOrder = ["xformOp:transform"]
|
|
576
|
+
|
|
577
|
+
float2 clippingRange = (${camera.near}, ${camera.far})
|
|
578
|
+
float horizontalAperture = ${( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10}
|
|
579
|
+
float verticalAperture = ${( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10}
|
|
580
|
+
token projection = "orthographic"
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
`;
|
|
584
|
+
|
|
585
|
+
} else {
|
|
586
|
+
|
|
587
|
+
return `def Camera "${name}"
|
|
588
|
+
{
|
|
589
|
+
matrix4d xformOp:transform = ${transform}
|
|
590
|
+
uniform token[] xformOpOrder = ["xformOp:transform"]
|
|
591
|
+
|
|
592
|
+
float2 clippingRange = (${camera.near}, ${camera.far})
|
|
593
|
+
float focalLength = ${camera.getFocalLength()}
|
|
594
|
+
float focusDistance = ${camera.focus}
|
|
595
|
+
float horizontalAperture = ${camera.getFilmWidth()}
|
|
596
|
+
token projection = "perspective"
|
|
597
|
+
float verticalAperture = ${camera.getFilmHeight()}
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
`;
|
|
601
|
+
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
}
|
|
605
|
+
|
|
521
606
|
THREE.USDZExporter = USDZExporter;
|
|
522
607
|
|
|
523
608
|
} )();
|
|
@@ -4,25 +4,29 @@
|
|
|
4
4
|
|
|
5
5
|
constructor( points = [] ) {
|
|
6
6
|
|
|
7
|
-
super();
|
|
7
|
+
super();
|
|
8
|
+
|
|
9
|
+
// buffers
|
|
8
10
|
|
|
9
11
|
const vertices = [];
|
|
10
12
|
const normals = [];
|
|
11
|
-
|
|
12
13
|
if ( THREE.ConvexHull === undefined ) {
|
|
13
14
|
|
|
14
15
|
console.error( 'THREE.ConvexGeometry: ConvexGeometry relies on THREE.ConvexHull' );
|
|
15
16
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
const convexHull = new THREE.ConvexHull().setFromPoints( points );
|
|
19
|
+
const convexHull = new THREE.ConvexHull().setFromPoints( points );
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
// generate vertices and normals
|
|
21
22
|
|
|
23
|
+
const faces = convexHull.faces;
|
|
22
24
|
for ( let i = 0; i < faces.length; i ++ ) {
|
|
23
25
|
|
|
24
26
|
const face = faces[ i ];
|
|
25
|
-
let edge = face.edge;
|
|
27
|
+
let edge = face.edge;
|
|
28
|
+
|
|
29
|
+
// we move along a doubly-connected edge list to access all face points (see HalfEdge docs)
|
|
26
30
|
|
|
27
31
|
do {
|
|
28
32
|
|
|
@@ -33,8 +37,9 @@
|
|
|
33
37
|
|
|
34
38
|
} while ( edge !== face.edge );
|
|
35
39
|
|
|
36
|
-
}
|
|
40
|
+
}
|
|
37
41
|
|
|
42
|
+
// build geometry
|
|
38
43
|
|
|
39
44
|
this.setAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );
|
|
40
45
|
this.setAttribute( 'normal', new THREE.Float32BufferAttribute( normals, 3 ) );
|
|
@@ -19,35 +19,48 @@
|
|
|
19
19
|
|
|
20
20
|
constructor( mesh, position, orientation, size ) {
|
|
21
21
|
|
|
22
|
-
super();
|
|
22
|
+
super();
|
|
23
|
+
|
|
24
|
+
// buffers
|
|
23
25
|
|
|
24
26
|
const vertices = [];
|
|
25
27
|
const normals = [];
|
|
26
|
-
const uvs = [];
|
|
28
|
+
const uvs = [];
|
|
29
|
+
|
|
30
|
+
// helpers
|
|
27
31
|
|
|
28
|
-
const plane = new THREE.Vector3();
|
|
32
|
+
const plane = new THREE.Vector3();
|
|
33
|
+
|
|
34
|
+
// this matrix represents the transformation of the decal projector
|
|
29
35
|
|
|
30
36
|
const projectorMatrix = new THREE.Matrix4();
|
|
31
37
|
projectorMatrix.makeRotationFromEuler( orientation );
|
|
32
38
|
projectorMatrix.setPosition( position );
|
|
33
39
|
const projectorMatrixInverse = new THREE.Matrix4();
|
|
34
|
-
projectorMatrixInverse.copy( projectorMatrix ).invert();
|
|
40
|
+
projectorMatrixInverse.copy( projectorMatrix ).invert();
|
|
41
|
+
|
|
42
|
+
// generate buffers
|
|
35
43
|
|
|
36
|
-
generate();
|
|
44
|
+
generate();
|
|
45
|
+
|
|
46
|
+
// build geometry
|
|
37
47
|
|
|
38
48
|
this.setAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );
|
|
39
49
|
this.setAttribute( 'normal', new THREE.Float32BufferAttribute( normals, 3 ) );
|
|
40
50
|
this.setAttribute( 'uv', new THREE.Float32BufferAttribute( uvs, 2 ) );
|
|
41
|
-
|
|
42
51
|
function generate() {
|
|
43
52
|
|
|
44
53
|
let decalVertices = [];
|
|
45
54
|
const vertex = new THREE.Vector3();
|
|
46
|
-
const normal = new THREE.Vector3();
|
|
55
|
+
const normal = new THREE.Vector3();
|
|
56
|
+
|
|
57
|
+
// handle different geometry types
|
|
47
58
|
|
|
48
59
|
const geometry = mesh.geometry;
|
|
49
60
|
const positionAttribute = geometry.attributes.position;
|
|
50
|
-
const normalAttribute = geometry.attributes.normal;
|
|
61
|
+
const normalAttribute = geometry.attributes.normal;
|
|
62
|
+
|
|
63
|
+
// first, create an array of 'DecalVertex' objects
|
|
51
64
|
// three consecutive 'DecalVertex' objects represent a single face
|
|
52
65
|
//
|
|
53
66
|
// this data structure will be later used to perform the clipping
|
|
@@ -55,8 +68,8 @@
|
|
|
55
68
|
if ( geometry.index !== null ) {
|
|
56
69
|
|
|
57
70
|
// indexed THREE.BufferGeometry
|
|
58
|
-
const index = geometry.index;
|
|
59
71
|
|
|
72
|
+
const index = geometry.index;
|
|
60
73
|
for ( let i = 0; i < index.count; i ++ ) {
|
|
61
74
|
|
|
62
75
|
vertex.fromBufferAttribute( positionAttribute, index.getX( i ) );
|
|
@@ -68,6 +81,7 @@
|
|
|
68
81
|
} else {
|
|
69
82
|
|
|
70
83
|
// non-indexed THREE.BufferGeometry
|
|
84
|
+
|
|
71
85
|
for ( let i = 0; i < positionAttribute.count; i ++ ) {
|
|
72
86
|
|
|
73
87
|
vertex.fromBufferAttribute( positionAttribute, i );
|
|
@@ -76,23 +90,32 @@
|
|
|
76
90
|
|
|
77
91
|
}
|
|
78
92
|
|
|
79
|
-
}
|
|
93
|
+
}
|
|
80
94
|
|
|
95
|
+
// second, clip the geometry so that it doesn't extend out from the projector
|
|
81
96
|
|
|
82
97
|
decalVertices = clipGeometry( decalVertices, plane.set( 1, 0, 0 ) );
|
|
83
98
|
decalVertices = clipGeometry( decalVertices, plane.set( - 1, 0, 0 ) );
|
|
84
99
|
decalVertices = clipGeometry( decalVertices, plane.set( 0, 1, 0 ) );
|
|
85
100
|
decalVertices = clipGeometry( decalVertices, plane.set( 0, - 1, 0 ) );
|
|
86
101
|
decalVertices = clipGeometry( decalVertices, plane.set( 0, 0, 1 ) );
|
|
87
|
-
decalVertices = clipGeometry( decalVertices, plane.set( 0, 0, - 1 ) );
|
|
102
|
+
decalVertices = clipGeometry( decalVertices, plane.set( 0, 0, - 1 ) );
|
|
103
|
+
|
|
104
|
+
// third, generate final vertices, normals and uvs
|
|
88
105
|
|
|
89
106
|
for ( let i = 0; i < decalVertices.length; i ++ ) {
|
|
90
107
|
|
|
91
|
-
const decalVertex = decalVertices[ i ];
|
|
108
|
+
const decalVertex = decalVertices[ i ];
|
|
109
|
+
|
|
110
|
+
// create texture coordinates (we are still in projector space)
|
|
92
111
|
|
|
93
|
-
uvs.push( 0.5 + decalVertex.position.x / size.x, 0.5 + decalVertex.position.y / size.y );
|
|
112
|
+
uvs.push( 0.5 + decalVertex.position.x / size.x, 0.5 + decalVertex.position.y / size.y );
|
|
94
113
|
|
|
95
|
-
|
|
114
|
+
// transform the vertex back to world space
|
|
115
|
+
|
|
116
|
+
decalVertex.position.applyMatrix4( projectorMatrix );
|
|
117
|
+
|
|
118
|
+
// now create vertex and normal buffer data
|
|
96
119
|
|
|
97
120
|
vertices.push( decalVertex.position.x, decalVertex.position.y, decalVertex.position.z );
|
|
98
121
|
normals.push( decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z );
|
|
@@ -104,6 +127,7 @@
|
|
|
104
127
|
function pushDecalVertex( decalVertices, vertex, normal ) {
|
|
105
128
|
|
|
106
129
|
// transform the vertex to world space, then to projector space
|
|
130
|
+
|
|
107
131
|
vertex.applyMatrix4( mesh.matrixWorld );
|
|
108
132
|
vertex.applyMatrix4( projectorMatrixInverse );
|
|
109
133
|
normal.transformDirection( mesh.matrixWorld );
|
|
@@ -114,7 +138,9 @@
|
|
|
114
138
|
function clipGeometry( inVertices, plane ) {
|
|
115
139
|
|
|
116
140
|
const outVertices = [];
|
|
117
|
-
const s = 0.5 * Math.abs( size.dot( plane ) );
|
|
141
|
+
const s = 0.5 * Math.abs( size.dot( plane ) );
|
|
142
|
+
|
|
143
|
+
// a single iteration clips one face,
|
|
118
144
|
// which consists of three consecutive 'DecalVertex' objects
|
|
119
145
|
|
|
120
146
|
for ( let i = 0; i < inVertices.length; i += 3 ) {
|
|
@@ -129,16 +155,18 @@
|
|
|
129
155
|
const d3 = inVertices[ i + 2 ].position.dot( plane ) - s;
|
|
130
156
|
const v1Out = d1 > 0;
|
|
131
157
|
const v2Out = d2 > 0;
|
|
132
|
-
const v3Out = d3 > 0;
|
|
158
|
+
const v3Out = d3 > 0;
|
|
133
159
|
|
|
134
|
-
|
|
160
|
+
// calculate, how many vertices of the face lie outside of the clipping plane
|
|
135
161
|
|
|
162
|
+
total = ( v1Out ? 1 : 0 ) + ( v2Out ? 1 : 0 ) + ( v3Out ? 1 : 0 );
|
|
136
163
|
switch ( total ) {
|
|
137
164
|
|
|
138
165
|
case 0:
|
|
139
166
|
{
|
|
140
167
|
|
|
141
168
|
// the entire face lies inside of the plane, no clipping needed
|
|
169
|
+
|
|
142
170
|
outVertices.push( inVertices[ i ] );
|
|
143
171
|
outVertices.push( inVertices[ i + 1 ] );
|
|
144
172
|
outVertices.push( inVertices[ i + 2 ] );
|
|
@@ -150,6 +178,7 @@
|
|
|
150
178
|
{
|
|
151
179
|
|
|
152
180
|
// one vertex lies outside of the plane, perform clipping
|
|
181
|
+
|
|
153
182
|
if ( v1Out ) {
|
|
154
183
|
|
|
155
184
|
nV1 = inVertices[ i + 1 ];
|
|
@@ -198,6 +227,7 @@
|
|
|
198
227
|
{
|
|
199
228
|
|
|
200
229
|
// two vertices lies outside of the plane, perform clipping
|
|
230
|
+
|
|
201
231
|
if ( ! v1Out ) {
|
|
202
232
|
|
|
203
233
|
nV1 = inVertices[ i ].clone();
|
|
@@ -239,6 +269,7 @@
|
|
|
239
269
|
{
|
|
240
270
|
|
|
241
271
|
// the entire face lies outside of the plane, so let's discard the corresponding vertices
|
|
272
|
+
|
|
242
273
|
break;
|
|
243
274
|
|
|
244
275
|
}
|
|
@@ -256,7 +287,9 @@
|
|
|
256
287
|
const d0 = v0.position.dot( p ) - s;
|
|
257
288
|
const d1 = v1.position.dot( p ) - s;
|
|
258
289
|
const s0 = d0 / ( d0 - d1 );
|
|
259
|
-
const v = new DecalVertex( new THREE.Vector3( v0.position.x + s0 * ( v1.position.x - v0.position.x ), v0.position.y + s0 * ( v1.position.y - v0.position.y ), v0.position.z + s0 * ( v1.position.z - v0.position.z ) ), new THREE.Vector3( v0.normal.x + s0 * ( v1.normal.x - v0.normal.x ), v0.normal.y + s0 * ( v1.normal.y - v0.normal.y ), v0.normal.z + s0 * ( v1.normal.z - v0.normal.z ) ) );
|
|
290
|
+
const v = new DecalVertex( new THREE.Vector3( v0.position.x + s0 * ( v1.position.x - v0.position.x ), v0.position.y + s0 * ( v1.position.y - v0.position.y ), v0.position.z + s0 * ( v1.position.z - v0.position.z ) ), new THREE.Vector3( v0.normal.x + s0 * ( v1.normal.x - v0.normal.x ), v0.normal.y + s0 * ( v1.normal.y - v0.normal.y ), v0.normal.z + s0 * ( v1.normal.z - v0.normal.z ) ) );
|
|
291
|
+
|
|
292
|
+
// need to clip more values (texture coordinates)? do it this way:
|
|
260
293
|
// intersectpoint.value = a.value + s * ( b.value - a.value );
|
|
261
294
|
|
|
262
295
|
return v;
|
|
@@ -265,8 +298,9 @@
|
|
|
265
298
|
|
|
266
299
|
}
|
|
267
300
|
|
|
268
|
-
}
|
|
301
|
+
}
|
|
269
302
|
|
|
303
|
+
// helper
|
|
270
304
|
|
|
271
305
|
class DecalVertex {
|
|
272
306
|
|
|
@@ -276,7 +310,6 @@
|
|
|
276
310
|
this.normal = normal;
|
|
277
311
|
|
|
278
312
|
}
|
|
279
|
-
|
|
280
313
|
clone() {
|
|
281
314
|
|
|
282
315
|
return new this.constructor( this.position.clone(), this.normal.clone() );
|