super-three 0.144.0 → 0.147.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 +737 -388
- package/build/three.js +737 -388
- package/build/three.min.js +1 -1
- package/build/three.module.js +911 -409
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +50 -67
- 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 +125 -99
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +85 -170
- 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 +141 -317
- 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 +113 -27
- 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 +25 -39
- package/examples/js/interactive/InteractiveGroup.js +9 -14
- 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 +40 -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 +228 -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 +287 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +409 -706
- 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/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 +62 -48
- 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 +185 -141
- 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 +26 -16
- 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/RenderPixelatedPass.js +215 -0
- 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 -8
- 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 +236 -170
- 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 +27 -3
- package/examples/jsm/animation/MMDPhysics.js +25 -0
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/FirstPersonControls.js +20 -20
- package/examples/jsm/controls/FlyControls.js +16 -17
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/controls/TrackballControls.js +14 -2
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/csm/CSM.js +1 -0
- package/examples/jsm/csm/CSMHelper.js +30 -0
- package/examples/jsm/exporters/GLTFExporter.js +0 -79
- package/examples/jsm/exporters/USDZExporter.js +93 -1
- package/examples/jsm/helpers/OctreeHelper.js +22 -8
- package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
- package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
- package/examples/jsm/helpers/ViewHelper.js +24 -0
- package/examples/jsm/interactive/HTMLMesh.js +5 -6
- package/examples/jsm/interactive/InteractiveGroup.js +4 -2
- package/examples/jsm/libs/flow.module.js +610 -160
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/lines/LineSegments2.js +4 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +18 -2
- package/examples/jsm/loaders/GLTFLoader.js +269 -428
- 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 +351 -111
- package/examples/jsm/loaders/VRMLLoader.js +13 -1
- package/examples/jsm/math/ConvexHull.js +4 -4
- package/examples/jsm/math/Octree.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +91 -12
- package/examples/jsm/node-editor/core/BaseNode.js +10 -3
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
- package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
- package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
- package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
- package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
- package/examples/jsm/nodes/Nodes.js +30 -3
- package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
- 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 +8 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
- package/examples/jsm/nodes/core/AttributeNode.js +31 -8
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
- 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/BlendModeNode.js +85 -0
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
- package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
- 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/{Disclaimer.md → DISCLAIMER.md} +1 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
- package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
- package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -5
- package/examples/jsm/nodes/math/OperatorNode.js +16 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
- package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
- 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/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +34 -0
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +21 -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 +21 -1
- 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 +56 -35
- 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 +41 -9
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
- package/package.json +13 -13
- package/src/Three.js +1 -0
- package/src/animation/PropertyBinding.js +7 -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/core/InterleavedBufferAttribute.js +4 -4
- package/src/extras/Earcut.js +67 -67
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +9 -0
- package/src/helpers/Box3Helper.js +7 -0
- package/src/helpers/BoxHelper.js +7 -1
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/GridHelper.js +7 -0
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PlaneHelper.js +9 -0
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/PolarGridHelper.js +7 -0
- package/src/helpers/SkeletonHelper.js +7 -0
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/LightShadow.js +1 -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/materials/MeshPhysicalMaterial.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 +36 -21
- 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/normal_fragment_begin.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
- 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/vsm.glsl.js +0 -3
- 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 +78 -41
- package/src/renderers/webgl/WebGLTextures.js +94 -39
- package/src/renderers/webgl/WebGLUniforms.js +152 -24
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +71 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/src/textures/Texture.js +2 -1
- 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
|
|
|
@@ -24,19 +24,28 @@
|
|
|
24
24
|
* diffuse_blue: 'blue'
|
|
25
25
|
* } );
|
|
26
26
|
*
|
|
27
|
+
* Custom properties outside of the defaults for position, uv, normal
|
|
28
|
+
* and color attributes can be added using the setCustomPropertyMapping method.
|
|
29
|
+
* For example, the following maps the element properties “custom_property_a”
|
|
30
|
+
* and “custom_property_b” to an attribute “customAttribute” with an item size of 2.
|
|
31
|
+
* Attribute item sizes are set from the number of element properties in the property array.
|
|
32
|
+
*
|
|
33
|
+
* loader.setCustomPropertyMapping( {
|
|
34
|
+
* customAttribute: ['custom_property_a', 'custom_property_b'],
|
|
35
|
+
* } );
|
|
36
|
+
*
|
|
27
37
|
*/
|
|
28
38
|
|
|
29
39
|
const _color = new THREE.Color();
|
|
30
|
-
|
|
31
40
|
class PLYLoader extends THREE.Loader {
|
|
32
41
|
|
|
33
42
|
constructor( manager ) {
|
|
34
43
|
|
|
35
44
|
super( manager );
|
|
36
45
|
this.propertyNameMapping = {};
|
|
46
|
+
this.customPropertyMapping = {};
|
|
37
47
|
|
|
38
48
|
}
|
|
39
|
-
|
|
40
49
|
load( url, onLoad, onProgress, onError ) {
|
|
41
50
|
|
|
42
51
|
const scope = this;
|
|
@@ -70,13 +79,16 @@
|
|
|
70
79
|
}, onProgress, onError );
|
|
71
80
|
|
|
72
81
|
}
|
|
73
|
-
|
|
74
82
|
setPropertyNameMapping( mapping ) {
|
|
75
83
|
|
|
76
84
|
this.propertyNameMapping = mapping;
|
|
77
85
|
|
|
78
86
|
}
|
|
87
|
+
setCustomPropertyNameMapping( mapping ) {
|
|
88
|
+
|
|
89
|
+
this.customPropertyMapping = mapping;
|
|
79
90
|
|
|
91
|
+
}
|
|
80
92
|
parse( data ) {
|
|
81
93
|
|
|
82
94
|
function parseHeader( data ) {
|
|
@@ -85,7 +97,6 @@
|
|
|
85
97
|
let headerText = '';
|
|
86
98
|
let headerLength = 0;
|
|
87
99
|
const result = patternHeader.exec( data );
|
|
88
|
-
|
|
89
100
|
if ( result !== null ) {
|
|
90
101
|
|
|
91
102
|
headerText = result[ 1 ];
|
|
@@ -101,13 +112,11 @@
|
|
|
101
112
|
};
|
|
102
113
|
const lines = headerText.split( /\r\n|\r|\n/ );
|
|
103
114
|
let currentElement;
|
|
104
|
-
|
|
105
115
|
function make_ply_element_property( propertValues, propertyNameMapping ) {
|
|
106
116
|
|
|
107
117
|
const property = {
|
|
108
118
|
type: propertValues[ 0 ]
|
|
109
119
|
};
|
|
110
|
-
|
|
111
120
|
if ( property.type === 'list' ) {
|
|
112
121
|
|
|
113
122
|
property.name = propertValues[ 3 ];
|
|
@@ -138,18 +147,15 @@
|
|
|
138
147
|
const lineValues = line.split( /\s+/ );
|
|
139
148
|
const lineType = lineValues.shift();
|
|
140
149
|
line = lineValues.join( ' ' );
|
|
141
|
-
|
|
142
150
|
switch ( lineType ) {
|
|
143
151
|
|
|
144
152
|
case 'format':
|
|
145
153
|
header.format = lineValues[ 0 ];
|
|
146
154
|
header.version = lineValues[ 1 ];
|
|
147
155
|
break;
|
|
148
|
-
|
|
149
156
|
case 'comment':
|
|
150
157
|
header.comments.push( line );
|
|
151
158
|
break;
|
|
152
|
-
|
|
153
159
|
case 'element':
|
|
154
160
|
if ( currentElement !== undefined ) {
|
|
155
161
|
|
|
@@ -162,15 +168,12 @@
|
|
|
162
168
|
currentElement.count = parseInt( lineValues[ 1 ] );
|
|
163
169
|
currentElement.properties = [];
|
|
164
170
|
break;
|
|
165
|
-
|
|
166
171
|
case 'property':
|
|
167
172
|
currentElement.properties.push( make_ply_element_property( lineValues, scope.propertyNameMapping ) );
|
|
168
173
|
break;
|
|
169
|
-
|
|
170
174
|
case 'obj_info':
|
|
171
175
|
header.objInfo = line;
|
|
172
176
|
break;
|
|
173
|
-
|
|
174
177
|
default:
|
|
175
178
|
console.log( 'unhandled', lineType, lineValues );
|
|
176
179
|
|
|
@@ -205,7 +208,6 @@
|
|
|
205
208
|
case 'int32':
|
|
206
209
|
case 'uint32':
|
|
207
210
|
return parseInt( n );
|
|
208
|
-
|
|
209
211
|
case 'float':
|
|
210
212
|
case 'double':
|
|
211
213
|
case 'float32':
|
|
@@ -220,14 +222,12 @@
|
|
|
220
222
|
|
|
221
223
|
const values = line.split( /\s+/ );
|
|
222
224
|
const element = {};
|
|
223
|
-
|
|
224
225
|
for ( let i = 0; i < properties.length; i ++ ) {
|
|
225
226
|
|
|
226
227
|
if ( properties[ i ].type === 'list' ) {
|
|
227
228
|
|
|
228
229
|
const list = [];
|
|
229
230
|
const n = parseASCIINumber( values.shift(), properties[ i ].countType );
|
|
230
|
-
|
|
231
231
|
for ( let j = 0; j < n; j ++ ) {
|
|
232
232
|
|
|
233
233
|
list.push( parseASCIINumber( values.shift(), properties[ i ].itemType ) );
|
|
@@ -248,9 +248,8 @@
|
|
|
248
248
|
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
function
|
|
251
|
+
function createBuffer() {
|
|
252
252
|
|
|
253
|
-
// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
|
|
254
253
|
const buffer = {
|
|
255
254
|
indices: [],
|
|
256
255
|
vertices: [],
|
|
@@ -259,10 +258,24 @@
|
|
|
259
258
|
faceVertexUvs: [],
|
|
260
259
|
colors: []
|
|
261
260
|
};
|
|
261
|
+
for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
|
|
262
|
+
|
|
263
|
+
buffer[ customProperty ] = [];
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return buffer;
|
|
268
|
+
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function parseASCII( data, header ) {
|
|
272
|
+
|
|
273
|
+
// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
|
|
274
|
+
|
|
275
|
+
const buffer = createBuffer();
|
|
262
276
|
let result;
|
|
263
277
|
const patternBody = /end_header\s([\s\S]*)$/;
|
|
264
278
|
let body = '';
|
|
265
|
-
|
|
266
279
|
if ( ( result = patternBody.exec( data ) ) !== null ) {
|
|
267
280
|
|
|
268
281
|
body = result[ 1 ];
|
|
@@ -272,12 +285,10 @@
|
|
|
272
285
|
const lines = body.split( /\r\n|\r|\n/ );
|
|
273
286
|
let currentElement = 0;
|
|
274
287
|
let currentElementCount = 0;
|
|
275
|
-
|
|
276
288
|
for ( let i = 0; i < lines.length; i ++ ) {
|
|
277
289
|
|
|
278
290
|
let line = lines[ i ];
|
|
279
291
|
line = line.trim();
|
|
280
|
-
|
|
281
292
|
if ( line === '' ) {
|
|
282
293
|
|
|
283
294
|
continue;
|
|
@@ -303,7 +314,9 @@
|
|
|
303
314
|
|
|
304
315
|
function postProcess( buffer ) {
|
|
305
316
|
|
|
306
|
-
let geometry = new THREE.BufferGeometry();
|
|
317
|
+
let geometry = new THREE.BufferGeometry();
|
|
318
|
+
|
|
319
|
+
// mandatory buffer data
|
|
307
320
|
|
|
308
321
|
if ( buffer.indices.length > 0 ) {
|
|
309
322
|
|
|
@@ -311,7 +324,9 @@
|
|
|
311
324
|
|
|
312
325
|
}
|
|
313
326
|
|
|
314
|
-
geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( buffer.vertices, 3 ) );
|
|
327
|
+
geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( buffer.vertices, 3 ) );
|
|
328
|
+
|
|
329
|
+
// optional buffer data
|
|
315
330
|
|
|
316
331
|
if ( buffer.normals.length > 0 ) {
|
|
317
332
|
|
|
@@ -338,6 +353,18 @@
|
|
|
338
353
|
|
|
339
354
|
}
|
|
340
355
|
|
|
356
|
+
// custom buffer data
|
|
357
|
+
|
|
358
|
+
for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
|
|
359
|
+
|
|
360
|
+
if ( buffer[ customProperty ].length > 0 ) {
|
|
361
|
+
|
|
362
|
+
geometry.setAttribute( customProperty, new THREE.Float32BufferAttribute( buffer[ customProperty ], scope.customPropertyMapping[ customProperty ].length ) );
|
|
363
|
+
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
}
|
|
367
|
+
|
|
341
368
|
geometry.computeBoundingSphere();
|
|
342
369
|
return geometry;
|
|
343
370
|
|
|
@@ -369,11 +396,9 @@
|
|
|
369
396
|
const attrR = findAttrName( [ 'red', 'diffuse_red', 'r', 'diffuse_r' ] );
|
|
370
397
|
const attrG = findAttrName( [ 'green', 'diffuse_green', 'g', 'diffuse_g' ] );
|
|
371
398
|
const attrB = findAttrName( [ 'blue', 'diffuse_blue', 'b', 'diffuse_b' ] );
|
|
372
|
-
|
|
373
399
|
if ( elementName === 'vertex' ) {
|
|
374
400
|
|
|
375
401
|
buffer.vertices.push( element[ attrX ], element[ attrY ], element[ attrZ ] );
|
|
376
|
-
|
|
377
402
|
if ( attrNX !== null && attrNY !== null && attrNZ !== null ) {
|
|
378
403
|
|
|
379
404
|
buffer.normals.push( element[ attrNX ], element[ attrNY ], element[ attrNZ ] );
|
|
@@ -389,21 +414,27 @@
|
|
|
389
414
|
if ( attrR !== null && attrG !== null && attrB !== null ) {
|
|
390
415
|
|
|
391
416
|
_color.setRGB( element[ attrR ] / 255.0, element[ attrG ] / 255.0, element[ attrB ] / 255.0 ).convertSRGBToLinear();
|
|
392
|
-
|
|
393
417
|
buffer.colors.push( _color.r, _color.g, _color.b );
|
|
394
418
|
|
|
395
419
|
}
|
|
396
420
|
|
|
421
|
+
for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
|
|
422
|
+
|
|
423
|
+
for ( const elementProperty of scope.customPropertyMapping[ customProperty ] ) {
|
|
424
|
+
|
|
425
|
+
buffer[ customProperty ].push( element[ elementProperty ] );
|
|
426
|
+
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
}
|
|
430
|
+
|
|
397
431
|
} else if ( elementName === 'face' ) {
|
|
398
432
|
|
|
399
433
|
const vertex_indices = element.vertex_indices || element.vertex_index; // issue #9338
|
|
400
|
-
|
|
401
434
|
const texcoord = element.texcoord;
|
|
402
|
-
|
|
403
435
|
if ( vertex_indices.length === 3 ) {
|
|
404
436
|
|
|
405
437
|
buffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 2 ] );
|
|
406
|
-
|
|
407
438
|
if ( texcoord && texcoord.length === 6 ) {
|
|
408
439
|
|
|
409
440
|
buffer.faceVertexUvs.push( texcoord[ 0 ], texcoord[ 1 ] );
|
|
@@ -431,31 +462,24 @@
|
|
|
431
462
|
case 'int8':
|
|
432
463
|
case 'char':
|
|
433
464
|
return [ dataview.getInt8( at ), 1 ];
|
|
434
|
-
|
|
435
465
|
case 'uint8':
|
|
436
466
|
case 'uchar':
|
|
437
467
|
return [ dataview.getUint8( at ), 1 ];
|
|
438
|
-
|
|
439
468
|
case 'int16':
|
|
440
469
|
case 'short':
|
|
441
470
|
return [ dataview.getInt16( at, little_endian ), 2 ];
|
|
442
|
-
|
|
443
471
|
case 'uint16':
|
|
444
472
|
case 'ushort':
|
|
445
473
|
return [ dataview.getUint16( at, little_endian ), 2 ];
|
|
446
|
-
|
|
447
474
|
case 'int32':
|
|
448
475
|
case 'int':
|
|
449
476
|
return [ dataview.getInt32( at, little_endian ), 4 ];
|
|
450
|
-
|
|
451
477
|
case 'uint32':
|
|
452
478
|
case 'uint':
|
|
453
479
|
return [ dataview.getUint32( at, little_endian ), 4 ];
|
|
454
|
-
|
|
455
480
|
case 'float32':
|
|
456
481
|
case 'float':
|
|
457
482
|
return [ dataview.getFloat32( at, little_endian ), 4 ];
|
|
458
|
-
|
|
459
483
|
case 'float64':
|
|
460
484
|
case 'double':
|
|
461
485
|
return [ dataview.getFloat64( at, little_endian ), 8 ];
|
|
@@ -469,7 +493,6 @@
|
|
|
469
493
|
const element = {};
|
|
470
494
|
let result,
|
|
471
495
|
read = 0;
|
|
472
|
-
|
|
473
496
|
for ( let i = 0; i < properties.length; i ++ ) {
|
|
474
497
|
|
|
475
498
|
if ( properties[ i ].type === 'list' ) {
|
|
@@ -478,7 +501,6 @@
|
|
|
478
501
|
result = binaryRead( dataview, at + read, properties[ i ].countType, little_endian );
|
|
479
502
|
const n = result[ 0 ];
|
|
480
503
|
read += result[ 1 ];
|
|
481
|
-
|
|
482
504
|
for ( let j = 0; j < n; j ++ ) {
|
|
483
505
|
|
|
484
506
|
result = binaryRead( dataview, at + read, properties[ i ].itemType, little_endian );
|
|
@@ -505,19 +527,11 @@
|
|
|
505
527
|
|
|
506
528
|
function parseBinary( data, header ) {
|
|
507
529
|
|
|
508
|
-
const buffer =
|
|
509
|
-
indices: [],
|
|
510
|
-
vertices: [],
|
|
511
|
-
normals: [],
|
|
512
|
-
uvs: [],
|
|
513
|
-
faceVertexUvs: [],
|
|
514
|
-
colors: []
|
|
515
|
-
};
|
|
530
|
+
const buffer = createBuffer();
|
|
516
531
|
const little_endian = header.format === 'binary_little_endian';
|
|
517
532
|
const body = new DataView( data, header.headerLength );
|
|
518
533
|
let result,
|
|
519
534
|
loc = 0;
|
|
520
|
-
|
|
521
535
|
for ( let currentElement = 0; currentElement < header.elements.length; currentElement ++ ) {
|
|
522
536
|
|
|
523
537
|
for ( let currentElementCount = 0; currentElementCount < header.elements[ currentElement ].count; currentElementCount ++ ) {
|
|
@@ -533,12 +547,12 @@
|
|
|
533
547
|
|
|
534
548
|
return postProcess( buffer );
|
|
535
549
|
|
|
536
|
-
}
|
|
550
|
+
}
|
|
537
551
|
|
|
552
|
+
//
|
|
538
553
|
|
|
539
554
|
let geometry;
|
|
540
555
|
const scope = this;
|
|
541
|
-
|
|
542
556
|
if ( data instanceof ArrayBuffer ) {
|
|
543
557
|
|
|
544
558
|
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 );
|