@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
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
super( manager );
|
|
8
8
|
|
|
9
9
|
}
|
|
10
|
-
|
|
11
10
|
load( url, onLoad, onProgress, onError ) {
|
|
12
11
|
|
|
13
12
|
const scope = this;
|
|
@@ -39,8 +38,9 @@
|
|
|
39
38
|
|
|
40
39
|
}, onProgress, onError );
|
|
41
40
|
|
|
42
|
-
}
|
|
41
|
+
}
|
|
43
42
|
|
|
43
|
+
// Based on CanvasMol PDB parser
|
|
44
44
|
|
|
45
45
|
parse( text ) {
|
|
46
46
|
|
|
@@ -65,18 +65,17 @@
|
|
|
65
65
|
function parseBond( start, length, satom, i ) {
|
|
66
66
|
|
|
67
67
|
const eatom = parseInt( lines[ i ].slice( start, start + length ) );
|
|
68
|
-
|
|
69
68
|
if ( eatom ) {
|
|
70
69
|
|
|
71
70
|
const h = hash( satom, eatom );
|
|
72
|
-
|
|
73
71
|
if ( _bhash[ h ] === undefined ) {
|
|
74
72
|
|
|
75
73
|
_bonds.push( [ satom - 1, eatom - 1, 1 ] );
|
|
76
|
-
|
|
77
74
|
_bhash[ h ] = _bonds.length - 1;
|
|
78
75
|
|
|
79
|
-
} else {
|
|
76
|
+
} else {
|
|
77
|
+
|
|
78
|
+
// doesn't really work as almost all PDBs
|
|
80
79
|
// have just normal bonds appearing multiple
|
|
81
80
|
// times instead of being double/triple bonds
|
|
82
81
|
// bonds[bhash[h]][2] += 1;
|
|
@@ -99,7 +98,9 @@
|
|
|
99
98
|
const geometryBonds = build.geometryBonds;
|
|
100
99
|
const verticesAtoms = [];
|
|
101
100
|
const colorsAtoms = [];
|
|
102
|
-
const verticesBonds = [];
|
|
101
|
+
const verticesBonds = [];
|
|
102
|
+
|
|
103
|
+
// atoms
|
|
103
104
|
|
|
104
105
|
for ( let i = 0, l = atoms.length; i < l; i ++ ) {
|
|
105
106
|
|
|
@@ -113,8 +114,9 @@
|
|
|
113
114
|
const b = atom[ 3 ][ 2 ] / 255;
|
|
114
115
|
colorsAtoms.push( r, g, b );
|
|
115
116
|
|
|
116
|
-
}
|
|
117
|
+
}
|
|
117
118
|
|
|
119
|
+
// bonds
|
|
118
120
|
|
|
119
121
|
for ( let i = 0, l = _bonds.length; i < l; i ++ ) {
|
|
120
122
|
|
|
@@ -132,8 +134,9 @@
|
|
|
132
134
|
z = endAtom[ 2 ];
|
|
133
135
|
verticesBonds.push( x, y, z );
|
|
134
136
|
|
|
135
|
-
}
|
|
137
|
+
}
|
|
136
138
|
|
|
139
|
+
// build geometry
|
|
137
140
|
|
|
138
141
|
geometryAtoms.setAttribute( 'position', new THREE.Float32BufferAttribute( verticesAtoms, 3 ) );
|
|
139
142
|
geometryAtoms.setAttribute( 'color', new THREE.Float32BufferAttribute( colorsAtoms, 3 ) );
|
|
@@ -265,10 +268,11 @@
|
|
|
265
268
|
const atoms = [];
|
|
266
269
|
const _bonds = [];
|
|
267
270
|
const _bhash = {};
|
|
268
|
-
const _atomMap = {};
|
|
271
|
+
const _atomMap = {};
|
|
269
272
|
|
|
270
|
-
|
|
273
|
+
// parse
|
|
271
274
|
|
|
275
|
+
const lines = text.split( '\n' );
|
|
272
276
|
for ( let i = 0, l = lines.length; i < l; i ++ ) {
|
|
273
277
|
|
|
274
278
|
if ( lines[ i ].slice( 0, 4 ) === 'ATOM' || lines[ i ].slice( 0, 6 ) === 'HETATM' ) {
|
|
@@ -278,7 +282,6 @@
|
|
|
278
282
|
const z = parseFloat( lines[ i ].slice( 46, 53 ) );
|
|
279
283
|
const index = parseInt( lines[ i ].slice( 6, 11 ) ) - 1;
|
|
280
284
|
let e = trim( lines[ i ].slice( 76, 78 ) ).toLowerCase();
|
|
281
|
-
|
|
282
285
|
if ( e === '' ) {
|
|
283
286
|
|
|
284
287
|
e = trim( lines[ i ].slice( 12, 14 ) ).toLowerCase();
|
|
@@ -299,8 +302,9 @@
|
|
|
299
302
|
|
|
300
303
|
}
|
|
301
304
|
|
|
302
|
-
}
|
|
305
|
+
}
|
|
303
306
|
|
|
307
|
+
// build and return geometry
|
|
304
308
|
|
|
305
309
|
return buildGeometry();
|
|
306
310
|
|
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
29
|
const _color = new THREE.Color();
|
|
30
|
-
|
|
31
30
|
class PLYLoader extends THREE.Loader {
|
|
32
31
|
|
|
33
32
|
constructor( manager ) {
|
|
@@ -36,7 +35,6 @@
|
|
|
36
35
|
this.propertyNameMapping = {};
|
|
37
36
|
|
|
38
37
|
}
|
|
39
|
-
|
|
40
38
|
load( url, onLoad, onProgress, onError ) {
|
|
41
39
|
|
|
42
40
|
const scope = this;
|
|
@@ -70,13 +68,11 @@
|
|
|
70
68
|
}, onProgress, onError );
|
|
71
69
|
|
|
72
70
|
}
|
|
73
|
-
|
|
74
71
|
setPropertyNameMapping( mapping ) {
|
|
75
72
|
|
|
76
73
|
this.propertyNameMapping = mapping;
|
|
77
74
|
|
|
78
75
|
}
|
|
79
|
-
|
|
80
76
|
parse( data ) {
|
|
81
77
|
|
|
82
78
|
function parseHeader( data ) {
|
|
@@ -85,7 +81,6 @@
|
|
|
85
81
|
let headerText = '';
|
|
86
82
|
let headerLength = 0;
|
|
87
83
|
const result = patternHeader.exec( data );
|
|
88
|
-
|
|
89
84
|
if ( result !== null ) {
|
|
90
85
|
|
|
91
86
|
headerText = result[ 1 ];
|
|
@@ -101,13 +96,11 @@
|
|
|
101
96
|
};
|
|
102
97
|
const lines = headerText.split( /\r\n|\r|\n/ );
|
|
103
98
|
let currentElement;
|
|
104
|
-
|
|
105
99
|
function make_ply_element_property( propertValues, propertyNameMapping ) {
|
|
106
100
|
|
|
107
101
|
const property = {
|
|
108
102
|
type: propertValues[ 0 ]
|
|
109
103
|
};
|
|
110
|
-
|
|
111
104
|
if ( property.type === 'list' ) {
|
|
112
105
|
|
|
113
106
|
property.name = propertValues[ 3 ];
|
|
@@ -138,18 +131,15 @@
|
|
|
138
131
|
const lineValues = line.split( /\s+/ );
|
|
139
132
|
const lineType = lineValues.shift();
|
|
140
133
|
line = lineValues.join( ' ' );
|
|
141
|
-
|
|
142
134
|
switch ( lineType ) {
|
|
143
135
|
|
|
144
136
|
case 'format':
|
|
145
137
|
header.format = lineValues[ 0 ];
|
|
146
138
|
header.version = lineValues[ 1 ];
|
|
147
139
|
break;
|
|
148
|
-
|
|
149
140
|
case 'comment':
|
|
150
141
|
header.comments.push( line );
|
|
151
142
|
break;
|
|
152
|
-
|
|
153
143
|
case 'element':
|
|
154
144
|
if ( currentElement !== undefined ) {
|
|
155
145
|
|
|
@@ -162,15 +152,12 @@
|
|
|
162
152
|
currentElement.count = parseInt( lineValues[ 1 ] );
|
|
163
153
|
currentElement.properties = [];
|
|
164
154
|
break;
|
|
165
|
-
|
|
166
155
|
case 'property':
|
|
167
156
|
currentElement.properties.push( make_ply_element_property( lineValues, scope.propertyNameMapping ) );
|
|
168
157
|
break;
|
|
169
|
-
|
|
170
158
|
case 'obj_info':
|
|
171
159
|
header.objInfo = line;
|
|
172
160
|
break;
|
|
173
|
-
|
|
174
161
|
default:
|
|
175
162
|
console.log( 'unhandled', lineType, lineValues );
|
|
176
163
|
|
|
@@ -205,7 +192,6 @@
|
|
|
205
192
|
case 'int32':
|
|
206
193
|
case 'uint32':
|
|
207
194
|
return parseInt( n );
|
|
208
|
-
|
|
209
195
|
case 'float':
|
|
210
196
|
case 'double':
|
|
211
197
|
case 'float32':
|
|
@@ -220,14 +206,12 @@
|
|
|
220
206
|
|
|
221
207
|
const values = line.split( /\s+/ );
|
|
222
208
|
const element = {};
|
|
223
|
-
|
|
224
209
|
for ( let i = 0; i < properties.length; i ++ ) {
|
|
225
210
|
|
|
226
211
|
if ( properties[ i ].type === 'list' ) {
|
|
227
212
|
|
|
228
213
|
const list = [];
|
|
229
214
|
const n = parseASCIINumber( values.shift(), properties[ i ].countType );
|
|
230
|
-
|
|
231
215
|
for ( let j = 0; j < n; j ++ ) {
|
|
232
216
|
|
|
233
217
|
list.push( parseASCIINumber( values.shift(), properties[ i ].itemType ) );
|
|
@@ -251,6 +235,7 @@
|
|
|
251
235
|
function parseASCII( data, header ) {
|
|
252
236
|
|
|
253
237
|
// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
|
|
238
|
+
|
|
254
239
|
const buffer = {
|
|
255
240
|
indices: [],
|
|
256
241
|
vertices: [],
|
|
@@ -262,7 +247,6 @@
|
|
|
262
247
|
let result;
|
|
263
248
|
const patternBody = /end_header\s([\s\S]*)$/;
|
|
264
249
|
let body = '';
|
|
265
|
-
|
|
266
250
|
if ( ( result = patternBody.exec( data ) ) !== null ) {
|
|
267
251
|
|
|
268
252
|
body = result[ 1 ];
|
|
@@ -272,12 +256,10 @@
|
|
|
272
256
|
const lines = body.split( /\r\n|\r|\n/ );
|
|
273
257
|
let currentElement = 0;
|
|
274
258
|
let currentElementCount = 0;
|
|
275
|
-
|
|
276
259
|
for ( let i = 0; i < lines.length; i ++ ) {
|
|
277
260
|
|
|
278
261
|
let line = lines[ i ];
|
|
279
262
|
line = line.trim();
|
|
280
|
-
|
|
281
263
|
if ( line === '' ) {
|
|
282
264
|
|
|
283
265
|
continue;
|
|
@@ -303,7 +285,9 @@
|
|
|
303
285
|
|
|
304
286
|
function postProcess( buffer ) {
|
|
305
287
|
|
|
306
|
-
let geometry = new THREE.BufferGeometry();
|
|
288
|
+
let geometry = new THREE.BufferGeometry();
|
|
289
|
+
|
|
290
|
+
// mandatory buffer data
|
|
307
291
|
|
|
308
292
|
if ( buffer.indices.length > 0 ) {
|
|
309
293
|
|
|
@@ -311,7 +295,9 @@
|
|
|
311
295
|
|
|
312
296
|
}
|
|
313
297
|
|
|
314
|
-
geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( buffer.vertices, 3 ) );
|
|
298
|
+
geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( buffer.vertices, 3 ) );
|
|
299
|
+
|
|
300
|
+
// optional buffer data
|
|
315
301
|
|
|
316
302
|
if ( buffer.normals.length > 0 ) {
|
|
317
303
|
|
|
@@ -369,11 +355,9 @@
|
|
|
369
355
|
const attrR = findAttrName( [ 'red', 'diffuse_red', 'r', 'diffuse_r' ] );
|
|
370
356
|
const attrG = findAttrName( [ 'green', 'diffuse_green', 'g', 'diffuse_g' ] );
|
|
371
357
|
const attrB = findAttrName( [ 'blue', 'diffuse_blue', 'b', 'diffuse_b' ] );
|
|
372
|
-
|
|
373
358
|
if ( elementName === 'vertex' ) {
|
|
374
359
|
|
|
375
360
|
buffer.vertices.push( element[ attrX ], element[ attrY ], element[ attrZ ] );
|
|
376
|
-
|
|
377
361
|
if ( attrNX !== null && attrNY !== null && attrNZ !== null ) {
|
|
378
362
|
|
|
379
363
|
buffer.normals.push( element[ attrNX ], element[ attrNY ], element[ attrNZ ] );
|
|
@@ -389,7 +373,6 @@
|
|
|
389
373
|
if ( attrR !== null && attrG !== null && attrB !== null ) {
|
|
390
374
|
|
|
391
375
|
_color.setRGB( element[ attrR ] / 255.0, element[ attrG ] / 255.0, element[ attrB ] / 255.0 ).convertSRGBToLinear();
|
|
392
|
-
|
|
393
376
|
buffer.colors.push( _color.r, _color.g, _color.b );
|
|
394
377
|
|
|
395
378
|
}
|
|
@@ -397,13 +380,10 @@
|
|
|
397
380
|
} else if ( elementName === 'face' ) {
|
|
398
381
|
|
|
399
382
|
const vertex_indices = element.vertex_indices || element.vertex_index; // issue #9338
|
|
400
|
-
|
|
401
383
|
const texcoord = element.texcoord;
|
|
402
|
-
|
|
403
384
|
if ( vertex_indices.length === 3 ) {
|
|
404
385
|
|
|
405
386
|
buffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 2 ] );
|
|
406
|
-
|
|
407
387
|
if ( texcoord && texcoord.length === 6 ) {
|
|
408
388
|
|
|
409
389
|
buffer.faceVertexUvs.push( texcoord[ 0 ], texcoord[ 1 ] );
|
|
@@ -431,31 +411,24 @@
|
|
|
431
411
|
case 'int8':
|
|
432
412
|
case 'char':
|
|
433
413
|
return [ dataview.getInt8( at ), 1 ];
|
|
434
|
-
|
|
435
414
|
case 'uint8':
|
|
436
415
|
case 'uchar':
|
|
437
416
|
return [ dataview.getUint8( at ), 1 ];
|
|
438
|
-
|
|
439
417
|
case 'int16':
|
|
440
418
|
case 'short':
|
|
441
419
|
return [ dataview.getInt16( at, little_endian ), 2 ];
|
|
442
|
-
|
|
443
420
|
case 'uint16':
|
|
444
421
|
case 'ushort':
|
|
445
422
|
return [ dataview.getUint16( at, little_endian ), 2 ];
|
|
446
|
-
|
|
447
423
|
case 'int32':
|
|
448
424
|
case 'int':
|
|
449
425
|
return [ dataview.getInt32( at, little_endian ), 4 ];
|
|
450
|
-
|
|
451
426
|
case 'uint32':
|
|
452
427
|
case 'uint':
|
|
453
428
|
return [ dataview.getUint32( at, little_endian ), 4 ];
|
|
454
|
-
|
|
455
429
|
case 'float32':
|
|
456
430
|
case 'float':
|
|
457
431
|
return [ dataview.getFloat32( at, little_endian ), 4 ];
|
|
458
|
-
|
|
459
432
|
case 'float64':
|
|
460
433
|
case 'double':
|
|
461
434
|
return [ dataview.getFloat64( at, little_endian ), 8 ];
|
|
@@ -469,7 +442,6 @@
|
|
|
469
442
|
const element = {};
|
|
470
443
|
let result,
|
|
471
444
|
read = 0;
|
|
472
|
-
|
|
473
445
|
for ( let i = 0; i < properties.length; i ++ ) {
|
|
474
446
|
|
|
475
447
|
if ( properties[ i ].type === 'list' ) {
|
|
@@ -478,7 +450,6 @@
|
|
|
478
450
|
result = binaryRead( dataview, at + read, properties[ i ].countType, little_endian );
|
|
479
451
|
const n = result[ 0 ];
|
|
480
452
|
read += result[ 1 ];
|
|
481
|
-
|
|
482
453
|
for ( let j = 0; j < n; j ++ ) {
|
|
483
454
|
|
|
484
455
|
result = binaryRead( dataview, at + read, properties[ i ].itemType, little_endian );
|
|
@@ -517,7 +488,6 @@
|
|
|
517
488
|
const body = new DataView( data, header.headerLength );
|
|
518
489
|
let result,
|
|
519
490
|
loc = 0;
|
|
520
|
-
|
|
521
491
|
for ( let currentElement = 0; currentElement < header.elements.length; currentElement ++ ) {
|
|
522
492
|
|
|
523
493
|
for ( let currentElementCount = 0; currentElementCount < header.elements[ currentElement ].count; currentElementCount ++ ) {
|
|
@@ -533,12 +503,12 @@
|
|
|
533
503
|
|
|
534
504
|
return postProcess( buffer );
|
|
535
505
|
|
|
536
|
-
}
|
|
506
|
+
}
|
|
537
507
|
|
|
508
|
+
//
|
|
538
509
|
|
|
539
510
|
let geometry;
|
|
540
511
|
const scope = this;
|
|
541
|
-
|
|
542
512
|
if ( data instanceof ArrayBuffer ) {
|
|
543
513
|
|
|
544
514
|
const text = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
let bigEndianPlatform = null;
|
|
8
|
+
|
|
8
9
|
/**
|
|
9
10
|
* Check if the endianness of the platform is big-endian (most significant bit first)
|
|
10
11
|
* @returns {boolean} True if big-endian, false if little-endian
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
13
|
function isBigEndianPlatform() {
|
|
14
14
|
|
|
15
15
|
if ( bigEndianPlatform === null ) {
|
|
@@ -18,20 +18,19 @@
|
|
|
18
18
|
uint8Array = new Uint8Array( buffer ),
|
|
19
19
|
uint16Array = new Uint16Array( buffer );
|
|
20
20
|
uint8Array[ 0 ] = 0xAA; // set first byte
|
|
21
|
-
|
|
22
21
|
uint8Array[ 1 ] = 0xBB; // set second byte
|
|
23
|
-
|
|
24
22
|
bigEndianPlatform = uint16Array[ 0 ] === 0xAABB;
|
|
25
23
|
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
return bigEndianPlatform;
|
|
29
27
|
|
|
30
|
-
}
|
|
31
|
-
|
|
28
|
+
}
|
|
32
29
|
|
|
33
|
-
|
|
30
|
+
// match the values defined in the spec to the TypedArray types
|
|
31
|
+
const InvertedEncodingTypes = [ null, Float32Array, null, Int8Array, Int16Array, null, Int32Array, Uint8Array, Uint16Array, null, Uint32Array ];
|
|
34
32
|
|
|
33
|
+
// define the method to use on a DataView, corresponding the TypedArray type
|
|
35
34
|
const getMethods = {
|
|
36
35
|
Uint16Array: 'getUint16',
|
|
37
36
|
Uint32Array: 'getUint32',
|
|
@@ -40,12 +39,10 @@
|
|
|
40
39
|
Float32Array: 'getFloat32',
|
|
41
40
|
Float64Array: 'getFloat64'
|
|
42
41
|
};
|
|
43
|
-
|
|
44
42
|
function copyFromBuffer( sourceArrayBuffer, viewType, position, length, fromBigEndian ) {
|
|
45
43
|
|
|
46
44
|
const bytesPerElement = viewType.BYTES_PER_ELEMENT;
|
|
47
45
|
let result;
|
|
48
|
-
|
|
49
46
|
if ( fromBigEndian === isBigEndianPlatform() || bytesPerElement === 1 ) {
|
|
50
47
|
|
|
51
48
|
result = new viewType( sourceArrayBuffer, position, length );
|
|
@@ -56,7 +53,6 @@
|
|
|
56
53
|
getMethod = getMethods[ viewType.name ],
|
|
57
54
|
littleEndian = ! fromBigEndian;
|
|
58
55
|
result = new viewType( length );
|
|
59
|
-
|
|
60
56
|
for ( let i = 0; i < length; i ++ ) {
|
|
61
57
|
|
|
62
58
|
result[ i ] = readView[ getMethod ]( i * bytesPerElement, littleEndian );
|
|
@@ -80,7 +76,6 @@
|
|
|
80
76
|
attributesNumber = flags & 0x1F;
|
|
81
77
|
let valuesNumber = 0,
|
|
82
78
|
indicesNumber = 0;
|
|
83
|
-
|
|
84
79
|
if ( bigEndian ) {
|
|
85
80
|
|
|
86
81
|
valuesNumber = ( array[ 2 ] << 16 ) + ( array[ 3 ] << 8 ) + array[ 4 ];
|
|
@@ -92,8 +87,8 @@
|
|
|
92
87
|
indicesNumber = array[ 5 ] + ( array[ 6 ] << 8 ) + ( array[ 7 ] << 16 );
|
|
93
88
|
|
|
94
89
|
}
|
|
95
|
-
/** PRELIMINARY CHECKS **/
|
|
96
90
|
|
|
91
|
+
/** PRELIMINARY CHECKS **/
|
|
97
92
|
|
|
98
93
|
if ( version === 0 ) {
|
|
99
94
|
|
|
@@ -118,21 +113,18 @@
|
|
|
118
113
|
}
|
|
119
114
|
|
|
120
115
|
}
|
|
121
|
-
/** PARSING **/
|
|
122
116
|
|
|
117
|
+
/** PARSING **/
|
|
123
118
|
|
|
124
119
|
let pos = 8;
|
|
125
120
|
const attributes = {};
|
|
126
|
-
|
|
127
121
|
for ( let i = 0; i < attributesNumber; i ++ ) {
|
|
128
122
|
|
|
129
123
|
let attributeName = '';
|
|
130
|
-
|
|
131
124
|
while ( pos < array.length ) {
|
|
132
125
|
|
|
133
126
|
const char = array[ pos ];
|
|
134
127
|
pos ++;
|
|
135
|
-
|
|
136
128
|
if ( char === 0 ) {
|
|
137
129
|
|
|
138
130
|
break;
|
|
@@ -150,8 +142,9 @@
|
|
|
150
142
|
const cardinality = ( flags >> 4 & 0x03 ) + 1;
|
|
151
143
|
const encodingType = flags & 0x0F;
|
|
152
144
|
const arrayType = InvertedEncodingTypes[ encodingType ];
|
|
153
|
-
pos ++;
|
|
145
|
+
pos ++;
|
|
154
146
|
|
|
147
|
+
// padding to next multiple of 4
|
|
155
148
|
pos = Math.ceil( pos / 4 ) * 4;
|
|
156
149
|
const values = copyFromBuffer( buffer, arrayType, pos, cardinality * valuesNumber, bigEndian );
|
|
157
150
|
pos += arrayType.BYTES_PER_ELEMENT * cardinality * valuesNumber;
|
|
@@ -165,7 +158,6 @@
|
|
|
165
158
|
|
|
166
159
|
pos = Math.ceil( pos / 4 ) * 4;
|
|
167
160
|
let indices = null;
|
|
168
|
-
|
|
169
161
|
if ( indexedGeometry ) {
|
|
170
162
|
|
|
171
163
|
indices = copyFromBuffer( buffer, indicesType === 1 ? Uint32Array : Uint16Array, pos, indicesNumber, bigEndian );
|
|
@@ -178,8 +170,9 @@
|
|
|
178
170
|
indices: indices
|
|
179
171
|
};
|
|
180
172
|
|
|
181
|
-
}
|
|
173
|
+
}
|
|
182
174
|
|
|
175
|
+
// Define the public interface
|
|
183
176
|
|
|
184
177
|
class PRWMLoader extends THREE.Loader {
|
|
185
178
|
|
|
@@ -188,7 +181,6 @@
|
|
|
188
181
|
super( manager );
|
|
189
182
|
|
|
190
183
|
}
|
|
191
|
-
|
|
192
184
|
load( url, onLoad, onProgress, onError ) {
|
|
193
185
|
|
|
194
186
|
const scope = this;
|
|
@@ -223,13 +215,11 @@
|
|
|
223
215
|
}, onProgress, onError );
|
|
224
216
|
|
|
225
217
|
}
|
|
226
|
-
|
|
227
218
|
parse( arrayBuffer ) {
|
|
228
219
|
|
|
229
220
|
const data = decodePrwm( arrayBuffer ),
|
|
230
221
|
attributesKey = Object.keys( data.attributes ),
|
|
231
222
|
bufferGeometry = new THREE.BufferGeometry();
|
|
232
|
-
|
|
233
223
|
for ( let i = 0; i < attributesKey.length; i ++ ) {
|
|
234
224
|
|
|
235
225
|
const attribute = data.attributes[ attributesKey[ i ] ];
|
|
@@ -246,7 +236,6 @@
|
|
|
246
236
|
return bufferGeometry;
|
|
247
237
|
|
|
248
238
|
}
|
|
249
|
-
|
|
250
239
|
static isBigEndianPlatform() {
|
|
251
240
|
|
|
252
241
|
return isBigEndianPlatform();
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
super( manager );
|
|
14
14
|
|
|
15
15
|
}
|
|
16
|
-
|
|
17
16
|
parse( buffer, loadMipmaps ) {
|
|
18
17
|
|
|
19
18
|
const headerLengthInt = 13;
|
|
@@ -23,15 +22,16 @@
|
|
|
23
22
|
header: header,
|
|
24
23
|
loadMipmaps: loadMipmaps
|
|
25
24
|
};
|
|
26
|
-
|
|
27
25
|
if ( header[ 0 ] === 0x03525650 ) {
|
|
28
26
|
|
|
29
27
|
// PVR v3
|
|
28
|
+
|
|
30
29
|
return _parseV3( pvrDatas );
|
|
31
30
|
|
|
32
31
|
} else if ( header[ 11 ] === 0x21525650 ) {
|
|
33
32
|
|
|
34
33
|
// PVR v2
|
|
34
|
+
|
|
35
35
|
return _parseV2( pvrDatas );
|
|
36
36
|
|
|
37
37
|
} else {
|
|
@@ -43,7 +43,6 @@
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
}
|
|
46
|
-
|
|
47
46
|
function _parseV3( pvrDatas ) {
|
|
48
47
|
|
|
49
48
|
const header = pvrDatas.header;
|
|
@@ -55,7 +54,6 @@
|
|
|
55
54
|
// numSurfs = header[ 9 ],
|
|
56
55
|
numFaces = header[ 10 ],
|
|
57
56
|
numMipmaps = header[ 11 ];
|
|
58
|
-
|
|
59
57
|
switch ( pixelFormat ) {
|
|
60
58
|
|
|
61
59
|
case 0:
|
|
@@ -63,25 +61,21 @@
|
|
|
63
61
|
bpp = 2;
|
|
64
62
|
format = THREE.RGB_PVRTC_2BPPV1_Format;
|
|
65
63
|
break;
|
|
66
|
-
|
|
67
64
|
case 1:
|
|
68
65
|
// PVRTC 2bpp RGBA
|
|
69
66
|
bpp = 2;
|
|
70
67
|
format = THREE.RGBA_PVRTC_2BPPV1_Format;
|
|
71
68
|
break;
|
|
72
|
-
|
|
73
69
|
case 2:
|
|
74
70
|
// PVRTC 4bpp RGB
|
|
75
71
|
bpp = 4;
|
|
76
72
|
format = THREE.RGB_PVRTC_4BPPV1_Format;
|
|
77
73
|
break;
|
|
78
|
-
|
|
79
74
|
case 3:
|
|
80
75
|
// PVRTC 4bpp RGBA
|
|
81
76
|
bpp = 4;
|
|
82
77
|
format = THREE.RGBA_PVRTC_4BPPV1_Format;
|
|
83
78
|
break;
|
|
84
|
-
|
|
85
79
|
default:
|
|
86
80
|
console.error( 'THREE.PVRLoader: Unsupported PVR format:', pixelFormat );
|
|
87
81
|
|
|
@@ -120,9 +114,7 @@
|
|
|
120
114
|
PVRTC_4 = 25;
|
|
121
115
|
const formatFlags = flags & TYPE_MASK;
|
|
122
116
|
let bpp, format;
|
|
123
|
-
|
|
124
117
|
const _hasAlpha = bitmaskAlpha > 0;
|
|
125
|
-
|
|
126
118
|
if ( formatFlags === PVRTC_4 ) {
|
|
127
119
|
|
|
128
120
|
format = _hasAlpha ? THREE.RGBA_PVRTC_4BPPV1_Format : THREE.RGB_PVRTC_4BPPV1_Format;
|
|
@@ -145,9 +137,10 @@
|
|
|
145
137
|
pvrDatas.width = width;
|
|
146
138
|
pvrDatas.height = height;
|
|
147
139
|
pvrDatas.numSurfaces = numSurfs;
|
|
148
|
-
pvrDatas.numMipmaps = numMipmaps + 1;
|
|
149
|
-
// it juste a pvr containing 6 surface (no explicit cubemap type)
|
|
140
|
+
pvrDatas.numMipmaps = numMipmaps + 1;
|
|
150
141
|
|
|
142
|
+
// guess cubemap type seems tricky in v2
|
|
143
|
+
// it juste a pvr containing 6 surface (no explicit cubemap type)
|
|
151
144
|
pvrDatas.isCubemap = numSurfs === 6;
|
|
152
145
|
return _extract( pvrDatas );
|
|
153
146
|
|
|
@@ -173,7 +166,6 @@
|
|
|
173
166
|
heightBlocks = 0;
|
|
174
167
|
const bpp = pvrDatas.bpp,
|
|
175
168
|
numSurfs = pvrDatas.numSurfaces;
|
|
176
|
-
|
|
177
169
|
if ( bpp === 2 ) {
|
|
178
170
|
|
|
179
171
|
blockWidth = 8;
|
|
@@ -189,18 +181,17 @@
|
|
|
189
181
|
blockSize = blockWidth * blockHeight * bpp / 8;
|
|
190
182
|
pvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs;
|
|
191
183
|
let mipLevel = 0;
|
|
192
|
-
|
|
193
184
|
while ( mipLevel < pvrDatas.numMipmaps ) {
|
|
194
185
|
|
|
195
186
|
const sWidth = pvrDatas.width >> mipLevel,
|
|
196
187
|
sHeight = pvrDatas.height >> mipLevel;
|
|
197
188
|
widthBlocks = sWidth / blockWidth;
|
|
198
|
-
heightBlocks = sHeight / blockHeight;
|
|
189
|
+
heightBlocks = sHeight / blockHeight;
|
|
199
190
|
|
|
191
|
+
// Clamp to minimum number of blocks
|
|
200
192
|
if ( widthBlocks < 2 ) widthBlocks = 2;
|
|
201
193
|
if ( heightBlocks < 2 ) heightBlocks = 2;
|
|
202
194
|
dataSize = widthBlocks * heightBlocks * blockSize;
|
|
203
|
-
|
|
204
195
|
for ( let surfIndex = 0; surfIndex < numSurfs; surfIndex ++ ) {
|
|
205
196
|
|
|
206
197
|
const byteArray = new Uint8Array( buffer, dataOffset, dataSize );
|