three-stdlib 2.15.0 → 2.15.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/animation/AnimationClipCreator.js +32 -52
- package/animation/AnimationClipCreator.mjs +57 -0
- package/animation/CCDIKSolver.js +66 -161
- package/animation/CCDIKSolver.mjs +234 -0
- package/animation/MMDAnimationHelper.js +150 -341
- package/animation/MMDAnimationHelper.mjs +514 -0
- package/animation/MMDPhysics.js +154 -361
- package/animation/MMDPhysics.mjs +769 -0
- package/cameras/CinematicCamera.js +67 -77
- package/cameras/CinematicCamera.mjs +129 -0
- package/controls/ArcballControls.js +544 -1449
- package/controls/ArcballControls.mjs +1737 -0
- package/controls/DeviceOrientationControls.js +52 -97
- package/controls/DeviceOrientationControls.mjs +74 -0
- package/controls/DragControls.js +85 -187
- package/controls/DragControls.mjs +172 -0
- package/controls/FirstPersonControls.js +123 -193
- package/controls/FirstPersonControls.mjs +220 -0
- package/controls/FlyControls.js +82 -152
- package/controls/FlyControls.mjs +239 -0
- package/controls/OrbitControls.js +232 -481
- package/controls/OrbitControls.mjs +731 -0
- package/controls/PointerLockControls.js +63 -99
- package/controls/PointerLockControls.mjs +88 -0
- package/controls/TrackballControls.js +211 -383
- package/controls/TrackballControls.mjs +481 -0
- package/controls/TransformControls.js +575 -782
- package/controls/TransformControls.mjs +1068 -0
- package/controls/experimental/CameraControls.js +329 -609
- package/controls/experimental/CameraControls.mjs +673 -0
- package/csm/CSM.js +47 -108
- package/csm/CSM.mjs +244 -0
- package/csm/CSMFrustum.js +14 -29
- package/csm/CSMFrustum.mjs +75 -0
- package/csm/CSMHelper.js +20 -34
- package/csm/CSMHelper.mjs +114 -0
- package/csm/CSMShader.js +7 -11
- package/csm/CSMShader.mjs +251 -0
- package/curves/CurveExtras.js +73 -115
- package/curves/CurveExtras.mjs +224 -0
- package/curves/NURBSCurve.js +15 -43
- package/curves/NURBSCurve.mjs +35 -0
- package/curves/NURBSSurface.js +11 -27
- package/curves/NURBSSurface.mjs +28 -0
- package/curves/NURBSUtils.js +54 -203
- package/curves/NURBSUtils.mjs +226 -0
- package/deprecated/Geometry.js +191 -486
- package/deprecated/Geometry.mjs +966 -0
- package/effects/AnaglyphEffect.js +95 -60
- package/effects/AnaglyphEffect.mjs +120 -0
- package/effects/AsciiEffect.js +80 -110
- package/effects/AsciiEffect.mjs +173 -0
- package/effects/OutlineEffect.js +121 -204
- package/effects/OutlineEffect.mjs +295 -0
- package/effects/ParallaxBarrierEffect.js +39 -38
- package/effects/ParallaxBarrierEffect.mjs +64 -0
- package/effects/PeppersGhostEffect.js +19 -68
- package/effects/PeppersGhostEffect.mjs +85 -0
- package/effects/StereoEffect.js +12 -16
- package/effects/StereoEffect.mjs +32 -0
- package/environments/RoomEnvironment.js +52 -47
- package/environments/RoomEnvironment.mjs +78 -0
- package/exporters/ColladaExporter.js +115 -241
- package/exporters/ColladaExporter.mjs +299 -0
- package/exporters/DRACOExporter.js +67 -121
- package/exporters/DRACOExporter.mjs +132 -0
- package/exporters/GLTFExporter.js +463 -1014
- package/exporters/GLTFExporter.mjs +1381 -0
- package/exporters/MMDExporter.js +44 -102
- package/exporters/MMDExporter.mjs +102 -0
- package/exporters/OBJExporter.js +78 -140
- package/exporters/OBJExporter.mjs +166 -0
- package/exporters/PLYExporter.js +93 -154
- package/exporters/PLYExporter.mjs +278 -0
- package/exporters/STLExporter.js +30 -81
- package/exporters/STLExporter.mjs +129 -0
- package/exporters/USDZExporter.js +84 -144
- package/exporters/USDZExporter.mjs +328 -0
- package/geometries/BoxLineGeometry.js +7 -14
- package/geometries/BoxLineGeometry.mjs +45 -0
- package/geometries/ConvexGeometry.js +15 -24
- package/geometries/ConvexGeometry.mjs +29 -0
- package/geometries/DecalGeometry.js +108 -162
- package/geometries/DecalGeometry.mjs +184 -0
- package/geometries/LightningStrike.js +101 -294
- package/geometries/LightningStrike.mjs +547 -0
- package/geometries/ParametricGeometries.js +26 -76
- package/geometries/ParametricGeometries.mjs +129 -0
- package/geometries/ParametricGeometry.js +24 -48
- package/geometries/ParametricGeometry.mjs +63 -0
- package/geometries/RoundedBoxGeometry.js +33 -64
- package/geometries/RoundedBoxGeometry.mjs +91 -0
- package/geometries/TeapotGeometry.js +1434 -174
- package/geometries/TeapotGeometry.mjs +1557 -0
- package/geometries/TextGeometry.js +9 -17
- package/geometries/TextGeometry.mjs +23 -0
- package/helpers/LightProbeHelper.js +53 -21
- package/helpers/LightProbeHelper.mjs +72 -0
- package/helpers/PositionalAudioHelper.js +23 -30
- package/helpers/PositionalAudioHelper.mjs +68 -0
- package/helpers/RectAreaLightHelper.js +17 -33
- package/helpers/RectAreaLightHelper.mjs +44 -0
- package/helpers/VertexNormalsHelper.js +20 -41
- package/helpers/VertexNormalsHelper.mjs +54 -0
- package/helpers/VertexTangentsHelper.js +18 -36
- package/helpers/VertexTangentsHelper.mjs +45 -0
- package/index.d.ts +54 -0
- package/index.js +968 -333
- package/index.mjs +968 -0
- package/interactive/SelectionBox.js +31 -46
- package/interactive/SelectionBox.mjs +137 -0
- package/interactive/SelectionHelper.js +16 -21
- package/interactive/SelectionHelper.mjs +54 -0
- package/libs/MeshoptDecoder.js +147 -58
- package/libs/MeshoptDecoder.mjs +210 -0
- package/libs/MotionControllers.js +66 -208
- package/libs/MotionControllers.mjs +261 -0
- package/lights/LightProbeGenerator.js +40 -96
- package/lights/LightProbeGenerator.mjs +145 -0
- package/lights/RectAreaLightUniformsLib.js +32842 -9
- package/lights/RectAreaLightUniformsLib.mjs +32842 -0
- package/lines/Line2.js +9 -12
- package/lines/Line2.mjs +13 -0
- package/lines/LineGeometry.js +7 -19
- package/lines/LineGeometry.mjs +44 -0
- package/lines/LineMaterial.js +51 -89
- package/lines/LineMaterial.mjs +539 -0
- package/lines/LineSegments2.js +56 -165
- package/lines/LineSegments2.mjs +202 -0
- package/lines/LineSegmentsGeometry.js +29 -71
- package/lines/LineSegmentsGeometry.mjs +124 -0
- package/lines/Wireframe.js +15 -29
- package/lines/Wireframe.mjs +31 -0
- package/lines/WireframeGeometry2.js +8 -9
- package/lines/WireframeGeometry2.mjs +13 -0
- package/loaders/3DMLoader.js +234 -469
- package/loaders/3DMLoader.mjs +802 -0
- package/loaders/3MFLoader.js +340 -555
- package/loaders/3MFLoader.mjs +837 -0
- package/loaders/AMFLoader.js +114 -219
- package/loaders/AMFLoader.mjs +284 -0
- package/loaders/AssimpLoader.js +328 -725
- package/loaders/AssimpLoader.mjs +1396 -0
- package/loaders/BVHLoader.js +94 -200
- package/loaders/BVHLoader.mjs +207 -0
- package/loaders/BasisTextureLoader.js +229 -357
- package/loaders/BasisTextureLoader.mjs +474 -0
- package/loaders/ColladaLoader.js +932 -1522
- package/loaders/ColladaLoader.mjs +2403 -0
- package/loaders/DDSLoader.js +42 -108
- package/loaders/DDSLoader.mjs +148 -0
- package/loaders/DRACOLoader.js +103 -210
- package/loaders/DRACOLoader.mjs +340 -0
- package/loaders/EXRLoader.js +461 -809
- package/loaders/EXRLoader.mjs +1351 -0
- package/loaders/FBXLoader.js +842 -1397
- package/loaders/FBXLoader.mjs +2362 -0
- package/loaders/FontLoader.js +33 -66
- package/loaders/FontLoader.mjs +111 -0
- package/loaders/GCodeLoader.js +63 -111
- package/loaders/GCodeLoader.mjs +141 -0
- package/loaders/GLTFLoader.js +771 -1484
- package/loaders/GLTFLoader.mjs +2316 -0
- package/loaders/HDRCubeTextureLoader.js +45 -50
- package/loaders/HDRCubeTextureLoader.mjs +77 -0
- package/loaders/KMZLoader.js +42 -55
- package/loaders/KMZLoader.mjs +75 -0
- package/loaders/KTX2Loader.js +229 -362
- package/loaders/KTX2Loader.mjs +427 -0
- package/loaders/KTXLoader.js +37 -99
- package/loaders/KTXLoader.mjs +87 -0
- package/loaders/LDrawLoader.js +313 -746
- package/loaders/LDrawLoader.mjs +1409 -0
- package/loaders/LUT3dlLoader.js +50 -62
- package/loaders/LUT3dlLoader.mjs +100 -0
- package/loaders/LUTCubeLoader.js +45 -56
- package/loaders/LUTCubeLoader.mjs +104 -0
- package/loaders/LWOLoader.js +227 -339
- package/loaders/LWOLoader.mjs +625 -0
- package/loaders/LottieLoader.js +36 -38
- package/loaders/LottieLoader.mjs +47 -0
- package/loaders/MD2Loader.js +248 -91
- package/loaders/MD2Loader.mjs +359 -0
- package/loaders/MDDLoader.js +25 -45
- package/loaders/MDDLoader.mjs +58 -0
- package/loaders/MMDLoader.js +359 -795
- package/loaders/MMDLoader.mjs +998 -0
- package/loaders/MTLLoader.js +91 -201
- package/loaders/MTLLoader.mjs +280 -0
- package/loaders/NRRDLoader.js +182 -263
- package/loaders/NRRDLoader.mjs +401 -0
- package/loaders/NodeMaterialLoader.js +121 -14
- package/loaders/NodeMaterialLoader.mjs +146 -0
- package/loaders/OBJLoader.js +161 -283
- package/loaders/OBJLoader.mjs +487 -0
- package/loaders/PCDLoader.js +145 -164
- package/loaders/PCDLoader.mjs +248 -0
- package/loaders/PDBLoader.js +45 -63
- package/loaders/PDBLoader.mjs +246 -0
- package/loaders/PLYLoader.js +106 -203
- package/loaders/PLYLoader.mjs +317 -0
- package/loaders/PRWMLoader.js +73 -110
- package/loaders/PRWMLoader.mjs +160 -0
- package/loaders/PVRLoader.js +32 -93
- package/loaders/PVRLoader.mjs +131 -0
- package/loaders/RGBELoader.js +96 -233
- package/loaders/RGBELoader.mjs +244 -0
- package/loaders/RGBMLoader.js +344 -514
- package/loaders/RGBMLoader.mjs +998 -0
- package/loaders/STLLoader.js +59 -165
- package/loaders/STLLoader.mjs +190 -0
- package/loaders/SVGLoader.js +481 -851
- package/loaders/SVGLoader.mjs +1709 -0
- package/loaders/TDSLoader.js +137 -527
- package/loaders/TDSLoader.mjs +480 -0
- package/loaders/TGALoader.js +94 -205
- package/loaders/TGALoader.mjs +285 -0
- package/loaders/TTFLoader.js +58 -79
- package/loaders/TTFLoader.mjs +131 -0
- package/loaders/TiltLoader.js +129 -167
- package/loaders/TiltLoader.mjs +373 -0
- package/loaders/VOXLoader.js +320 -84
- package/loaders/VOXLoader.mjs +431 -0
- package/loaders/VRMLLoader.js +786 -1268
- package/loaders/VRMLLoader.mjs +2093 -0
- package/loaders/VRMLoader.js +23 -31
- package/loaders/VRMLoader.mjs +38 -0
- package/loaders/VTKLoader.js +219 -407
- package/loaders/VTKLoader.mjs +646 -0
- package/loaders/XLoader.js +1083 -1259
- package/loaders/XLoader.mjs +1258 -0
- package/loaders/XYZLoader.js +28 -34
- package/loaders/XYZLoader.mjs +60 -0
- package/loaders/lwo/IFFParser.js +238 -492
- package/loaders/lwo/IFFParser.mjs +697 -0
- package/loaders/lwo/LWO2Parser.js +176 -279
- package/loaders/lwo/LWO2Parser.mjs +327 -0
- package/loaders/lwo/LWO3Parser.js +160 -247
- package/loaders/lwo/LWO3Parser.mjs +298 -0
- package/math/Capsule.js +56 -43
- package/math/Capsule.mjs +100 -0
- package/math/ColorConverter.js +18 -32
- package/math/ColorConverter.mjs +51 -0
- package/math/ConvexHull.js +515 -739
- package/math/ConvexHull.mjs +574 -0
- package/math/ImprovedNoise.js +282 -32
- package/math/ImprovedNoise.mjs +302 -0
- package/math/Lut.js +51 -35
- package/math/Lut.mjs +135 -0
- package/math/MeshSurfaceSampler.js +25 -68
- package/math/MeshSurfaceSampler.mjs +107 -0
- package/math/OBB.js +91 -152
- package/math/OBB.mjs +235 -0
- package/math/Octree.js +76 -139
- package/math/Octree.mjs +278 -0
- package/math/SimplexNoise.js +217 -238
- package/math/SimplexNoise.mjs +425 -0
- package/misc/ConvexObjectBreaker.js +79 -185
- package/misc/ConvexObjectBreaker.mjs +292 -0
- package/misc/GPUComputationRenderer.js +69 -194
- package/misc/GPUComputationRenderer.mjs +171 -0
- package/misc/Gyroscope.js +16 -22
- package/misc/Gyroscope.mjs +35 -0
- package/misc/MD2Character.js +52 -74
- package/misc/MD2Character.mjs +162 -0
- package/misc/MD2CharacterComplex.js +112 -163
- package/misc/MD2CharacterComplex.mjs +328 -0
- package/misc/MorphAnimMesh.js +20 -28
- package/misc/MorphAnimMesh.mjs +40 -0
- package/misc/MorphBlendMesh.js +45 -69
- package/misc/MorphBlendMesh.mjs +179 -0
- package/misc/ProgressiveLightmap.js +70 -187
- package/misc/ProgressiveLightmap.mjs +166 -0
- package/misc/RollerCoaster.js +106 -135
- package/misc/RollerCoaster.mjs +346 -0
- package/misc/TubePainter.js +74 -92
- package/misc/TubePainter.mjs +123 -0
- package/misc/Volume.js +108 -270
- package/misc/Volume.mjs +244 -0
- package/misc/VolumeSlice.js +34 -122
- package/misc/VolumeSlice.mjs +106 -0
- package/misc/WebGL.js +37 -34
- package/misc/WebGL.mjs +74 -0
- package/modifiers/CurveModifier.js +46 -151
- package/modifiers/CurveModifier.mjs +182 -0
- package/modifiers/EdgeSplitModifier.js +46 -90
- package/modifiers/EdgeSplitModifier.mjs +162 -0
- package/modifiers/SimplifyModifier.js +77 -202
- package/modifiers/SimplifyModifier.mjs +282 -0
- package/modifiers/TessellateModifier.js +65 -90
- package/modifiers/TessellateModifier.mjs +206 -0
- package/nodes/Nodes.js +274 -140
- package/nodes/Nodes.mjs +400 -0
- package/nodes/ShaderNode.js +296 -196
- package/nodes/ShaderNode.mjs +408 -0
- package/nodes/accessors/BufferNode.js +4 -8
- package/nodes/accessors/BufferNode.mjs +15 -0
- package/nodes/accessors/CameraNode.js +20 -25
- package/nodes/accessors/CameraNode.mjs +44 -0
- package/nodes/accessors/CubeTextureNode.js +14 -26
- package/nodes/accessors/CubeTextureNode.mjs +42 -0
- package/nodes/accessors/MaterialNode.js +43 -53
- package/nodes/accessors/MaterialNode.mjs +71 -0
- package/nodes/accessors/MaterialReferenceNode.js +3 -6
- package/nodes/accessors/MaterialReferenceNode.mjs +14 -0
- package/nodes/accessors/ModelNode.js +3 -5
- package/nodes/accessors/ModelNode.mjs +9 -0
- package/nodes/accessors/ModelViewProjectionNode.js +14 -13
- package/nodes/accessors/ModelViewProjectionNode.mjs +24 -0
- package/nodes/accessors/NormalNode.js +40 -39
- package/nodes/accessors/NormalNode.mjs +62 -0
- package/nodes/accessors/Object3DNode.js +40 -50
- package/nodes/accessors/Object3DNode.mjs +76 -0
- package/nodes/accessors/PointUVNode.js +5 -9
- package/nodes/accessors/PointUVNode.mjs +13 -0
- package/nodes/accessors/PositionNode.js +42 -41
- package/nodes/accessors/PositionNode.mjs +65 -0
- package/nodes/accessors/ReferenceNode.js +10 -17
- package/nodes/accessors/ReferenceNode.mjs +37 -0
- package/nodes/accessors/ReflectNode.js +23 -26
- package/nodes/accessors/ReflectNode.mjs +43 -0
- package/nodes/accessors/SkinningNode.js +46 -48
- package/nodes/accessors/SkinningNode.mjs +58 -0
- package/nodes/accessors/TextureNode.js +14 -29
- package/nodes/accessors/TextureNode.mjs +54 -0
- package/nodes/accessors/UVNode.js +5 -11
- package/nodes/accessors/UVNode.mjs +23 -0
- package/nodes/core/ArrayUniformNode.js +3 -7
- package/nodes/core/ArrayUniformNode.mjs +14 -0
- package/nodes/core/AttributeNode.js +5 -12
- package/nodes/core/AttributeNode.mjs +30 -0
- package/nodes/core/BypassNode.js +5 -12
- package/nodes/core/BypassNode.mjs +22 -0
- package/nodes/core/CodeNode.js +4 -12
- package/nodes/core/CodeNode.mjs +28 -0
- package/nodes/core/ConstNode.js +3 -7
- package/nodes/core/ConstNode.mjs +14 -0
- package/nodes/core/ContextNode.js +3 -8
- package/nodes/core/ContextNode.mjs +22 -0
- package/nodes/core/ExpressionNode.js +5 -9
- package/nodes/core/ExpressionNode.mjs +19 -0
- package/nodes/core/FunctionCallNode.js +6 -15
- package/nodes/core/FunctionCallNode.mjs +37 -0
- package/nodes/core/FunctionNode.js +10 -25
- package/nodes/core/FunctionNode.mjs +56 -0
- package/nodes/core/InputNode.js +12 -23
- package/nodes/core/InputNode.mjs +38 -0
- package/nodes/core/Node.js +35 -75
- package/nodes/core/Node.mjs +139 -0
- package/nodes/core/NodeAttribute.js +2 -4
- package/nodes/core/NodeAttribute.mjs +10 -0
- package/nodes/core/NodeBuilder.js +110 -224
- package/nodes/core/NodeBuilder.mjs +395 -0
- package/nodes/core/NodeCode.js +4 -7
- package/nodes/core/NodeCode.mjs +11 -0
- package/nodes/core/NodeFrame.js +9 -12
- package/nodes/core/NodeFrame.mjs +35 -0
- package/nodes/core/NodeFunctionInput.js +3 -5
- package/nodes/core/NodeFunctionInput.mjs +13 -0
- package/nodes/core/NodeKeywords.js +5 -16
- package/nodes/core/NodeKeywords.mjs +44 -0
- package/nodes/core/NodeUniform.js +3 -7
- package/nodes/core/NodeUniform.mjs +18 -0
- package/nodes/core/NodeUtils.js +39 -43
- package/nodes/core/NodeUtils.mjs +57 -0
- package/nodes/core/NodeVar.js +2 -4
- package/nodes/core/NodeVar.mjs +10 -0
- package/nodes/core/NodeVary.js +2 -4
- package/nodes/core/NodeVary.mjs +10 -0
- package/nodes/core/PropertyNode.js +4 -10
- package/nodes/core/PropertyNode.mjs +21 -0
- package/nodes/core/TempNode.js +5 -11
- package/nodes/core/TempNode.mjs +25 -0
- package/nodes/core/UniformNode.js +4 -10
- package/nodes/core/UniformNode.mjs +23 -0
- package/nodes/core/VarNode.js +3 -11
- package/nodes/core/VarNode.mjs +31 -0
- package/nodes/core/VaryNode.js +6 -15
- package/nodes/core/VaryNode.mjs +30 -0
- package/nodes/core/constants.js +20 -7
- package/nodes/core/constants.mjs +24 -0
- package/nodes/display/ColorSpaceNode.js +34 -38
- package/nodes/display/ColorSpaceNode.mjs +63 -0
- package/nodes/display/NormalMapNode.js +35 -53
- package/nodes/display/NormalMapNode.mjs +54 -0
- package/nodes/fog/FogNode.js +5 -9
- package/nodes/fog/FogNode.mjs +15 -0
- package/nodes/fog/FogRangeNode.js +5 -9
- package/nodes/fog/FogRangeNode.mjs +17 -0
- package/nodes/functions/BSDFs.js +61 -118
- package/nodes/functions/BSDFs.mjs +64 -0
- package/nodes/lights/LightContextNode.js +14 -23
- package/nodes/lights/LightContextNode.mjs +35 -0
- package/nodes/lights/LightNode.js +27 -31
- package/nodes/lights/LightNode.mjs +58 -0
- package/nodes/lights/LightsNode.js +9 -28
- package/nodes/lights/LightsNode.mjs +59 -0
- package/nodes/loaders/NodeLoader.js +27 -42
- package/nodes/loaders/NodeLoader.mjs +66 -0
- package/nodes/loaders/NodeMaterialLoader.js +4 -10
- package/nodes/loaders/NodeMaterialLoader.mjs +24 -0
- package/nodes/loaders/NodeObjectLoader.js +9 -19
- package/nodes/loaders/NodeObjectLoader.mjs +40 -0
- package/nodes/materials/LineBasicNodeMaterial.js +5 -10
- package/nodes/materials/LineBasicNodeMaterial.mjs +27 -0
- package/nodes/materials/Materials.js +14 -17
- package/nodes/materials/Materials.mjs +28 -0
- package/nodes/materials/MeshBasicNodeMaterial.js +5 -10
- package/nodes/materials/MeshBasicNodeMaterial.mjs +28 -0
- package/nodes/materials/MeshStandardNodeMaterial.js +5 -8
- package/nodes/materials/MeshStandardNodeMaterial.mjs +41 -0
- package/nodes/materials/NodeMaterial.js +20 -36
- package/nodes/materials/NodeMaterial.mjs +64 -0
- package/nodes/materials/PointsNodeMaterial.js +5 -10
- package/nodes/materials/PointsNodeMaterial.mjs +30 -0
- package/nodes/math/CondNode.js +11 -23
- package/nodes/math/CondNode.mjs +38 -0
- package/nodes/math/MathNode.js +98 -142
- package/nodes/math/MathNode.mjs +163 -0
- package/nodes/math/OperatorNode.js +24 -46
- package/nodes/math/OperatorNode.mjs +103 -0
- package/nodes/procedural/CheckerNode.js +13 -19
- package/nodes/procedural/CheckerNode.mjs +21 -0
- package/nodes/utils/ArrayElementNode.js +4 -8
- package/nodes/utils/ArrayElementNode.mjs +19 -0
- package/nodes/utils/ConvertNode.js +3 -8
- package/nodes/utils/ConvertNode.mjs +25 -0
- package/nodes/utils/JoinNode.js +7 -11
- package/nodes/utils/JoinNode.mjs +26 -0
- package/nodes/utils/MatcapUVNode.js +8 -11
- package/nodes/utils/MatcapUVNode.mjs +16 -0
- package/nodes/utils/OscNode.js +27 -33
- package/nodes/utils/OscNode.mjs +50 -0
- package/nodes/utils/SplitNode.js +6 -20
- package/nodes/utils/SplitNode.mjs +45 -0
- package/nodes/utils/SpriteSheetUVNode.js +23 -23
- package/nodes/utils/SpriteSheetUVNode.mjs +40 -0
- package/nodes/utils/TimerNode.js +20 -24
- package/nodes/utils/TimerNode.mjs +44 -0
- package/objects/GroundProjectedEnv.js +22 -37
- package/objects/GroundProjectedEnv.mjs +130 -0
- package/objects/Lensflare.js +86 -156
- package/objects/Lensflare.mjs +262 -0
- package/objects/LightningStorm.js +38 -102
- package/objects/LightningStorm.mjs +110 -0
- package/objects/MarchingCubes.js +150 -303
- package/objects/MarchingCubes.mjs +457 -0
- package/objects/Reflector.js +50 -72
- package/objects/Reflector.mjs +166 -0
- package/objects/ReflectorForSSRPass.js +80 -131
- package/objects/ReflectorForSSRPass.mjs +247 -0
- package/objects/ReflectorRTT.js +6 -7
- package/objects/ReflectorRTT.mjs +10 -0
- package/objects/Refractor.js +64 -106
- package/objects/Refractor.mjs +178 -0
- package/objects/ShadowMesh.js +8 -17
- package/objects/ShadowMesh.mjs +41 -0
- package/objects/Sky.js +119 -80
- package/objects/Sky.mjs +124 -0
- package/objects/Water.js +83 -127
- package/objects/Water.mjs +235 -0
- package/objects/Water2.js +72 -108
- package/objects/Water2.mjs +252 -0
- package/offscreen/jank.js +10 -14
- package/offscreen/jank.mjs +27 -0
- package/offscreen/offscreen.js +4 -5
- package/offscreen/offscreen.mjs +5 -0
- package/offscreen/scene.js +45 -48
- package/offscreen/scene.mjs +52 -0
- package/package.json +3 -3
- package/physics/AmmoPhysics.js +30 -71
- package/physics/AmmoPhysics.mjs +165 -0
- package/postprocessing/AdaptiveToneMappingPass.js +97 -123
- package/postprocessing/AdaptiveToneMappingPass.mjs +221 -0
- package/postprocessing/AfterimagePass.js +28 -49
- package/postprocessing/AfterimagePass.mjs +55 -0
- package/postprocessing/BloomPass.js +43 -69
- package/postprocessing/BloomPass.mjs +90 -0
- package/postprocessing/BokehPass.js +39 -69
- package/postprocessing/BokehPass.mjs +76 -0
- package/postprocessing/ClearPass.js +10 -25
- package/postprocessing/ClearPass.mjs +27 -0
- package/postprocessing/CubeTexturePass.js +28 -27
- package/postprocessing/CubeTexturePass.mjs +49 -0
- package/postprocessing/DotScreenPass.js +24 -32
- package/postprocessing/DotScreenPass.mjs +40 -0
- package/postprocessing/EffectComposer.js +39 -86
- package/postprocessing/EffectComposer.mjs +139 -0
- package/postprocessing/FilmPass.js +25 -30
- package/postprocessing/FilmPass.mjs +42 -0
- package/postprocessing/GlitchPass.js +38 -61
- package/postprocessing/GlitchPass.mjs +75 -0
- package/postprocessing/HalftonePass.js +19 -39
- package/postprocessing/HalftonePass.mjs +44 -0
- package/postprocessing/LUTPass.js +13 -38
- package/postprocessing/LUTPass.mjs +136 -0
- package/postprocessing/MaskPass.js +19 -38
- package/postprocessing/MaskPass.mjs +60 -0
- package/postprocessing/OutlinePass.js +135 -277
- package/postprocessing/OutlinePass.mjs +438 -0
- package/postprocessing/Pass.js +20 -44
- package/postprocessing/Pass.mjs +37 -0
- package/postprocessing/RenderPass.js +13 -36
- package/postprocessing/RenderPass.mjs +48 -0
- package/postprocessing/RenderPixelatedPass.js +44 -58
- package/postprocessing/RenderPixelatedPass.mjs +199 -0
- package/postprocessing/SAOPass.js +154 -189
- package/postprocessing/SAOPass.mjs +282 -0
- package/postprocessing/SMAAPass.js +64 -84
- package/postprocessing/SMAAPass.mjs +112 -0
- package/postprocessing/SSAARenderPass.js +121 -69
- package/postprocessing/SSAARenderPass.mjs +170 -0
- package/postprocessing/SSAOPass.js +123 -172
- package/postprocessing/SSAOPass.mjs +265 -0
- package/postprocessing/SSRPass.js +211 -280
- package/postprocessing/SSRPass.mjs +432 -0
- package/postprocessing/SavePass.js +20 -25
- package/postprocessing/SavePass.mjs +37 -0
- package/postprocessing/ShaderPass.js +14 -30
- package/postprocessing/ShaderPass.mjs +39 -0
- package/postprocessing/TAARenderPass.js +42 -61
- package/postprocessing/TAARenderPass.mjs +88 -0
- package/postprocessing/TexturePass.js +21 -22
- package/postprocessing/TexturePass.mjs +39 -0
- package/postprocessing/UnrealBloomPass.js +105 -213
- package/postprocessing/UnrealBloomPass.mjs +220 -0
- package/renderers/CSS2DRenderer.js +44 -56
- package/renderers/CSS2DRenderer.mjs +112 -0
- package/renderers/CSS3DRenderer.js +53 -86
- package/renderers/CSS3DRenderer.mjs +133 -0
- package/renderers/Projector.js +107 -274
- package/renderers/Projector.mjs +511 -0
- package/renderers/SVGRenderer.js +72 -182
- package/renderers/SVGRenderer.mjs +306 -0
- package/renderers/nodes/accessors/CameraNode.js +29 -40
- package/renderers/nodes/accessors/CameraNode.mjs +63 -0
- package/renderers/nodes/accessors/ModelNode.js +28 -37
- package/renderers/nodes/accessors/ModelNode.mjs +61 -0
- package/renderers/nodes/accessors/ModelViewProjectionNode.js +10 -23
- package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +21 -0
- package/renderers/nodes/accessors/NormalNode.js +35 -45
- package/renderers/nodes/accessors/NormalNode.mjs +61 -0
- package/renderers/nodes/accessors/PositionNode.js +18 -19
- package/renderers/nodes/accessors/PositionNode.mjs +30 -0
- package/renderers/nodes/accessors/UVNode.js +5 -10
- package/renderers/nodes/accessors/UVNode.mjs +13 -0
- package/renderers/nodes/core/AttributeNode.js +5 -14
- package/renderers/nodes/core/AttributeNode.mjs +35 -0
- package/renderers/nodes/core/InputNode.js +4 -14
- package/renderers/nodes/core/InputNode.mjs +31 -0
- package/renderers/nodes/core/Node.js +7 -17
- package/renderers/nodes/core/Node.mjs +34 -0
- package/renderers/nodes/core/NodeAttribute.js +3 -6
- package/renderers/nodes/core/NodeAttribute.mjs +10 -0
- package/renderers/nodes/core/NodeBuilder.js +87 -154
- package/renderers/nodes/core/NodeBuilder.mjs +243 -0
- package/renderers/nodes/core/NodeFrame.js +9 -12
- package/renderers/nodes/core/NodeFrame.mjs +35 -0
- package/renderers/nodes/core/NodeSlot.js +2 -3
- package/renderers/nodes/core/NodeSlot.mjs +10 -0
- package/renderers/nodes/core/NodeUniform.js +4 -9
- package/renderers/nodes/core/NodeUniform.mjs +18 -0
- package/renderers/nodes/core/NodeVary.js +4 -7
- package/renderers/nodes/core/NodeVary.mjs +11 -0
- package/renderers/nodes/core/VaryNode.js +6 -12
- package/renderers/nodes/core/VaryNode.mjs +22 -0
- package/renderers/nodes/core/constants.js +16 -13
- package/renderers/nodes/core/constants.mjs +22 -0
- package/renderers/nodes/inputs/ColorNode.js +5 -11
- package/renderers/nodes/inputs/ColorNode.mjs +11 -0
- package/renderers/nodes/inputs/FloatNode.js +5 -11
- package/renderers/nodes/inputs/FloatNode.mjs +11 -0
- package/renderers/nodes/inputs/Matrix3Node.js +7 -13
- package/renderers/nodes/inputs/Matrix3Node.mjs +12 -0
- package/renderers/nodes/inputs/Matrix4Node.js +7 -13
- package/renderers/nodes/inputs/Matrix4Node.mjs +12 -0
- package/renderers/nodes/inputs/TextureNode.js +7 -15
- package/renderers/nodes/inputs/TextureNode.mjs +20 -0
- package/renderers/nodes/inputs/Vector2Node.js +5 -11
- package/renderers/nodes/inputs/Vector2Node.mjs +11 -0
- package/renderers/nodes/inputs/Vector3Node.js +7 -13
- package/renderers/nodes/inputs/Vector3Node.mjs +12 -0
- package/renderers/nodes/inputs/Vector4Node.js +7 -13
- package/renderers/nodes/inputs/Vector4Node.mjs +12 -0
- package/renderers/nodes/math/MathNode.js +20 -30
- package/renderers/nodes/math/MathNode.mjs +55 -0
- package/renderers/nodes/math/OperatorNode.js +4 -20
- package/renderers/nodes/math/OperatorNode.mjs +42 -0
- package/renderers/nodes/utils/SwitchNode.js +4 -9
- package/renderers/nodes/utils/SwitchNode.mjs +20 -0
- package/renderers/nodes/utils/TimerNode.js +5 -10
- package/renderers/nodes/utils/TimerNode.mjs +14 -0
- package/renderers/webgpu/WebGPU.js +14 -16
- package/renderers/webgpu/WebGPU.mjs +24 -0
- package/renderers/webgpu/WebGPUAttributes.js +16 -23
- package/renderers/webgpu/WebGPUAttributes.mjs +69 -0
- package/renderers/webgpu/WebGPUBackground.js +13 -30
- package/renderers/webgpu/WebGPUBackground.mjs +61 -0
- package/renderers/webgpu/WebGPUBinding.js +4 -7
- package/renderers/webgpu/WebGPUBinding.mjs +14 -0
- package/renderers/webgpu/WebGPUBindings.js +21 -57
- package/renderers/webgpu/WebGPUBindings.mjs +155 -0
- package/renderers/webgpu/WebGPUComputePipelines.js +14 -25
- package/renderers/webgpu/WebGPUComputePipelines.mjs +44 -0
- package/renderers/webgpu/WebGPUGeometries.js +5 -15
- package/renderers/webgpu/WebGPUGeometries.mjs +41 -0
- package/renderers/webgpu/WebGPUInfo.js +3 -8
- package/renderers/webgpu/WebGPUInfo.mjs +46 -0
- package/renderers/webgpu/WebGPUObjects.js +5 -10
- package/renderers/webgpu/WebGPUObjects.mjs +25 -0
- package/renderers/webgpu/WebGPUProperties.js +5 -11
- package/renderers/webgpu/WebGPUProperties.mjs +22 -0
- package/renderers/webgpu/WebGPURenderLists.js +20 -36
- package/renderers/webgpu/WebGPURenderLists.mjs +119 -0
- package/renderers/webgpu/WebGPURenderPipelines.js +260 -387
- package/renderers/webgpu/WebGPURenderPipelines.mjs +545 -0
- package/renderers/webgpu/WebGPURenderer.js +124 -262
- package/renderers/webgpu/WebGPURenderer.mjs +574 -0
- package/renderers/webgpu/WebGPUSampledTexture.js +18 -31
- package/renderers/webgpu/WebGPUSampledTexture.mjs +40 -0
- package/renderers/webgpu/WebGPUSampler.js +7 -12
- package/renderers/webgpu/WebGPUSampler.mjs +15 -0
- package/renderers/webgpu/WebGPUStorageBuffer.js +7 -12
- package/renderers/webgpu/WebGPUStorageBuffer.mjs +15 -0
- package/renderers/webgpu/WebGPUTextureRenderer.js +5 -11
- package/renderers/webgpu/WebGPUTextureRenderer.mjs +23 -0
- package/renderers/webgpu/WebGPUTextureUtils.js +29 -40
- package/renderers/webgpu/WebGPUTextureUtils.mjs +98 -0
- package/renderers/webgpu/WebGPUTextures.js +186 -333
- package/renderers/webgpu/WebGPUTextures.mjs +484 -0
- package/renderers/webgpu/WebGPUUniform.js +25 -51
- package/renderers/webgpu/WebGPUUniform.mjs +81 -0
- package/renderers/webgpu/WebGPUUniformsGroup.js +32 -72
- package/renderers/webgpu/WebGPUUniformsGroup.mjs +176 -0
- package/renderers/webgpu/constants.js +190 -181
- package/renderers/webgpu/constants.mjs +230 -0
- package/renderers/webgpu/nodes/ShaderLib.js +2 -2
- package/renderers/webgpu/nodes/ShaderLib.mjs +42 -0
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +53 -124
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +165 -0
- package/renderers/webgpu/nodes/WebGPUNodeUniform.js +17 -31
- package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +73 -0
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +8 -9
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +15 -0
- package/renderers/webgpu/nodes/WebGPUNodes.js +7 -45
- package/renderers/webgpu/nodes/WebGPUNodes.mjs +40 -0
- package/shaders/ACESFilmicToneMappingShader.js +44 -24
- package/shaders/ACESFilmicToneMappingShader.mjs +48 -0
- package/shaders/AfterimageShader.js +28 -18
- package/shaders/AfterimageShader.mjs +32 -0
- package/shaders/BasicShader.js +9 -7
- package/shaders/BasicShader.mjs +12 -0
- package/shaders/BleachBypassShader.js +31 -15
- package/shaders/BleachBypassShader.mjs +35 -0
- package/shaders/BlendShader.js +26 -19
- package/shaders/BlendShader.mjs +30 -0
- package/shaders/BokehShader.js +98 -36
- package/shaders/BokehShader.mjs +106 -0
- package/shaders/BokehShader2.js +261 -90
- package/shaders/BokehShader2.mjs +269 -0
- package/shaders/BrightnessContrastShader.js +28 -19
- package/shaders/BrightnessContrastShader.mjs +32 -0
- package/shaders/ColorCorrectionShader.js +26 -22
- package/shaders/ColorCorrectionShader.mjs +30 -0
- package/shaders/ColorifyShader.js +24 -16
- package/shaders/ColorifyShader.mjs +28 -0
- package/shaders/ConvolutionShader.js +40 -36
- package/shaders/ConvolutionShader.mjs +55 -0
- package/shaders/CopyShader.js +21 -13
- package/shaders/CopyShader.mjs +25 -0
- package/shaders/DOFMipMapShader.js +28 -21
- package/shaders/DOFMipMapShader.mjs +32 -0
- package/shaders/DepthLimitedBlurShader.js +85 -40
- package/shaders/DepthLimitedBlurShader.mjs +114 -0
- package/shaders/DigitalGlitch.js +74 -46
- package/shaders/DigitalGlitch.mjs +78 -0
- package/shaders/DotScreenShader.js +35 -27
- package/shaders/DotScreenShader.mjs +39 -0
- package/shaders/FXAAShader.js +1094 -19
- package/shaders/FXAAShader.mjs +1098 -0
- package/shaders/FilmShader.js +38 -52
- package/shaders/FilmShader.mjs +42 -0
- package/shaders/FocusShader.js +51 -24
- package/shaders/FocusShader.mjs +55 -0
- package/shaders/FreiChenShader.js +57 -24
- package/shaders/FreiChenShader.mjs +61 -0
- package/shaders/FresnelShader.js +43 -22
- package/shaders/FresnelShader.mjs +47 -0
- package/shaders/GammaCorrectionShader.js +19 -11
- package/shaders/GammaCorrectionShader.mjs +23 -0
- package/shaders/GodRaysShader.js +103 -94
- package/shaders/GodRaysShader.mjs +146 -0
- package/shaders/HalftoneShader.js +208 -65
- package/shaders/HalftoneShader.mjs +212 -0
- package/shaders/HorizontalBlurShader.js +7 -23
- package/shaders/HorizontalBlurShader.mjs +43 -0
- package/shaders/HorizontalTiltShiftShader.js +33 -21
- package/shaders/HorizontalTiltShiftShader.mjs +37 -0
- package/shaders/HueSaturationShader.js +37 -21
- package/shaders/HueSaturationShader.mjs +41 -0
- package/shaders/KaleidoShader.js +30 -22
- package/shaders/KaleidoShader.mjs +34 -0
- package/shaders/LuminosityHighPassShader.js +33 -27
- package/shaders/LuminosityHighPassShader.mjs +37 -0
- package/shaders/LuminosityShader.js +21 -11
- package/shaders/LuminosityShader.mjs +25 -0
- package/shaders/MirrorShader.js +31 -16
- package/shaders/MirrorShader.mjs +35 -0
- package/shaders/NormalMapShader.js +27 -23
- package/shaders/NormalMapShader.mjs +31 -0
- package/shaders/ParallaxShader.js +107 -48
- package/shaders/ParallaxShader.mjs +113 -0
- package/shaders/PixelShader.js +24 -16
- package/shaders/PixelShader.mjs +28 -0
- package/shaders/RGBShiftShader.js +26 -22
- package/shaders/RGBShiftShader.mjs +30 -0
- package/shaders/SAOShader.js +132 -48
- package/shaders/SAOShader.mjs +144 -0
- package/shaders/SMAAShader.js +256 -135
- package/shaders/SMAAShader.mjs +272 -0
- package/shaders/SSAOShader.js +153 -81
- package/shaders/SSAOShader.mjs +172 -0
- package/shaders/SSRShader.js +32 -87
- package/shaders/SSRShader.mjs +324 -0
- package/shaders/SepiaShader.js +25 -15
- package/shaders/SepiaShader.mjs +29 -0
- package/shaders/SobelOperatorShader.js +40 -29
- package/shaders/SobelOperatorShader.mjs +44 -0
- package/shaders/SubsurfaceScatteringShader.js +53 -39
- package/shaders/SubsurfaceScatteringShader.mjs +59 -0
- package/shaders/TechnicolorShader.js +20 -13
- package/shaders/TechnicolorShader.mjs +24 -0
- package/shaders/ToneMapShader.js +44 -28
- package/shaders/ToneMapShader.mjs +48 -0
- package/shaders/ToonShader.js +172 -96
- package/shaders/ToonShader.mjs +188 -0
- package/shaders/TriangleBlurShader.js +32 -23
- package/shaders/TriangleBlurShader.mjs +36 -0
- package/shaders/UnpackDepthRGBAShader.js +22 -14
- package/shaders/UnpackDepthRGBAShader.mjs +26 -0
- package/shaders/VerticalBlurShader.js +7 -23
- package/shaders/VerticalBlurShader.mjs +44 -0
- package/shaders/VerticalTiltShiftShader.js +33 -21
- package/shaders/VerticalTiltShiftShader.mjs +37 -0
- package/shaders/VignetteShader.js +24 -28
- package/shaders/VignetteShader.mjs +28 -0
- package/shaders/VolumeShader.js +174 -77
- package/shaders/VolumeShader.mjs +178 -0
- package/shaders/WaterRefractionShader.js +38 -6
- package/shaders/WaterRefractionShader.mjs +57 -0
- package/shaders/types.js +1 -1
- package/{custom.d.js → shaders/types.mjs} +0 -0
- package/textures/FlakesTexture.js +8 -10
- package/textures/FlakesTexture.mjs +30 -0
- package/types/helpers.js +3 -2
- package/types/helpers.mjs +4 -0
- package/utils/BufferGeometryUtils.js +251 -325
- package/utils/BufferGeometryUtils.mjs +570 -0
- package/utils/GeometryCompressionUtils.js +241 -239
- package/utils/GeometryCompressionUtils.mjs +547 -0
- package/utils/GeometryUtils.js +41 -94
- package/utils/GeometryUtils.mjs +108 -0
- package/utils/RoughnessMipmapper.js +38 -82
- package/utils/RoughnessMipmapper.mjs +213 -0
- package/utils/SceneUtils.js +15 -20
- package/utils/SceneUtils.mjs +36 -0
- package/utils/ShadowMapViewer.js +49 -95
- package/utils/ShadowMapViewer.mjs +114 -0
- package/utils/SkeletonUtils.js +74 -165
- package/utils/SkeletonUtils.mjs +292 -0
- package/utils/UVsDebug.js +32 -62
- package/utils/UVsDebug.mjs +85 -0
- package/utils/WorkerPool.js +13 -33
- package/utils/WorkerPool.mjs +62 -0
- package/webxr/ARButton.js +72 -98
- package/webxr/ARButton.mjs +119 -0
- package/webxr/OculusHandModel.js +18 -37
- package/webxr/OculusHandModel.mjs +71 -0
- package/webxr/OculusHandPointerModel.js +58 -80
- package/webxr/OculusHandPointerModel.mjs +207 -0
- package/webxr/Text2D.js +37 -19
- package/webxr/Text2D.mjs +31 -0
- package/webxr/VRButton.js +59 -90
- package/webxr/VRButton.mjs +105 -0
- package/webxr/XRControllerModelFactory.js +58 -116
- package/webxr/XRControllerModelFactory.mjs +146 -0
- package/webxr/XREstimatedLight.js +39 -66
- package/webxr/XREstimatedLight.mjs +126 -0
- package/webxr/XRHandMeshModel.js +40 -29
- package/webxr/XRHandMeshModel.mjs +73 -0
- package/webxr/XRHandModelFactory.js +28 -31
- package/webxr/XRHandModelFactory.mjs +61 -0
- package/webxr/XRHandPrimitiveModel.js +41 -27
- package/webxr/XRHandPrimitiveModel.mjs +68 -0
- package/BufferGeometryUtils-1a7a235c.js +0 -655
- package/BufferGeometryUtils-971dfde3.js +0 -1
- package/Nodes-4f766d71.js +0 -471
- package/Nodes-9aa16d74.js +0 -1
- package/animation/AnimationClipCreator.cjs.js +0 -1
- package/animation/CCDIKSolver.cjs.js +0 -1
- package/animation/MMDAnimationHelper.cjs.js +0 -1
- package/animation/MMDPhysics.cjs.js +0 -1
- package/cameras/CinematicCamera.cjs.js +0 -1
- package/controls/ArcballControls.cjs.js +0 -1
- package/controls/DeviceOrientationControls.cjs.js +0 -1
- package/controls/DragControls.cjs.js +0 -1
- package/controls/FirstPersonControls.cjs.js +0 -1
- package/controls/FlyControls.cjs.js +0 -1
- package/controls/OrbitControls.cjs.js +0 -1
- package/controls/PointerLockControls.cjs.js +0 -1
- package/controls/TrackballControls.cjs.js +0 -1
- package/controls/TransformControls.cjs.js +0 -1
- package/controls/experimental/CameraControls.cjs.js +0 -1
- package/csm/CSM.cjs.js +0 -1
- package/csm/CSMFrustum.cjs.js +0 -1
- package/csm/CSMHelper.cjs.js +0 -1
- package/csm/CSMShader.cjs.js +0 -1
- package/curves/CurveExtras.cjs.js +0 -1
- package/curves/NURBSCurve.cjs.js +0 -1
- package/curves/NURBSSurface.cjs.js +0 -1
- package/curves/NURBSUtils.cjs.js +0 -1
- package/custom.d.cjs.js +0 -1
- package/deprecated/Geometry.cjs.js +0 -1
- package/effects/AnaglyphEffect.cjs.js +0 -1
- package/effects/AsciiEffect.cjs.js +0 -1
- package/effects/OutlineEffect.cjs.js +0 -1
- package/effects/ParallaxBarrierEffect.cjs.js +0 -1
- package/effects/PeppersGhostEffect.cjs.js +0 -1
- package/effects/StereoEffect.cjs.js +0 -1
- package/environments/RoomEnvironment.cjs.js +0 -1
- package/exporters/ColladaExporter.cjs.js +0 -1
- package/exporters/DRACOExporter.cjs.js +0 -1
- package/exporters/GLTFExporter.cjs.js +0 -1
- package/exporters/MMDExporter.cjs.js +0 -1
- package/exporters/OBJExporter.cjs.js +0 -1
- package/exporters/PLYExporter.cjs.js +0 -1
- package/exporters/STLExporter.cjs.js +0 -1
- package/exporters/USDZExporter.cjs.js +0 -1
- package/geometries/BoxLineGeometry.cjs.js +0 -1
- package/geometries/ConvexGeometry.cjs.js +0 -1
- package/geometries/DecalGeometry.cjs.js +0 -1
- package/geometries/LightningStrike.cjs.js +0 -1
- package/geometries/ParametricGeometries.cjs.js +0 -1
- package/geometries/ParametricGeometry.cjs.js +0 -1
- package/geometries/RoundedBoxGeometry.cjs.js +0 -1
- package/geometries/TeapotGeometry.cjs.js +0 -1
- package/geometries/TextGeometry.cjs.js +0 -1
- package/helpers/LightProbeHelper.cjs.js +0 -1
- package/helpers/PositionalAudioHelper.cjs.js +0 -1
- package/helpers/RectAreaLightHelper.cjs.js +0 -1
- package/helpers/VertexNormalsHelper.cjs.js +0 -1
- package/helpers/VertexTangentsHelper.cjs.js +0 -1
- package/index.cjs.js +0 -1
- package/interactive/InteractiveGroup.cjs.js +0 -1
- package/interactive/InteractiveGroup.d.ts +0 -5
- package/interactive/InteractiveGroup.js +0 -87
- package/interactive/SelectionBox.cjs.js +0 -1
- package/interactive/SelectionHelper.cjs.js +0 -1
- package/libs/MeshoptDecoder.cjs.js +0 -1
- package/libs/MotionControllers.cjs.js +0 -1
- package/lights/LightProbeGenerator.cjs.js +0 -1
- package/lights/RectAreaLightUniformsLib.cjs.js +0 -1
- package/lines/Line2.cjs.js +0 -1
- package/lines/LineGeometry.cjs.js +0 -1
- package/lines/LineMaterial.cjs.js +0 -1
- package/lines/LineSegments2.cjs.js +0 -1
- package/lines/LineSegmentsGeometry.cjs.js +0 -1
- package/lines/Wireframe.cjs.js +0 -1
- package/lines/WireframeGeometry2.cjs.js +0 -1
- package/loaders/3DMLoader.cjs.js +0 -1
- package/loaders/3MFLoader.cjs.js +0 -1
- package/loaders/AMFLoader.cjs.js +0 -1
- package/loaders/AssimpLoader.cjs.js +0 -1
- package/loaders/BVHLoader.cjs.js +0 -1
- package/loaders/BasisTextureLoader.cjs.js +0 -1
- package/loaders/ColladaLoader.cjs.js +0 -1
- package/loaders/DDSLoader.cjs.js +0 -1
- package/loaders/DRACOLoader.cjs.js +0 -1
- package/loaders/EXRLoader.cjs.js +0 -1
- package/loaders/FBXLoader.cjs.js +0 -1
- package/loaders/FontLoader.cjs.js +0 -1
- package/loaders/GCodeLoader.cjs.js +0 -1
- package/loaders/GLTFLoader.cjs.js +0 -1
- package/loaders/HDRCubeTextureLoader.cjs.js +0 -1
- package/loaders/KMZLoader.cjs.js +0 -1
- package/loaders/KTX2Loader.cjs.js +0 -1
- package/loaders/KTXLoader.cjs.js +0 -1
- package/loaders/LDrawLoader.cjs.js +0 -1
- package/loaders/LUT3dlLoader.cjs.js +0 -1
- package/loaders/LUTCubeLoader.cjs.js +0 -1
- package/loaders/LWOLoader.cjs.js +0 -1
- package/loaders/LottieLoader.cjs.js +0 -1
- package/loaders/MD2Loader.cjs.js +0 -1
- package/loaders/MDDLoader.cjs.js +0 -1
- package/loaders/MMDLoader.cjs.js +0 -1
- package/loaders/MTLLoader.cjs.js +0 -1
- package/loaders/NRRDLoader.cjs.js +0 -1
- package/loaders/NodeMaterialLoader.cjs.js +0 -1
- package/loaders/OBJLoader.cjs.js +0 -1
- package/loaders/PCDLoader.cjs.js +0 -1
- package/loaders/PDBLoader.cjs.js +0 -1
- package/loaders/PLYLoader.cjs.js +0 -1
- package/loaders/PRWMLoader.cjs.js +0 -1
- package/loaders/PVRLoader.cjs.js +0 -1
- package/loaders/RGBELoader.cjs.js +0 -1
- package/loaders/RGBMLoader.cjs.js +0 -1
- package/loaders/STLLoader.cjs.js +0 -1
- package/loaders/SVGLoader.cjs.js +0 -1
- package/loaders/TDSLoader.cjs.js +0 -1
- package/loaders/TGALoader.cjs.js +0 -1
- package/loaders/TTFLoader.cjs.js +0 -1
- package/loaders/TiltLoader.cjs.js +0 -1
- package/loaders/VOXLoader.cjs.js +0 -1
- package/loaders/VRMLLoader.cjs.js +0 -1
- package/loaders/VRMLoader.cjs.js +0 -1
- package/loaders/VTKLoader.cjs.js +0 -1
- package/loaders/XLoader.cjs.js +0 -1
- package/loaders/XYZLoader.cjs.js +0 -1
- package/loaders/lwo/IFFParser.cjs.js +0 -1
- package/loaders/lwo/LWO2Parser.cjs.js +0 -1
- package/loaders/lwo/LWO3Parser.cjs.js +0 -1
- package/math/Capsule.cjs.js +0 -1
- package/math/ColorConverter.cjs.js +0 -1
- package/math/ConvexHull.cjs.js +0 -1
- package/math/ImprovedNoise.cjs.js +0 -1
- package/math/Lut.cjs.js +0 -1
- package/math/MeshSurfaceSampler.cjs.js +0 -1
- package/math/OBB.cjs.js +0 -1
- package/math/Octree.cjs.js +0 -1
- package/math/SimplexNoise.cjs.js +0 -1
- package/misc/ConvexObjectBreaker.cjs.js +0 -1
- package/misc/GPUComputationRenderer.cjs.js +0 -1
- package/misc/Gyroscope.cjs.js +0 -1
- package/misc/MD2Character.cjs.js +0 -1
- package/misc/MD2CharacterComplex.cjs.js +0 -1
- package/misc/MorphAnimMesh.cjs.js +0 -1
- package/misc/MorphBlendMesh.cjs.js +0 -1
- package/misc/ProgressiveLightmap.cjs.js +0 -1
- package/misc/RollerCoaster.cjs.js +0 -1
- package/misc/TubePainter.cjs.js +0 -1
- package/misc/Volume.cjs.js +0 -1
- package/misc/VolumeSlice.cjs.js +0 -1
- package/misc/WebGL.cjs.js +0 -1
- package/modifiers/CurveModifier.cjs.js +0 -1
- package/modifiers/EdgeSplitModifier.cjs.js +0 -1
- package/modifiers/SimplifyModifier.cjs.js +0 -1
- package/modifiers/TessellateModifier.cjs.js +0 -1
- package/nodes/Nodes.cjs.js +0 -1
- package/nodes/ShaderNode.cjs.js +0 -1
- package/nodes/accessors/BufferNode.cjs.js +0 -1
- package/nodes/accessors/CameraNode.cjs.js +0 -1
- package/nodes/accessors/CubeTextureNode.cjs.js +0 -1
- package/nodes/accessors/MaterialNode.cjs.js +0 -1
- package/nodes/accessors/MaterialReferenceNode.cjs.js +0 -1
- package/nodes/accessors/ModelNode.cjs.js +0 -1
- package/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
- package/nodes/accessors/NormalNode.cjs.js +0 -1
- package/nodes/accessors/Object3DNode.cjs.js +0 -1
- package/nodes/accessors/PointUVNode.cjs.js +0 -1
- package/nodes/accessors/PositionNode.cjs.js +0 -1
- package/nodes/accessors/ReferenceNode.cjs.js +0 -1
- package/nodes/accessors/ReflectNode.cjs.js +0 -1
- package/nodes/accessors/SkinningNode.cjs.js +0 -1
- package/nodes/accessors/TextureNode.cjs.js +0 -1
- package/nodes/accessors/UVNode.cjs.js +0 -1
- package/nodes/core/ArrayUniformNode.cjs.js +0 -1
- package/nodes/core/AttributeNode.cjs.js +0 -1
- package/nodes/core/BypassNode.cjs.js +0 -1
- package/nodes/core/CodeNode.cjs.js +0 -1
- package/nodes/core/ConstNode.cjs.js +0 -1
- package/nodes/core/ContextNode.cjs.js +0 -1
- package/nodes/core/ExpressionNode.cjs.js +0 -1
- package/nodes/core/FunctionCallNode.cjs.js +0 -1
- package/nodes/core/FunctionNode.cjs.js +0 -1
- package/nodes/core/InputNode.cjs.js +0 -1
- package/nodes/core/Node.cjs.js +0 -1
- package/nodes/core/NodeAttribute.cjs.js +0 -1
- package/nodes/core/NodeBuilder.cjs.js +0 -1
- package/nodes/core/NodeCode.cjs.js +0 -1
- package/nodes/core/NodeFrame.cjs.js +0 -1
- package/nodes/core/NodeFunction.cjs.js +0 -1
- package/nodes/core/NodeFunction.js +0 -17
- package/nodes/core/NodeFunctionInput.cjs.js +0 -1
- package/nodes/core/NodeKeywords.cjs.js +0 -1
- package/nodes/core/NodeParser.cjs.js +0 -1
- package/nodes/core/NodeParser.js +0 -8
- package/nodes/core/NodeUniform.cjs.js +0 -1
- package/nodes/core/NodeUtils.cjs.js +0 -1
- package/nodes/core/NodeVar.cjs.js +0 -1
- package/nodes/core/NodeVary.cjs.js +0 -1
- package/nodes/core/PropertyNode.cjs.js +0 -1
- package/nodes/core/TempNode.cjs.js +0 -1
- package/nodes/core/UniformNode.cjs.js +0 -1
- package/nodes/core/VarNode.cjs.js +0 -1
- package/nodes/core/VaryNode.cjs.js +0 -1
- package/nodes/core/constants.cjs.js +0 -1
- package/nodes/display/ColorSpaceNode.cjs.js +0 -1
- package/nodes/display/NormalMapNode.cjs.js +0 -1
- package/nodes/fog/FogNode.cjs.js +0 -1
- package/nodes/fog/FogRangeNode.cjs.js +0 -1
- package/nodes/functions/BSDFs.cjs.js +0 -1
- package/nodes/functions/PhysicalMaterialFunctions.cjs.js +0 -1
- package/nodes/functions/PhysicalMaterialFunctions.js +0 -57
- package/nodes/lights/LightContextNode.cjs.js +0 -1
- package/nodes/lights/LightNode.cjs.js +0 -1
- package/nodes/lights/LightsNode.cjs.js +0 -1
- package/nodes/loaders/NodeLoader.cjs.js +0 -1
- package/nodes/loaders/NodeMaterialLoader.cjs.js +0 -1
- package/nodes/loaders/NodeObjectLoader.cjs.js +0 -1
- package/nodes/materials/LineBasicNodeMaterial.cjs.js +0 -1
- package/nodes/materials/Materials.cjs.js +0 -1
- package/nodes/materials/MeshBasicNodeMaterial.cjs.js +0 -1
- package/nodes/materials/MeshStandardNodeMaterial.cjs.js +0 -1
- package/nodes/materials/NodeMaterial.cjs.js +0 -1
- package/nodes/materials/PointsNodeMaterial.cjs.js +0 -1
- package/nodes/math/CondNode.cjs.js +0 -1
- package/nodes/math/MathNode.cjs.js +0 -1
- package/nodes/math/OperatorNode.cjs.js +0 -1
- package/nodes/parsers/GLSLNodeFunction.cjs.js +0 -1
- package/nodes/parsers/GLSLNodeFunction.js +0 -101
- package/nodes/parsers/GLSLNodeParser.cjs.js +0 -1
- package/nodes/parsers/GLSLNodeParser.js +0 -13
- package/nodes/parsers/WGSLNodeFunction.cjs.js +0 -1
- package/nodes/parsers/WGSLNodeFunction.js +0 -71
- package/nodes/parsers/WGSLNodeParser.cjs.js +0 -1
- package/nodes/parsers/WGSLNodeParser.js +0 -13
- package/nodes/procedural/CheckerNode.cjs.js +0 -1
- package/nodes/utils/ArrayElementNode.cjs.js +0 -1
- package/nodes/utils/ConvertNode.cjs.js +0 -1
- package/nodes/utils/JoinNode.cjs.js +0 -1
- package/nodes/utils/MatcapUVNode.cjs.js +0 -1
- package/nodes/utils/OscNode.cjs.js +0 -1
- package/nodes/utils/SplitNode.cjs.js +0 -1
- package/nodes/utils/SpriteSheetUVNode.cjs.js +0 -1
- package/nodes/utils/TimerNode.cjs.js +0 -1
- package/objects/GroundProjectedEnv.cjs.js +0 -1
- package/objects/Lensflare.cjs.js +0 -1
- package/objects/LightningStorm.cjs.js +0 -1
- package/objects/MarchingCubes.cjs.js +0 -1
- package/objects/Reflector.cjs.js +0 -1
- package/objects/ReflectorForSSRPass.cjs.js +0 -1
- package/objects/ReflectorRTT.cjs.js +0 -1
- package/objects/Refractor.cjs.js +0 -1
- package/objects/ShadowMesh.cjs.js +0 -1
- package/objects/Sky.cjs.js +0 -1
- package/objects/Water.cjs.js +0 -1
- package/objects/Water2.cjs.js +0 -1
- package/offscreen/jank.cjs.js +0 -1
- package/offscreen/offscreen.cjs.js +0 -1
- package/offscreen/scene.cjs.js +0 -1
- package/physics/AmmoPhysics.cjs.js +0 -1
- package/postprocessing/AdaptiveToneMappingPass.cjs.js +0 -1
- package/postprocessing/AfterimagePass.cjs.js +0 -1
- package/postprocessing/BloomPass.cjs.js +0 -1
- package/postprocessing/BokehPass.cjs.js +0 -1
- package/postprocessing/ClearPass.cjs.js +0 -1
- package/postprocessing/CubeTexturePass.cjs.js +0 -1
- package/postprocessing/DotScreenPass.cjs.js +0 -1
- package/postprocessing/EffectComposer.cjs.js +0 -1
- package/postprocessing/FilmPass.cjs.js +0 -1
- package/postprocessing/GlitchPass.cjs.js +0 -1
- package/postprocessing/HalftonePass.cjs.js +0 -1
- package/postprocessing/LUTPass.cjs.js +0 -1
- package/postprocessing/MaskPass.cjs.js +0 -1
- package/postprocessing/OutlinePass.cjs.js +0 -1
- package/postprocessing/Pass.cjs.js +0 -1
- package/postprocessing/RenderPass.cjs.js +0 -1
- package/postprocessing/RenderPixelatedPass.cjs.js +0 -1
- package/postprocessing/SAOPass.cjs.js +0 -1
- package/postprocessing/SMAAPass.cjs.js +0 -1
- package/postprocessing/SSAARenderPass.cjs.js +0 -1
- package/postprocessing/SSAOPass.cjs.js +0 -1
- package/postprocessing/SSRPass.cjs.js +0 -1
- package/postprocessing/SavePass.cjs.js +0 -1
- package/postprocessing/ShaderPass.cjs.js +0 -1
- package/postprocessing/TAARenderPass.cjs.js +0 -1
- package/postprocessing/TexturePass.cjs.js +0 -1
- package/postprocessing/UnrealBloomPass.cjs.js +0 -1
- package/renderers/CSS2DRenderer.cjs.js +0 -1
- package/renderers/CSS3DRenderer.cjs.js +0 -1
- package/renderers/Projector.cjs.js +0 -1
- package/renderers/SVGRenderer.cjs.js +0 -1
- package/renderers/nodes/accessors/CameraNode.cjs.js +0 -1
- package/renderers/nodes/accessors/ModelNode.cjs.js +0 -1
- package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
- package/renderers/nodes/accessors/NormalNode.cjs.js +0 -1
- package/renderers/nodes/accessors/PositionNode.cjs.js +0 -1
- package/renderers/nodes/accessors/UVNode.cjs.js +0 -1
- package/renderers/nodes/core/AttributeNode.cjs.js +0 -1
- package/renderers/nodes/core/InputNode.cjs.js +0 -1
- package/renderers/nodes/core/Node.cjs.js +0 -1
- package/renderers/nodes/core/NodeAttribute.cjs.js +0 -1
- package/renderers/nodes/core/NodeBuilder.cjs.js +0 -1
- package/renderers/nodes/core/NodeFrame.cjs.js +0 -1
- package/renderers/nodes/core/NodeSlot.cjs.js +0 -1
- package/renderers/nodes/core/NodeUniform.cjs.js +0 -1
- package/renderers/nodes/core/NodeVary.cjs.js +0 -1
- package/renderers/nodes/core/VaryNode.cjs.js +0 -1
- package/renderers/nodes/core/constants.cjs.js +0 -1
- package/renderers/nodes/inputs/ColorNode.cjs.js +0 -1
- package/renderers/nodes/inputs/FloatNode.cjs.js +0 -1
- package/renderers/nodes/inputs/Matrix3Node.cjs.js +0 -1
- package/renderers/nodes/inputs/Matrix4Node.cjs.js +0 -1
- package/renderers/nodes/inputs/TextureNode.cjs.js +0 -1
- package/renderers/nodes/inputs/Vector2Node.cjs.js +0 -1
- package/renderers/nodes/inputs/Vector3Node.cjs.js +0 -1
- package/renderers/nodes/inputs/Vector4Node.cjs.js +0 -1
- package/renderers/nodes/math/MathNode.cjs.js +0 -1
- package/renderers/nodes/math/OperatorNode.cjs.js +0 -1
- package/renderers/nodes/utils/SwitchNode.cjs.js +0 -1
- package/renderers/nodes/utils/TimerNode.cjs.js +0 -1
- package/renderers/webgpu/WebGPU.cjs.js +0 -1
- package/renderers/webgpu/WebGPUAttributes.cjs.js +0 -1
- package/renderers/webgpu/WebGPUBackground.cjs.js +0 -1
- package/renderers/webgpu/WebGPUBinding.cjs.js +0 -1
- package/renderers/webgpu/WebGPUBindings.cjs.js +0 -1
- package/renderers/webgpu/WebGPUComputePipelines.cjs.js +0 -1
- package/renderers/webgpu/WebGPUGeometries.cjs.js +0 -1
- package/renderers/webgpu/WebGPUInfo.cjs.js +0 -1
- package/renderers/webgpu/WebGPUObjects.cjs.js +0 -1
- package/renderers/webgpu/WebGPUProperties.cjs.js +0 -1
- package/renderers/webgpu/WebGPURenderLists.cjs.js +0 -1
- package/renderers/webgpu/WebGPURenderPipelines.cjs.js +0 -1
- package/renderers/webgpu/WebGPURenderer.cjs.js +0 -1
- package/renderers/webgpu/WebGPUSampledTexture.cjs.js +0 -1
- package/renderers/webgpu/WebGPUSampler.cjs.js +0 -1
- package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +0 -1
- package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +0 -1
- package/renderers/webgpu/WebGPUTextureUtils.cjs.js +0 -1
- package/renderers/webgpu/WebGPUTextures.cjs.js +0 -1
- package/renderers/webgpu/WebGPUUniform.cjs.js +0 -1
- package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +0 -1
- package/renderers/webgpu/constants.cjs.js +0 -1
- package/renderers/webgpu/nodes/ShaderLib.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +0 -1
- package/shaders/ACESFilmicToneMappingShader.cjs.js +0 -1
- package/shaders/AfterimageShader.cjs.js +0 -1
- package/shaders/BasicShader.cjs.js +0 -1
- package/shaders/BleachBypassShader.cjs.js +0 -1
- package/shaders/BlendShader.cjs.js +0 -1
- package/shaders/BokehShader.cjs.js +0 -1
- package/shaders/BokehShader2.cjs.js +0 -1
- package/shaders/BrightnessContrastShader.cjs.js +0 -1
- package/shaders/ColorCorrectionShader.cjs.js +0 -1
- package/shaders/ColorifyShader.cjs.js +0 -1
- package/shaders/ConvolutionShader.cjs.js +0 -1
- package/shaders/CopyShader.cjs.js +0 -1
- package/shaders/DOFMipMapShader.cjs.js +0 -1
- package/shaders/DepthLimitedBlurShader.cjs.js +0 -1
- package/shaders/DigitalGlitch.cjs.js +0 -1
- package/shaders/DotScreenShader.cjs.js +0 -1
- package/shaders/FXAAShader.cjs.js +0 -1
- package/shaders/FilmShader.cjs.js +0 -1
- package/shaders/FocusShader.cjs.js +0 -1
- package/shaders/FreiChenShader.cjs.js +0 -1
- package/shaders/FresnelShader.cjs.js +0 -1
- package/shaders/GammaCorrectionShader.cjs.js +0 -1
- package/shaders/GodRaysShader.cjs.js +0 -1
- package/shaders/HalftoneShader.cjs.js +0 -1
- package/shaders/HorizontalBlurShader.cjs.js +0 -1
- package/shaders/HorizontalTiltShiftShader.cjs.js +0 -1
- package/shaders/HueSaturationShader.cjs.js +0 -1
- package/shaders/KaleidoShader.cjs.js +0 -1
- package/shaders/LuminosityHighPassShader.cjs.js +0 -1
- package/shaders/LuminosityShader.cjs.js +0 -1
- package/shaders/MirrorShader.cjs.js +0 -1
- package/shaders/NormalMapShader.cjs.js +0 -1
- package/shaders/ParallaxShader.cjs.js +0 -1
- package/shaders/PixelShader.cjs.js +0 -1
- package/shaders/RGBShiftShader.cjs.js +0 -1
- package/shaders/SAOShader.cjs.js +0 -1
- package/shaders/SMAAShader.cjs.js +0 -1
- package/shaders/SSAOShader.cjs.js +0 -1
- package/shaders/SSRShader.cjs.js +0 -1
- package/shaders/SepiaShader.cjs.js +0 -1
- package/shaders/SobelOperatorShader.cjs.js +0 -1
- package/shaders/SubsurfaceScatteringShader.cjs.js +0 -1
- package/shaders/TechnicolorShader.cjs.js +0 -1
- package/shaders/ToneMapShader.cjs.js +0 -1
- package/shaders/ToonShader.cjs.js +0 -1
- package/shaders/TriangleBlurShader.cjs.js +0 -1
- package/shaders/UnpackDepthRGBAShader.cjs.js +0 -1
- package/shaders/VerticalBlurShader.cjs.js +0 -1
- package/shaders/VerticalTiltShiftShader.cjs.js +0 -1
- package/shaders/VignetteShader.cjs.js +0 -1
- package/shaders/VolumeShader.cjs.js +0 -1
- package/shaders/WaterRefractionShader.cjs.js +0 -1
- package/shaders/index.cjs.js +0 -1
- package/shaders/index.d.ts +0 -54
- package/shaders/index.js +0 -53
- package/shaders/types.cjs.js +0 -1
- package/textures/FlakesTexture.cjs.js +0 -1
- package/types/helpers.cjs.js +0 -1
- package/types/shared.cjs.js +0 -1
- package/types/shared.js +0 -1
- package/types/utils.cjs.js +0 -1
- package/types/utils.js +0 -1
- package/utils/BufferGeometryUtils.cjs.js +0 -1
- package/utils/GeometryCompressionUtils.cjs.js +0 -1
- package/utils/GeometryUtils.cjs.js +0 -1
- package/utils/LDrawUtils.cjs.js +0 -1
- package/utils/LDrawUtils.d.ts +0 -5
- package/utils/LDrawUtils.js +0 -144
- package/utils/RoughnessMipmapper.cjs.js +0 -1
- package/utils/SceneUtils.cjs.js +0 -1
- package/utils/ShadowMapViewer.cjs.js +0 -1
- package/utils/SkeletonUtils.cjs.js +0 -1
- package/utils/UVsDebug.cjs.js +0 -1
- package/utils/WorkerPool.cjs.js +0 -1
- package/webxr/ARButton.cjs.js +0 -1
- package/webxr/OculusHandModel.cjs.js +0 -1
- package/webxr/OculusHandPointerModel.cjs.js +0 -1
- package/webxr/Text2D.cjs.js +0 -1
- package/webxr/VRButton.cjs.js +0 -1
- package/webxr/XRControllerModelFactory.cjs.js +0 -1
- package/webxr/XREstimatedLight.cjs.js +0 -1
- package/webxr/XRHandMeshModel.cjs.js +0 -1
- package/webxr/XRHandModelFactory.cjs.js +0 -1
- package/webxr/XRHandPrimitiveModel.cjs.js +0 -1
package/loaders/ColladaLoader.js
CHANGED
|
@@ -1,255 +1,211 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const THREE = require("three");
|
|
4
|
+
const TGALoader = require("./TGALoader.js");
|
|
5
|
+
class ColladaLoader extends THREE.Loader {
|
|
5
6
|
constructor(manager) {
|
|
6
7
|
super(manager);
|
|
7
8
|
}
|
|
8
|
-
|
|
9
9
|
load(url, onLoad, onProgress, onError) {
|
|
10
10
|
const scope = this;
|
|
11
|
-
const path = scope.path ===
|
|
12
|
-
const loader = new FileLoader(scope.manager);
|
|
11
|
+
const path = scope.path === "" ? THREE.LoaderUtils.extractUrlBase(url) : scope.path;
|
|
12
|
+
const loader = new THREE.FileLoader(scope.manager);
|
|
13
13
|
loader.setPath(scope.path);
|
|
14
14
|
loader.setRequestHeader(scope.requestHeader);
|
|
15
15
|
loader.setWithCredentials(scope.withCredentials);
|
|
16
|
-
loader.load(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
loader.load(
|
|
17
|
+
url,
|
|
18
|
+
function(text) {
|
|
19
|
+
try {
|
|
20
|
+
onLoad(scope.parse(text, path));
|
|
21
|
+
} catch (e) {
|
|
22
|
+
if (onError) {
|
|
23
|
+
onError(e);
|
|
24
|
+
} else {
|
|
25
|
+
console.error(e);
|
|
26
|
+
}
|
|
27
|
+
scope.manager.itemError(url);
|
|
24
28
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
},
|
|
30
|
+
onProgress,
|
|
31
|
+
onError
|
|
32
|
+
);
|
|
29
33
|
}
|
|
30
|
-
|
|
31
34
|
parse(text, path) {
|
|
32
|
-
function getElementsByTagName(
|
|
33
|
-
// Non recursive xml.getElementsByTagName() ...
|
|
35
|
+
function getElementsByTagName(xml2, name) {
|
|
34
36
|
const array = [];
|
|
35
|
-
const childNodes =
|
|
36
|
-
|
|
37
|
+
const childNodes = xml2.childNodes;
|
|
37
38
|
for (let i = 0, l = childNodes.length; i < l; i++) {
|
|
38
39
|
const child = childNodes[i];
|
|
39
|
-
|
|
40
40
|
if (child.nodeName === name) {
|
|
41
41
|
array.push(child);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
-
|
|
45
44
|
return array;
|
|
46
45
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const parts =
|
|
46
|
+
function parseStrings(text2) {
|
|
47
|
+
if (text2.length === 0)
|
|
48
|
+
return [];
|
|
49
|
+
const parts = text2.trim().split(/\s+/);
|
|
51
50
|
const array = new Array(parts.length);
|
|
52
|
-
|
|
53
51
|
for (let i = 0, l = parts.length; i < l; i++) {
|
|
54
52
|
array[i] = parts[i];
|
|
55
53
|
}
|
|
56
|
-
|
|
57
54
|
return array;
|
|
58
55
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const parts =
|
|
56
|
+
function parseFloats(text2) {
|
|
57
|
+
if (text2.length === 0)
|
|
58
|
+
return [];
|
|
59
|
+
const parts = text2.trim().split(/\s+/);
|
|
63
60
|
const array = new Array(parts.length);
|
|
64
|
-
|
|
65
61
|
for (let i = 0, l = parts.length; i < l; i++) {
|
|
66
62
|
array[i] = parseFloat(parts[i]);
|
|
67
63
|
}
|
|
68
|
-
|
|
69
64
|
return array;
|
|
70
65
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const parts =
|
|
66
|
+
function parseInts(text2) {
|
|
67
|
+
if (text2.length === 0)
|
|
68
|
+
return [];
|
|
69
|
+
const parts = text2.trim().split(/\s+/);
|
|
75
70
|
const array = new Array(parts.length);
|
|
76
|
-
|
|
77
71
|
for (let i = 0, l = parts.length; i < l; i++) {
|
|
78
72
|
array[i] = parseInt(parts[i]);
|
|
79
73
|
}
|
|
80
|
-
|
|
81
74
|
return array;
|
|
82
75
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return text.substring(1);
|
|
76
|
+
function parseId(text2) {
|
|
77
|
+
return text2.substring(1);
|
|
86
78
|
}
|
|
87
|
-
|
|
88
79
|
function generateId() {
|
|
89
|
-
return
|
|
80
|
+
return "three_default_" + count++;
|
|
90
81
|
}
|
|
91
|
-
|
|
92
82
|
function isEmpty(object) {
|
|
93
83
|
return Object.keys(object).length === 0;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
function parseAsset(xml) {
|
|
84
|
+
}
|
|
85
|
+
function parseAsset(xml2) {
|
|
98
86
|
return {
|
|
99
|
-
unit: parseAssetUnit(getElementsByTagName(
|
|
100
|
-
upAxis: parseAssetUpAxis(getElementsByTagName(
|
|
87
|
+
unit: parseAssetUnit(getElementsByTagName(xml2, "unit")[0]),
|
|
88
|
+
upAxis: parseAssetUpAxis(getElementsByTagName(xml2, "up_axis")[0])
|
|
101
89
|
};
|
|
102
90
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return parseFloat(xml.getAttribute('meter'));
|
|
91
|
+
function parseAssetUnit(xml2) {
|
|
92
|
+
if (xml2 !== void 0 && xml2.hasAttribute("meter") === true) {
|
|
93
|
+
return parseFloat(xml2.getAttribute("meter"));
|
|
107
94
|
} else {
|
|
108
|
-
return 1;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const library = getElementsByTagName(xml, libraryName)[0];
|
|
119
|
-
|
|
120
|
-
if (library !== undefined) {
|
|
121
|
-
const elements = getElementsByTagName(library, nodeName);
|
|
122
|
-
|
|
95
|
+
return 1;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function parseAssetUpAxis(xml2) {
|
|
99
|
+
return xml2 !== void 0 ? xml2.textContent : "Y_UP";
|
|
100
|
+
}
|
|
101
|
+
function parseLibrary(xml2, libraryName, nodeName, parser) {
|
|
102
|
+
const library2 = getElementsByTagName(xml2, libraryName)[0];
|
|
103
|
+
if (library2 !== void 0) {
|
|
104
|
+
const elements = getElementsByTagName(library2, nodeName);
|
|
123
105
|
for (let i = 0; i < elements.length; i++) {
|
|
124
106
|
parser(elements[i]);
|
|
125
107
|
}
|
|
126
108
|
}
|
|
127
109
|
}
|
|
128
|
-
|
|
129
110
|
function buildLibrary(data, builder) {
|
|
130
111
|
for (const name in data) {
|
|
131
112
|
const object = data[name];
|
|
132
113
|
object.build = builder(data[name]);
|
|
133
114
|
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
|
|
115
|
+
}
|
|
137
116
|
function getBuild(data, builder) {
|
|
138
|
-
if (data.build !==
|
|
117
|
+
if (data.build !== void 0)
|
|
118
|
+
return data.build;
|
|
139
119
|
data.build = builder(data);
|
|
140
120
|
return data.build;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
function parseAnimation(xml) {
|
|
121
|
+
}
|
|
122
|
+
function parseAnimation(xml2) {
|
|
145
123
|
const data = {
|
|
146
124
|
sources: {},
|
|
147
125
|
samplers: {},
|
|
148
126
|
channels: {}
|
|
149
127
|
};
|
|
150
128
|
let hasChildren = false;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
129
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
130
|
+
const child = xml2.childNodes[i];
|
|
131
|
+
if (child.nodeType !== 1)
|
|
132
|
+
continue;
|
|
155
133
|
let id;
|
|
156
|
-
|
|
157
134
|
switch (child.nodeName) {
|
|
158
|
-
case
|
|
159
|
-
id = child.getAttribute(
|
|
135
|
+
case "source":
|
|
136
|
+
id = child.getAttribute("id");
|
|
160
137
|
data.sources[id] = parseSource(child);
|
|
161
138
|
break;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
id = child.getAttribute('id');
|
|
139
|
+
case "sampler":
|
|
140
|
+
id = child.getAttribute("id");
|
|
165
141
|
data.samplers[id] = parseAnimationSampler(child);
|
|
166
142
|
break;
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
id = child.getAttribute('target');
|
|
143
|
+
case "channel":
|
|
144
|
+
id = child.getAttribute("target");
|
|
170
145
|
data.channels[id] = parseAnimationChannel(child);
|
|
171
146
|
break;
|
|
172
|
-
|
|
173
|
-
case 'animation':
|
|
174
|
-
// hierarchy of related animations
|
|
147
|
+
case "animation":
|
|
175
148
|
parseAnimation(child);
|
|
176
149
|
hasChildren = true;
|
|
177
150
|
break;
|
|
178
|
-
|
|
179
151
|
default:
|
|
180
152
|
console.log(child);
|
|
181
153
|
}
|
|
182
154
|
}
|
|
183
|
-
|
|
184
155
|
if (hasChildren === false) {
|
|
185
|
-
|
|
186
|
-
library.animations[xml.getAttribute('id') || MathUtils.generateUUID()] = data;
|
|
156
|
+
library.animations[xml2.getAttribute("id") || THREE.MathUtils.generateUUID()] = data;
|
|
187
157
|
}
|
|
188
158
|
}
|
|
189
|
-
|
|
190
|
-
function parseAnimationSampler(xml) {
|
|
159
|
+
function parseAnimationSampler(xml2) {
|
|
191
160
|
const data = {
|
|
192
161
|
inputs: {}
|
|
193
162
|
};
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
163
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
164
|
+
const child = xml2.childNodes[i];
|
|
165
|
+
if (child.nodeType !== 1)
|
|
166
|
+
continue;
|
|
199
167
|
switch (child.nodeName) {
|
|
200
|
-
case
|
|
201
|
-
const id = parseId(child.getAttribute(
|
|
202
|
-
const semantic = child.getAttribute(
|
|
168
|
+
case "input":
|
|
169
|
+
const id = parseId(child.getAttribute("source"));
|
|
170
|
+
const semantic = child.getAttribute("semantic");
|
|
203
171
|
data.inputs[semantic] = id;
|
|
204
172
|
break;
|
|
205
173
|
}
|
|
206
174
|
}
|
|
207
|
-
|
|
208
175
|
return data;
|
|
209
176
|
}
|
|
210
|
-
|
|
211
|
-
function parseAnimationChannel(xml) {
|
|
177
|
+
function parseAnimationChannel(xml2) {
|
|
212
178
|
const data = {};
|
|
213
|
-
const target =
|
|
214
|
-
|
|
215
|
-
let parts = target.split('/');
|
|
179
|
+
const target = xml2.getAttribute("target");
|
|
180
|
+
let parts = target.split("/");
|
|
216
181
|
const id = parts.shift();
|
|
217
|
-
let sid = parts.shift();
|
|
218
|
-
|
|
219
|
-
const
|
|
220
|
-
const memberSyntax = sid.indexOf('.') !== -1;
|
|
221
|
-
|
|
182
|
+
let sid = parts.shift();
|
|
183
|
+
const arraySyntax = sid.indexOf("(") !== -1;
|
|
184
|
+
const memberSyntax = sid.indexOf(".") !== -1;
|
|
222
185
|
if (memberSyntax) {
|
|
223
|
-
|
|
224
|
-
parts = sid.split('.');
|
|
186
|
+
parts = sid.split(".");
|
|
225
187
|
sid = parts.shift();
|
|
226
188
|
data.member = parts.shift();
|
|
227
189
|
} else if (arraySyntax) {
|
|
228
|
-
|
|
229
|
-
const indices = sid.split('(');
|
|
190
|
+
const indices = sid.split("(");
|
|
230
191
|
sid = indices.shift();
|
|
231
|
-
|
|
232
192
|
for (let i = 0; i < indices.length; i++) {
|
|
233
|
-
indices[i] = parseInt(indices[i].replace(/\)/,
|
|
193
|
+
indices[i] = parseInt(indices[i].replace(/\)/, ""));
|
|
234
194
|
}
|
|
235
|
-
|
|
236
195
|
data.indices = indices;
|
|
237
196
|
}
|
|
238
|
-
|
|
239
197
|
data.id = id;
|
|
240
198
|
data.sid = sid;
|
|
241
199
|
data.arraySyntax = arraySyntax;
|
|
242
200
|
data.memberSyntax = memberSyntax;
|
|
243
|
-
data.sampler = parseId(
|
|
201
|
+
data.sampler = parseId(xml2.getAttribute("source"));
|
|
244
202
|
return data;
|
|
245
203
|
}
|
|
246
|
-
|
|
247
204
|
function buildAnimation(data) {
|
|
248
205
|
const tracks = [];
|
|
249
206
|
const channels = data.channels;
|
|
250
207
|
const samplers = data.samplers;
|
|
251
208
|
const sources = data.sources;
|
|
252
|
-
|
|
253
209
|
for (const target in channels) {
|
|
254
210
|
if (channels.hasOwnProperty(target)) {
|
|
255
211
|
const channel = channels[target];
|
|
@@ -262,14 +218,11 @@ class ColladaLoader extends Loader {
|
|
|
262
218
|
createKeyframeTracks(animation, tracks);
|
|
263
219
|
}
|
|
264
220
|
}
|
|
265
|
-
|
|
266
221
|
return tracks;
|
|
267
222
|
}
|
|
268
|
-
|
|
269
223
|
function getAnimation(id) {
|
|
270
224
|
return getBuild(library.animations[id], buildAnimation);
|
|
271
225
|
}
|
|
272
|
-
|
|
273
226
|
function buildAnimationChannel(channel, inputSource, outputSource) {
|
|
274
227
|
const node = library.nodes[channel.id];
|
|
275
228
|
const object3D = getNode(node.id);
|
|
@@ -277,16 +230,14 @@ class ColladaLoader extends Loader {
|
|
|
277
230
|
const defaultMatrix = node.matrix.clone().transpose();
|
|
278
231
|
let time, stride;
|
|
279
232
|
let i, il, j, jl;
|
|
280
|
-
const data = {};
|
|
281
|
-
// depending on the transform type (matrix, translate, rotate, scale), we execute different logic
|
|
282
|
-
|
|
233
|
+
const data = {};
|
|
283
234
|
switch (transform) {
|
|
284
|
-
case
|
|
235
|
+
case "matrix":
|
|
285
236
|
for (i = 0, il = inputSource.array.length; i < il; i++) {
|
|
286
237
|
time = inputSource.array[i];
|
|
287
238
|
stride = i * outputSource.stride;
|
|
288
|
-
if (data[time] ===
|
|
289
|
-
|
|
239
|
+
if (data[time] === void 0)
|
|
240
|
+
data[time] = {};
|
|
290
241
|
if (channel.arraySyntax === true) {
|
|
291
242
|
const value = outputSource.array[stride];
|
|
292
243
|
const index = channel.indices[0] + 4 * channel.indices[1];
|
|
@@ -297,58 +248,41 @@ class ColladaLoader extends Loader {
|
|
|
297
248
|
}
|
|
298
249
|
}
|
|
299
250
|
}
|
|
300
|
-
|
|
301
251
|
break;
|
|
302
|
-
|
|
303
|
-
case 'translate':
|
|
252
|
+
case "translate":
|
|
304
253
|
console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform);
|
|
305
254
|
break;
|
|
306
|
-
|
|
307
|
-
case 'rotate':
|
|
255
|
+
case "rotate":
|
|
308
256
|
console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform);
|
|
309
257
|
break;
|
|
310
|
-
|
|
311
|
-
case 'scale':
|
|
258
|
+
case "scale":
|
|
312
259
|
console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform);
|
|
313
260
|
break;
|
|
314
261
|
}
|
|
315
|
-
|
|
316
262
|
const keyframes = prepareAnimationData(data, defaultMatrix);
|
|
317
263
|
const animation = {
|
|
318
264
|
name: object3D.uuid,
|
|
319
|
-
keyframes
|
|
265
|
+
keyframes
|
|
320
266
|
};
|
|
321
267
|
return animation;
|
|
322
268
|
}
|
|
323
|
-
|
|
324
269
|
function prepareAnimationData(data, defaultMatrix) {
|
|
325
|
-
const keyframes = [];
|
|
326
|
-
|
|
270
|
+
const keyframes = [];
|
|
327
271
|
for (const time in data) {
|
|
328
|
-
keyframes.push({
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
});
|
|
332
|
-
} // ensure keyframes are sorted by time
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
keyframes.sort(ascending); // now we clean up all animation data, so we can use them for keyframe tracks
|
|
336
|
-
|
|
272
|
+
keyframes.push({ time: parseFloat(time), value: data[time] });
|
|
273
|
+
}
|
|
274
|
+
keyframes.sort(ascending);
|
|
337
275
|
for (let i = 0; i < 16; i++) {
|
|
338
276
|
transformAnimationData(keyframes, i, defaultMatrix.elements[i]);
|
|
339
277
|
}
|
|
340
|
-
|
|
341
|
-
return keyframes; // array sort function
|
|
342
|
-
|
|
278
|
+
return keyframes;
|
|
343
279
|
function ascending(a, b) {
|
|
344
280
|
return a.time - b.time;
|
|
345
281
|
}
|
|
346
282
|
}
|
|
347
|
-
|
|
348
|
-
const
|
|
349
|
-
const
|
|
350
|
-
const quaternion = new Quaternion();
|
|
351
|
-
|
|
283
|
+
const position = new THREE.Vector3();
|
|
284
|
+
const scale = new THREE.Vector3();
|
|
285
|
+
const quaternion = new THREE.Quaternion();
|
|
352
286
|
function createKeyframeTracks(animation, tracks) {
|
|
353
287
|
const keyframes = animation.keyframes;
|
|
354
288
|
const name = animation.name;
|
|
@@ -356,7 +290,6 @@ class ColladaLoader extends Loader {
|
|
|
356
290
|
const positionData = [];
|
|
357
291
|
const quaternionData = [];
|
|
358
292
|
const scaleData = [];
|
|
359
|
-
|
|
360
293
|
for (let i = 0, l = keyframes.length; i < l; i++) {
|
|
361
294
|
const keyframe = keyframes[i];
|
|
362
295
|
const time = keyframe.time;
|
|
@@ -368,274 +301,219 @@ class ColladaLoader extends Loader {
|
|
|
368
301
|
quaternionData.push(quaternion.x, quaternion.y, quaternion.z, quaternion.w);
|
|
369
302
|
scaleData.push(scale.x, scale.y, scale.z);
|
|
370
303
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
304
|
+
if (positionData.length > 0)
|
|
305
|
+
tracks.push(new THREE.VectorKeyframeTrack(name + ".position", times, positionData));
|
|
374
306
|
if (quaternionData.length > 0) {
|
|
375
|
-
tracks.push(new QuaternionKeyframeTrack(name +
|
|
307
|
+
tracks.push(new THREE.QuaternionKeyframeTrack(name + ".quaternion", times, quaternionData));
|
|
376
308
|
}
|
|
377
|
-
|
|
378
|
-
|
|
309
|
+
if (scaleData.length > 0)
|
|
310
|
+
tracks.push(new THREE.VectorKeyframeTrack(name + ".scale", times, scaleData));
|
|
379
311
|
return tracks;
|
|
380
312
|
}
|
|
381
|
-
|
|
382
313
|
function transformAnimationData(keyframes, property, defaultValue) {
|
|
383
314
|
let keyframe;
|
|
384
315
|
let empty = true;
|
|
385
|
-
let i, l;
|
|
386
|
-
|
|
316
|
+
let i, l;
|
|
387
317
|
for (i = 0, l = keyframes.length; i < l; i++) {
|
|
388
318
|
keyframe = keyframes[i];
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
keyframe.value[property] = null; // mark as missing
|
|
319
|
+
if (keyframe.value[property] === void 0) {
|
|
320
|
+
keyframe.value[property] = null;
|
|
392
321
|
} else {
|
|
393
322
|
empty = false;
|
|
394
323
|
}
|
|
395
324
|
}
|
|
396
|
-
|
|
397
325
|
if (empty === true) {
|
|
398
|
-
// no values at all, so we set a default value
|
|
399
326
|
for (i = 0, l = keyframes.length; i < l; i++) {
|
|
400
327
|
keyframe = keyframes[i];
|
|
401
328
|
keyframe.value[property] = defaultValue;
|
|
402
329
|
}
|
|
403
330
|
} else {
|
|
404
|
-
// filling gaps
|
|
405
331
|
createMissingKeyframes(keyframes, property);
|
|
406
332
|
}
|
|
407
333
|
}
|
|
408
|
-
|
|
409
334
|
function createMissingKeyframes(keyframes, property) {
|
|
410
335
|
let prev, next;
|
|
411
|
-
|
|
412
336
|
for (let i = 0, l = keyframes.length; i < l; i++) {
|
|
413
337
|
const keyframe = keyframes[i];
|
|
414
|
-
|
|
415
338
|
if (keyframe.value[property] === null) {
|
|
416
339
|
prev = getPrev(keyframes, i, property);
|
|
417
340
|
next = getNext(keyframes, i, property);
|
|
418
|
-
|
|
419
341
|
if (prev === null) {
|
|
420
342
|
keyframe.value[property] = next.value[property];
|
|
421
343
|
continue;
|
|
422
344
|
}
|
|
423
|
-
|
|
424
345
|
if (next === null) {
|
|
425
346
|
keyframe.value[property] = prev.value[property];
|
|
426
347
|
continue;
|
|
427
348
|
}
|
|
428
|
-
|
|
429
349
|
interpolate(keyframe, prev, next, property);
|
|
430
350
|
}
|
|
431
351
|
}
|
|
432
352
|
}
|
|
433
|
-
|
|
434
353
|
function getPrev(keyframes, i, property) {
|
|
435
354
|
while (i >= 0) {
|
|
436
355
|
const keyframe = keyframes[i];
|
|
437
|
-
if (keyframe.value[property] !== null)
|
|
356
|
+
if (keyframe.value[property] !== null)
|
|
357
|
+
return keyframe;
|
|
438
358
|
i--;
|
|
439
359
|
}
|
|
440
|
-
|
|
441
360
|
return null;
|
|
442
361
|
}
|
|
443
|
-
|
|
444
362
|
function getNext(keyframes, i, property) {
|
|
445
363
|
while (i < keyframes.length) {
|
|
446
364
|
const keyframe = keyframes[i];
|
|
447
|
-
if (keyframe.value[property] !== null)
|
|
365
|
+
if (keyframe.value[property] !== null)
|
|
366
|
+
return keyframe;
|
|
448
367
|
i++;
|
|
449
368
|
}
|
|
450
|
-
|
|
451
369
|
return null;
|
|
452
370
|
}
|
|
453
|
-
|
|
454
371
|
function interpolate(key, prev, next, property) {
|
|
455
372
|
if (next.time - prev.time === 0) {
|
|
456
373
|
key.value[property] = prev.value[property];
|
|
457
374
|
return;
|
|
458
375
|
}
|
|
459
|
-
|
|
460
376
|
key.value[property] = (key.time - prev.time) * (next.value[property] - prev.value[property]) / (next.time - prev.time) + prev.value[property];
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
function parseAnimationClip(xml) {
|
|
377
|
+
}
|
|
378
|
+
function parseAnimationClip(xml2) {
|
|
465
379
|
const data = {
|
|
466
|
-
name:
|
|
467
|
-
start: parseFloat(
|
|
468
|
-
end: parseFloat(
|
|
380
|
+
name: xml2.getAttribute("id") || "default",
|
|
381
|
+
start: parseFloat(xml2.getAttribute("start") || 0),
|
|
382
|
+
end: parseFloat(xml2.getAttribute("end") || 0),
|
|
469
383
|
animations: []
|
|
470
384
|
};
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
385
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
386
|
+
const child = xml2.childNodes[i];
|
|
387
|
+
if (child.nodeType !== 1)
|
|
388
|
+
continue;
|
|
476
389
|
switch (child.nodeName) {
|
|
477
|
-
case
|
|
478
|
-
data.animations.push(parseId(child.getAttribute(
|
|
390
|
+
case "instance_animation":
|
|
391
|
+
data.animations.push(parseId(child.getAttribute("url")));
|
|
479
392
|
break;
|
|
480
393
|
}
|
|
481
394
|
}
|
|
482
|
-
|
|
483
|
-
library.clips[xml.getAttribute('id')] = data;
|
|
395
|
+
library.clips[xml2.getAttribute("id")] = data;
|
|
484
396
|
}
|
|
485
|
-
|
|
486
397
|
function buildAnimationClip(data) {
|
|
487
398
|
const tracks = [];
|
|
488
399
|
const name = data.name;
|
|
489
400
|
const duration = data.end - data.start || -1;
|
|
490
|
-
const
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
const animationTracks = getAnimation(animations[i]);
|
|
494
|
-
|
|
401
|
+
const animations2 = data.animations;
|
|
402
|
+
for (let i = 0, il = animations2.length; i < il; i++) {
|
|
403
|
+
const animationTracks = getAnimation(animations2[i]);
|
|
495
404
|
for (let j = 0, jl = animationTracks.length; j < jl; j++) {
|
|
496
405
|
tracks.push(animationTracks[j]);
|
|
497
406
|
}
|
|
498
407
|
}
|
|
499
|
-
|
|
500
|
-
return new AnimationClip(name, duration, tracks);
|
|
408
|
+
return new THREE.AnimationClip(name, duration, tracks);
|
|
501
409
|
}
|
|
502
|
-
|
|
503
410
|
function getAnimationClip(id) {
|
|
504
411
|
return getBuild(library.clips[id], buildAnimationClip);
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
function parseController(xml) {
|
|
412
|
+
}
|
|
413
|
+
function parseController(xml2) {
|
|
509
414
|
const data = {};
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
415
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
416
|
+
const child = xml2.childNodes[i];
|
|
417
|
+
if (child.nodeType !== 1)
|
|
418
|
+
continue;
|
|
515
419
|
switch (child.nodeName) {
|
|
516
|
-
case
|
|
517
|
-
|
|
518
|
-
data.id = parseId(child.getAttribute('source'));
|
|
420
|
+
case "skin":
|
|
421
|
+
data.id = parseId(child.getAttribute("source"));
|
|
519
422
|
data.skin = parseSkin(child);
|
|
520
423
|
break;
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
console.warn('THREE.ColladaLoader: Morph target animation not supported yet.');
|
|
424
|
+
case "morph":
|
|
425
|
+
data.id = parseId(child.getAttribute("source"));
|
|
426
|
+
console.warn("THREE.ColladaLoader: Morph target animation not supported yet.");
|
|
525
427
|
break;
|
|
526
428
|
}
|
|
527
429
|
}
|
|
528
|
-
|
|
529
|
-
library.controllers[xml.getAttribute('id')] = data;
|
|
430
|
+
library.controllers[xml2.getAttribute("id")] = data;
|
|
530
431
|
}
|
|
531
|
-
|
|
532
|
-
function parseSkin(xml) {
|
|
432
|
+
function parseSkin(xml2) {
|
|
533
433
|
const data = {
|
|
534
434
|
sources: {}
|
|
535
435
|
};
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
436
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
437
|
+
const child = xml2.childNodes[i];
|
|
438
|
+
if (child.nodeType !== 1)
|
|
439
|
+
continue;
|
|
541
440
|
switch (child.nodeName) {
|
|
542
|
-
case
|
|
441
|
+
case "bind_shape_matrix":
|
|
543
442
|
data.bindShapeMatrix = parseFloats(child.textContent);
|
|
544
443
|
break;
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
const id = child.getAttribute('id');
|
|
444
|
+
case "source":
|
|
445
|
+
const id = child.getAttribute("id");
|
|
548
446
|
data.sources[id] = parseSource(child);
|
|
549
447
|
break;
|
|
550
|
-
|
|
551
|
-
case 'joints':
|
|
448
|
+
case "joints":
|
|
552
449
|
data.joints = parseJoints(child);
|
|
553
450
|
break;
|
|
554
|
-
|
|
555
|
-
case 'vertex_weights':
|
|
451
|
+
case "vertex_weights":
|
|
556
452
|
data.vertexWeights = parseVertexWeights(child);
|
|
557
453
|
break;
|
|
558
454
|
}
|
|
559
455
|
}
|
|
560
|
-
|
|
561
456
|
return data;
|
|
562
457
|
}
|
|
563
|
-
|
|
564
|
-
function parseJoints(xml) {
|
|
458
|
+
function parseJoints(xml2) {
|
|
565
459
|
const data = {
|
|
566
460
|
inputs: {}
|
|
567
461
|
};
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
462
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
463
|
+
const child = xml2.childNodes[i];
|
|
464
|
+
if (child.nodeType !== 1)
|
|
465
|
+
continue;
|
|
573
466
|
switch (child.nodeName) {
|
|
574
|
-
case
|
|
575
|
-
const semantic = child.getAttribute(
|
|
576
|
-
const id = parseId(child.getAttribute(
|
|
467
|
+
case "input":
|
|
468
|
+
const semantic = child.getAttribute("semantic");
|
|
469
|
+
const id = parseId(child.getAttribute("source"));
|
|
577
470
|
data.inputs[semantic] = id;
|
|
578
471
|
break;
|
|
579
472
|
}
|
|
580
473
|
}
|
|
581
|
-
|
|
582
474
|
return data;
|
|
583
475
|
}
|
|
584
|
-
|
|
585
|
-
function parseVertexWeights(xml) {
|
|
476
|
+
function parseVertexWeights(xml2) {
|
|
586
477
|
const data = {
|
|
587
478
|
inputs: {}
|
|
588
479
|
};
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
480
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
481
|
+
const child = xml2.childNodes[i];
|
|
482
|
+
if (child.nodeType !== 1)
|
|
483
|
+
continue;
|
|
594
484
|
switch (child.nodeName) {
|
|
595
|
-
case
|
|
596
|
-
const semantic = child.getAttribute(
|
|
597
|
-
const id = parseId(child.getAttribute(
|
|
598
|
-
const offset = parseInt(child.getAttribute(
|
|
599
|
-
data.inputs[semantic] = {
|
|
600
|
-
id: id,
|
|
601
|
-
offset: offset
|
|
602
|
-
};
|
|
485
|
+
case "input":
|
|
486
|
+
const semantic = child.getAttribute("semantic");
|
|
487
|
+
const id = parseId(child.getAttribute("source"));
|
|
488
|
+
const offset = parseInt(child.getAttribute("offset"));
|
|
489
|
+
data.inputs[semantic] = { id, offset };
|
|
603
490
|
break;
|
|
604
|
-
|
|
605
|
-
case 'vcount':
|
|
491
|
+
case "vcount":
|
|
606
492
|
data.vcount = parseInts(child.textContent);
|
|
607
493
|
break;
|
|
608
|
-
|
|
609
|
-
case 'v':
|
|
494
|
+
case "v":
|
|
610
495
|
data.v = parseInts(child.textContent);
|
|
611
496
|
break;
|
|
612
497
|
}
|
|
613
498
|
}
|
|
614
|
-
|
|
615
499
|
return data;
|
|
616
500
|
}
|
|
617
|
-
|
|
618
501
|
function buildController(data) {
|
|
619
502
|
const build = {
|
|
620
503
|
id: data.id
|
|
621
504
|
};
|
|
622
505
|
const geometry = library.geometries[build.id];
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
build.skin = buildSkin(data.skin); // we enhance the 'sources' property of the corresponding geometry with our skin data
|
|
626
|
-
|
|
506
|
+
if (data.skin !== void 0) {
|
|
507
|
+
build.skin = buildSkin(data.skin);
|
|
627
508
|
geometry.sources.skinIndices = build.skin.indices;
|
|
628
509
|
geometry.sources.skinWeights = build.skin.weights;
|
|
629
510
|
}
|
|
630
|
-
|
|
631
511
|
return build;
|
|
632
512
|
}
|
|
633
|
-
|
|
634
513
|
function buildSkin(data) {
|
|
635
514
|
const BONE_LIMIT = 4;
|
|
636
515
|
const build = {
|
|
637
516
|
joints: [],
|
|
638
|
-
// this must be an array to preserve the joint order
|
|
639
517
|
indices: {
|
|
640
518
|
array: [],
|
|
641
519
|
stride: BONE_LIMIT
|
|
@@ -655,33 +533,21 @@ class ColladaLoader extends Loader {
|
|
|
655
533
|
const inverseSource = data.sources[data.joints.inputs.INV_BIND_MATRIX];
|
|
656
534
|
const weights = sources[vertexWeights.inputs.WEIGHT.id].array;
|
|
657
535
|
let stride = 0;
|
|
658
|
-
let i, j, l;
|
|
659
|
-
|
|
536
|
+
let i, j, l;
|
|
660
537
|
for (i = 0, l = vcount.length; i < l; i++) {
|
|
661
|
-
const jointCount = vcount[i];
|
|
662
|
-
|
|
538
|
+
const jointCount = vcount[i];
|
|
663
539
|
const vertexSkinData = [];
|
|
664
|
-
|
|
665
540
|
for (j = 0; j < jointCount; j++) {
|
|
666
541
|
const skinIndex = v[stride + jointOffset];
|
|
667
542
|
const weightId = v[stride + weightOffset];
|
|
668
543
|
const skinWeight = weights[weightId];
|
|
669
|
-
vertexSkinData.push({
|
|
670
|
-
index: skinIndex,
|
|
671
|
-
weight: skinWeight
|
|
672
|
-
});
|
|
544
|
+
vertexSkinData.push({ index: skinIndex, weight: skinWeight });
|
|
673
545
|
stride += 2;
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
vertexSkinData.sort(descending); // now we provide for each vertex a set of four index and weight values.
|
|
679
|
-
// the order of the skin data matches the order of vertices
|
|
680
|
-
|
|
546
|
+
}
|
|
547
|
+
vertexSkinData.sort(descending);
|
|
681
548
|
for (j = 0; j < BONE_LIMIT; j++) {
|
|
682
549
|
const d = vertexSkinData[j];
|
|
683
|
-
|
|
684
|
-
if (d !== undefined) {
|
|
550
|
+
if (d !== void 0) {
|
|
685
551
|
build.indices.array.push(d.index);
|
|
686
552
|
build.weights.array.push(d.weight);
|
|
687
553
|
} else {
|
|
@@ -689,468 +555,377 @@ class ColladaLoader extends Loader {
|
|
|
689
555
|
build.weights.array.push(0);
|
|
690
556
|
}
|
|
691
557
|
}
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
|
|
558
|
+
}
|
|
695
559
|
if (data.bindShapeMatrix) {
|
|
696
|
-
build.bindMatrix = new Matrix4().fromArray(data.bindShapeMatrix).transpose();
|
|
560
|
+
build.bindMatrix = new THREE.Matrix4().fromArray(data.bindShapeMatrix).transpose();
|
|
697
561
|
} else {
|
|
698
|
-
build.bindMatrix = new Matrix4().identity();
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
|
|
562
|
+
build.bindMatrix = new THREE.Matrix4().identity();
|
|
563
|
+
}
|
|
702
564
|
for (i = 0, l = jointSource.array.length; i < l; i++) {
|
|
703
565
|
const name = jointSource.array[i];
|
|
704
|
-
const boneInverse = new Matrix4().fromArray(inverseSource.array, i * inverseSource.stride).transpose();
|
|
705
|
-
build.joints.push({
|
|
706
|
-
name: name,
|
|
707
|
-
boneInverse: boneInverse
|
|
708
|
-
});
|
|
566
|
+
const boneInverse = new THREE.Matrix4().fromArray(inverseSource.array, i * inverseSource.stride).transpose();
|
|
567
|
+
build.joints.push({ name, boneInverse });
|
|
709
568
|
}
|
|
710
|
-
|
|
711
|
-
return build; // array sort function
|
|
712
|
-
|
|
569
|
+
return build;
|
|
713
570
|
function descending(a, b) {
|
|
714
571
|
return b.weight - a.weight;
|
|
715
572
|
}
|
|
716
573
|
}
|
|
717
|
-
|
|
718
574
|
function getController(id) {
|
|
719
575
|
return getBuild(library.controllers[id], buildController);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
function parseImage(xml) {
|
|
576
|
+
}
|
|
577
|
+
function parseImage(xml2) {
|
|
724
578
|
const data = {
|
|
725
|
-
init_from: getElementsByTagName(
|
|
579
|
+
init_from: getElementsByTagName(xml2, "init_from")[0].textContent
|
|
726
580
|
};
|
|
727
|
-
library.images[
|
|
581
|
+
library.images[xml2.getAttribute("id")] = data;
|
|
728
582
|
}
|
|
729
|
-
|
|
730
583
|
function buildImage(data) {
|
|
731
|
-
if (data.build !==
|
|
584
|
+
if (data.build !== void 0)
|
|
585
|
+
return data.build;
|
|
732
586
|
return data.init_from;
|
|
733
587
|
}
|
|
734
|
-
|
|
735
588
|
function getImage(id) {
|
|
736
589
|
const data = library.images[id];
|
|
737
|
-
|
|
738
|
-
if (data !== undefined) {
|
|
590
|
+
if (data !== void 0) {
|
|
739
591
|
return getBuild(data, buildImage);
|
|
740
592
|
}
|
|
741
|
-
|
|
742
593
|
console.warn("THREE.ColladaLoader: Couldn't find image with ID:", id);
|
|
743
594
|
return null;
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
function parseEffect(xml) {
|
|
595
|
+
}
|
|
596
|
+
function parseEffect(xml2) {
|
|
748
597
|
const data = {};
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
598
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
599
|
+
const child = xml2.childNodes[i];
|
|
600
|
+
if (child.nodeType !== 1)
|
|
601
|
+
continue;
|
|
754
602
|
switch (child.nodeName) {
|
|
755
|
-
case
|
|
603
|
+
case "profile_COMMON":
|
|
756
604
|
data.profile = parseEffectProfileCOMMON(child);
|
|
757
605
|
break;
|
|
758
606
|
}
|
|
759
607
|
}
|
|
760
|
-
|
|
761
|
-
library.effects[xml.getAttribute('id')] = data;
|
|
608
|
+
library.effects[xml2.getAttribute("id")] = data;
|
|
762
609
|
}
|
|
763
|
-
|
|
764
|
-
function parseEffectProfileCOMMON(xml) {
|
|
610
|
+
function parseEffectProfileCOMMON(xml2) {
|
|
765
611
|
const data = {
|
|
766
612
|
surfaces: {},
|
|
767
613
|
samplers: {}
|
|
768
614
|
};
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
615
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
616
|
+
const child = xml2.childNodes[i];
|
|
617
|
+
if (child.nodeType !== 1)
|
|
618
|
+
continue;
|
|
774
619
|
switch (child.nodeName) {
|
|
775
|
-
case
|
|
620
|
+
case "newparam":
|
|
776
621
|
parseEffectNewparam(child, data);
|
|
777
622
|
break;
|
|
778
|
-
|
|
779
|
-
case 'technique':
|
|
623
|
+
case "technique":
|
|
780
624
|
data.technique = parseEffectTechnique(child);
|
|
781
625
|
break;
|
|
782
|
-
|
|
783
|
-
case 'extra':
|
|
626
|
+
case "extra":
|
|
784
627
|
data.extra = parseEffectExtra(child);
|
|
785
628
|
break;
|
|
786
629
|
}
|
|
787
630
|
}
|
|
788
|
-
|
|
789
631
|
return data;
|
|
790
632
|
}
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
if (child.nodeType !== 1) continue;
|
|
798
|
-
|
|
633
|
+
function parseEffectNewparam(xml2, data) {
|
|
634
|
+
const sid = xml2.getAttribute("sid");
|
|
635
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
636
|
+
const child = xml2.childNodes[i];
|
|
637
|
+
if (child.nodeType !== 1)
|
|
638
|
+
continue;
|
|
799
639
|
switch (child.nodeName) {
|
|
800
|
-
case
|
|
640
|
+
case "surface":
|
|
801
641
|
data.surfaces[sid] = parseEffectSurface(child);
|
|
802
642
|
break;
|
|
803
|
-
|
|
804
|
-
case 'sampler2D':
|
|
643
|
+
case "sampler2D":
|
|
805
644
|
data.samplers[sid] = parseEffectSampler(child);
|
|
806
645
|
break;
|
|
807
646
|
}
|
|
808
647
|
}
|
|
809
648
|
}
|
|
810
|
-
|
|
811
|
-
function parseEffectSurface(xml) {
|
|
649
|
+
function parseEffectSurface(xml2) {
|
|
812
650
|
const data = {};
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
651
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
652
|
+
const child = xml2.childNodes[i];
|
|
653
|
+
if (child.nodeType !== 1)
|
|
654
|
+
continue;
|
|
818
655
|
switch (child.nodeName) {
|
|
819
|
-
case
|
|
656
|
+
case "init_from":
|
|
820
657
|
data.init_from = child.textContent;
|
|
821
658
|
break;
|
|
822
659
|
}
|
|
823
660
|
}
|
|
824
|
-
|
|
825
661
|
return data;
|
|
826
662
|
}
|
|
827
|
-
|
|
828
|
-
function parseEffectSampler(xml) {
|
|
663
|
+
function parseEffectSampler(xml2) {
|
|
829
664
|
const data = {};
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
665
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
666
|
+
const child = xml2.childNodes[i];
|
|
667
|
+
if (child.nodeType !== 1)
|
|
668
|
+
continue;
|
|
835
669
|
switch (child.nodeName) {
|
|
836
|
-
case
|
|
670
|
+
case "source":
|
|
837
671
|
data.source = child.textContent;
|
|
838
672
|
break;
|
|
839
673
|
}
|
|
840
674
|
}
|
|
841
|
-
|
|
842
675
|
return data;
|
|
843
676
|
}
|
|
844
|
-
|
|
845
|
-
function parseEffectTechnique(xml) {
|
|
677
|
+
function parseEffectTechnique(xml2) {
|
|
846
678
|
const data = {};
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
679
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
680
|
+
const child = xml2.childNodes[i];
|
|
681
|
+
if (child.nodeType !== 1)
|
|
682
|
+
continue;
|
|
852
683
|
switch (child.nodeName) {
|
|
853
|
-
case
|
|
854
|
-
case
|
|
855
|
-
case
|
|
856
|
-
case
|
|
684
|
+
case "constant":
|
|
685
|
+
case "lambert":
|
|
686
|
+
case "blinn":
|
|
687
|
+
case "phong":
|
|
857
688
|
data.type = child.nodeName;
|
|
858
689
|
data.parameters = parseEffectParameters(child);
|
|
859
690
|
break;
|
|
860
|
-
|
|
861
|
-
case 'extra':
|
|
691
|
+
case "extra":
|
|
862
692
|
data.extra = parseEffectExtra(child);
|
|
863
693
|
break;
|
|
864
694
|
}
|
|
865
695
|
}
|
|
866
|
-
|
|
867
696
|
return data;
|
|
868
697
|
}
|
|
869
|
-
|
|
870
|
-
function parseEffectParameters(xml) {
|
|
698
|
+
function parseEffectParameters(xml2) {
|
|
871
699
|
const data = {};
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
700
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
701
|
+
const child = xml2.childNodes[i];
|
|
702
|
+
if (child.nodeType !== 1)
|
|
703
|
+
continue;
|
|
877
704
|
switch (child.nodeName) {
|
|
878
|
-
case
|
|
879
|
-
case
|
|
880
|
-
case
|
|
881
|
-
case
|
|
882
|
-
case
|
|
883
|
-
case
|
|
884
|
-
case
|
|
705
|
+
case "emission":
|
|
706
|
+
case "diffuse":
|
|
707
|
+
case "specular":
|
|
708
|
+
case "bump":
|
|
709
|
+
case "ambient":
|
|
710
|
+
case "shininess":
|
|
711
|
+
case "transparency":
|
|
885
712
|
data[child.nodeName] = parseEffectParameter(child);
|
|
886
713
|
break;
|
|
887
|
-
|
|
888
|
-
case 'transparent':
|
|
714
|
+
case "transparent":
|
|
889
715
|
data[child.nodeName] = {
|
|
890
|
-
opaque: child.hasAttribute(
|
|
716
|
+
opaque: child.hasAttribute("opaque") ? child.getAttribute("opaque") : "A_ONE",
|
|
891
717
|
data: parseEffectParameter(child)
|
|
892
718
|
};
|
|
893
719
|
break;
|
|
894
720
|
}
|
|
895
721
|
}
|
|
896
|
-
|
|
897
722
|
return data;
|
|
898
723
|
}
|
|
899
|
-
|
|
900
|
-
function parseEffectParameter(xml) {
|
|
724
|
+
function parseEffectParameter(xml2) {
|
|
901
725
|
const data = {};
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
726
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
727
|
+
const child = xml2.childNodes[i];
|
|
728
|
+
if (child.nodeType !== 1)
|
|
729
|
+
continue;
|
|
907
730
|
switch (child.nodeName) {
|
|
908
|
-
case
|
|
731
|
+
case "color":
|
|
909
732
|
data[child.nodeName] = parseFloats(child.textContent);
|
|
910
733
|
break;
|
|
911
|
-
|
|
912
|
-
case 'float':
|
|
734
|
+
case "float":
|
|
913
735
|
data[child.nodeName] = parseFloat(child.textContent);
|
|
914
736
|
break;
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
data[child.nodeName] = {
|
|
918
|
-
id: child.getAttribute('texture'),
|
|
919
|
-
extra: parseEffectParameterTexture(child)
|
|
920
|
-
};
|
|
737
|
+
case "texture":
|
|
738
|
+
data[child.nodeName] = { id: child.getAttribute("texture"), extra: parseEffectParameterTexture(child) };
|
|
921
739
|
break;
|
|
922
740
|
}
|
|
923
741
|
}
|
|
924
|
-
|
|
925
742
|
return data;
|
|
926
743
|
}
|
|
927
|
-
|
|
928
|
-
function parseEffectParameterTexture(xml) {
|
|
744
|
+
function parseEffectParameterTexture(xml2) {
|
|
929
745
|
const data = {
|
|
930
746
|
technique: {}
|
|
931
747
|
};
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
748
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
749
|
+
const child = xml2.childNodes[i];
|
|
750
|
+
if (child.nodeType !== 1)
|
|
751
|
+
continue;
|
|
937
752
|
switch (child.nodeName) {
|
|
938
|
-
case
|
|
753
|
+
case "extra":
|
|
939
754
|
parseEffectParameterTextureExtra(child, data);
|
|
940
755
|
break;
|
|
941
756
|
}
|
|
942
757
|
}
|
|
943
|
-
|
|
944
758
|
return data;
|
|
945
759
|
}
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
760
|
+
function parseEffectParameterTextureExtra(xml2, data) {
|
|
761
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
762
|
+
const child = xml2.childNodes[i];
|
|
763
|
+
if (child.nodeType !== 1)
|
|
764
|
+
continue;
|
|
952
765
|
switch (child.nodeName) {
|
|
953
|
-
case
|
|
766
|
+
case "technique":
|
|
954
767
|
parseEffectParameterTextureExtraTechnique(child, data);
|
|
955
768
|
break;
|
|
956
769
|
}
|
|
957
770
|
}
|
|
958
771
|
}
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
772
|
+
function parseEffectParameterTextureExtraTechnique(xml2, data) {
|
|
773
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
774
|
+
const child = xml2.childNodes[i];
|
|
775
|
+
if (child.nodeType !== 1)
|
|
776
|
+
continue;
|
|
965
777
|
switch (child.nodeName) {
|
|
966
|
-
case
|
|
967
|
-
case
|
|
968
|
-
case
|
|
969
|
-
case
|
|
778
|
+
case "repeatU":
|
|
779
|
+
case "repeatV":
|
|
780
|
+
case "offsetU":
|
|
781
|
+
case "offsetV":
|
|
970
782
|
data.technique[child.nodeName] = parseFloat(child.textContent);
|
|
971
783
|
break;
|
|
972
|
-
|
|
973
|
-
case
|
|
974
|
-
|
|
975
|
-
// some files have values for wrapU/wrapV which become NaN via parseInt
|
|
976
|
-
if (child.textContent.toUpperCase() === 'TRUE') {
|
|
784
|
+
case "wrapU":
|
|
785
|
+
case "wrapV":
|
|
786
|
+
if (child.textContent.toUpperCase() === "TRUE") {
|
|
977
787
|
data.technique[child.nodeName] = 1;
|
|
978
|
-
} else if (child.textContent.toUpperCase() ===
|
|
788
|
+
} else if (child.textContent.toUpperCase() === "FALSE") {
|
|
979
789
|
data.technique[child.nodeName] = 0;
|
|
980
790
|
} else {
|
|
981
791
|
data.technique[child.nodeName] = parseInt(child.textContent);
|
|
982
792
|
}
|
|
983
|
-
|
|
984
793
|
break;
|
|
985
|
-
|
|
986
|
-
case 'bump':
|
|
794
|
+
case "bump":
|
|
987
795
|
data[child.nodeName] = parseEffectExtraTechniqueBump(child);
|
|
988
796
|
break;
|
|
989
797
|
}
|
|
990
798
|
}
|
|
991
799
|
}
|
|
992
|
-
|
|
993
|
-
function parseEffectExtra(xml) {
|
|
800
|
+
function parseEffectExtra(xml2) {
|
|
994
801
|
const data = {};
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
802
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
803
|
+
const child = xml2.childNodes[i];
|
|
804
|
+
if (child.nodeType !== 1)
|
|
805
|
+
continue;
|
|
1000
806
|
switch (child.nodeName) {
|
|
1001
|
-
case
|
|
807
|
+
case "technique":
|
|
1002
808
|
data.technique = parseEffectExtraTechnique(child);
|
|
1003
809
|
break;
|
|
1004
810
|
}
|
|
1005
811
|
}
|
|
1006
|
-
|
|
1007
812
|
return data;
|
|
1008
813
|
}
|
|
1009
|
-
|
|
1010
|
-
function parseEffectExtraTechnique(xml) {
|
|
814
|
+
function parseEffectExtraTechnique(xml2) {
|
|
1011
815
|
const data = {};
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
816
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
817
|
+
const child = xml2.childNodes[i];
|
|
818
|
+
if (child.nodeType !== 1)
|
|
819
|
+
continue;
|
|
1017
820
|
switch (child.nodeName) {
|
|
1018
|
-
case
|
|
821
|
+
case "double_sided":
|
|
1019
822
|
data[child.nodeName] = parseInt(child.textContent);
|
|
1020
823
|
break;
|
|
1021
|
-
|
|
1022
|
-
case 'bump':
|
|
824
|
+
case "bump":
|
|
1023
825
|
data[child.nodeName] = parseEffectExtraTechniqueBump(child);
|
|
1024
826
|
break;
|
|
1025
827
|
}
|
|
1026
828
|
}
|
|
1027
|
-
|
|
1028
829
|
return data;
|
|
1029
830
|
}
|
|
1030
|
-
|
|
1031
|
-
function parseEffectExtraTechniqueBump(xml) {
|
|
831
|
+
function parseEffectExtraTechniqueBump(xml2) {
|
|
1032
832
|
var data = {};
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
833
|
+
for (var i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
834
|
+
var child = xml2.childNodes[i];
|
|
835
|
+
if (child.nodeType !== 1)
|
|
836
|
+
continue;
|
|
1038
837
|
switch (child.nodeName) {
|
|
1039
|
-
case
|
|
838
|
+
case "texture":
|
|
1040
839
|
data[child.nodeName] = {
|
|
1041
|
-
id: child.getAttribute(
|
|
1042
|
-
texcoord: child.getAttribute(
|
|
840
|
+
id: child.getAttribute("texture"),
|
|
841
|
+
texcoord: child.getAttribute("texcoord"),
|
|
1043
842
|
extra: parseEffectParameterTexture(child)
|
|
1044
843
|
};
|
|
1045
844
|
break;
|
|
1046
845
|
}
|
|
1047
846
|
}
|
|
1048
|
-
|
|
1049
847
|
return data;
|
|
1050
848
|
}
|
|
1051
|
-
|
|
1052
849
|
function buildEffect(data) {
|
|
1053
850
|
return data;
|
|
1054
851
|
}
|
|
1055
|
-
|
|
1056
852
|
function getEffect(id) {
|
|
1057
853
|
return getBuild(library.effects[id], buildEffect);
|
|
1058
|
-
}
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
function parseMaterial(xml) {
|
|
854
|
+
}
|
|
855
|
+
function parseMaterial(xml2) {
|
|
1062
856
|
const data = {
|
|
1063
|
-
name:
|
|
857
|
+
name: xml2.getAttribute("name")
|
|
1064
858
|
};
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
859
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
860
|
+
const child = xml2.childNodes[i];
|
|
861
|
+
if (child.nodeType !== 1)
|
|
862
|
+
continue;
|
|
1070
863
|
switch (child.nodeName) {
|
|
1071
|
-
case
|
|
1072
|
-
data.url = parseId(child.getAttribute(
|
|
864
|
+
case "instance_effect":
|
|
865
|
+
data.url = parseId(child.getAttribute("url"));
|
|
1073
866
|
break;
|
|
1074
867
|
}
|
|
1075
868
|
}
|
|
1076
|
-
|
|
1077
|
-
library.materials[xml.getAttribute('id')] = data;
|
|
869
|
+
library.materials[xml2.getAttribute("id")] = data;
|
|
1078
870
|
}
|
|
1079
|
-
|
|
1080
871
|
function getTextureLoader(image) {
|
|
1081
872
|
let loader;
|
|
1082
|
-
let extension = image.slice((image.lastIndexOf(
|
|
1083
|
-
|
|
873
|
+
let extension = image.slice((image.lastIndexOf(".") - 1 >>> 0) + 2);
|
|
1084
874
|
extension = extension.toLowerCase();
|
|
1085
|
-
|
|
1086
875
|
switch (extension) {
|
|
1087
|
-
case
|
|
876
|
+
case "tga":
|
|
1088
877
|
loader = tgaLoader;
|
|
1089
878
|
break;
|
|
1090
|
-
|
|
1091
879
|
default:
|
|
1092
880
|
loader = textureLoader;
|
|
1093
881
|
}
|
|
1094
|
-
|
|
1095
882
|
return loader;
|
|
1096
883
|
}
|
|
1097
|
-
|
|
1098
884
|
function buildMaterial(data) {
|
|
1099
885
|
const effect = getEffect(data.url);
|
|
1100
886
|
const technique = effect.profile.technique;
|
|
1101
887
|
let material;
|
|
1102
|
-
|
|
1103
888
|
switch (technique.type) {
|
|
1104
|
-
case
|
|
1105
|
-
case
|
|
1106
|
-
material = new MeshPhongMaterial();
|
|
889
|
+
case "phong":
|
|
890
|
+
case "blinn":
|
|
891
|
+
material = new THREE.MeshPhongMaterial();
|
|
1107
892
|
break;
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
material = new MeshLambertMaterial();
|
|
893
|
+
case "lambert":
|
|
894
|
+
material = new THREE.MeshLambertMaterial();
|
|
1111
895
|
break;
|
|
1112
|
-
|
|
1113
896
|
default:
|
|
1114
|
-
material = new MeshBasicMaterial();
|
|
897
|
+
material = new THREE.MeshBasicMaterial();
|
|
1115
898
|
break;
|
|
1116
899
|
}
|
|
1117
|
-
|
|
1118
|
-
material.name = data.name || '';
|
|
1119
|
-
|
|
900
|
+
material.name = data.name || "";
|
|
1120
901
|
function getTexture(textureObject) {
|
|
1121
902
|
const sampler = effect.profile.samplers[textureObject.id];
|
|
1122
|
-
let image = null;
|
|
1123
|
-
|
|
1124
|
-
if (sampler !== undefined) {
|
|
903
|
+
let image = null;
|
|
904
|
+
if (sampler !== void 0) {
|
|
1125
905
|
const surface = effect.profile.surfaces[sampler.source];
|
|
1126
906
|
image = getImage(surface.init_from);
|
|
1127
907
|
} else {
|
|
1128
|
-
console.warn(
|
|
908
|
+
console.warn("THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530).");
|
|
1129
909
|
image = getImage(textureObject.id);
|
|
1130
|
-
}
|
|
1131
|
-
|
|
1132
|
-
|
|
910
|
+
}
|
|
1133
911
|
if (image !== null) {
|
|
1134
912
|
const loader = getTextureLoader(image);
|
|
1135
|
-
|
|
1136
|
-
if (loader !== undefined) {
|
|
913
|
+
if (loader !== void 0) {
|
|
1137
914
|
const texture = loader.load(image);
|
|
1138
915
|
const extra = textureObject.extra;
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
texture.
|
|
1143
|
-
texture.
|
|
1144
|
-
texture.
|
|
1145
|
-
texture.repeat.set(technique.repeatU || 1, technique.repeatV || 1);
|
|
916
|
+
if (extra !== void 0 && extra.technique !== void 0 && isEmpty(extra.technique) === false) {
|
|
917
|
+
const technique2 = extra.technique;
|
|
918
|
+
texture.wrapS = technique2.wrapU ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;
|
|
919
|
+
texture.wrapT = technique2.wrapV ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;
|
|
920
|
+
texture.offset.set(technique2.offsetU || 0, technique2.offsetV || 0);
|
|
921
|
+
texture.repeat.set(technique2.repeatU || 1, technique2.repeatV || 1);
|
|
1146
922
|
} else {
|
|
1147
|
-
texture.wrapS = RepeatWrapping;
|
|
1148
|
-
texture.wrapT = RepeatWrapping;
|
|
923
|
+
texture.wrapS = THREE.RepeatWrapping;
|
|
924
|
+
texture.wrapT = THREE.RepeatWrapping;
|
|
1149
925
|
}
|
|
1150
|
-
|
|
1151
926
|
return texture;
|
|
1152
927
|
} else {
|
|
1153
|
-
console.warn(
|
|
928
|
+
console.warn("THREE.ColladaLoader: Loader for texture %s not found.", image);
|
|
1154
929
|
return null;
|
|
1155
930
|
}
|
|
1156
931
|
} else {
|
|
@@ -1158,737 +933,582 @@ class ColladaLoader extends Loader {
|
|
|
1158
933
|
return null;
|
|
1159
934
|
}
|
|
1160
935
|
}
|
|
1161
|
-
|
|
1162
936
|
const parameters = technique.parameters;
|
|
1163
|
-
|
|
1164
937
|
for (const key in parameters) {
|
|
1165
938
|
const parameter = parameters[key];
|
|
1166
|
-
|
|
1167
939
|
switch (key) {
|
|
1168
|
-
case
|
|
1169
|
-
if (parameter.color)
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
if (parameter.
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
940
|
+
case "diffuse":
|
|
941
|
+
if (parameter.color)
|
|
942
|
+
material.color.fromArray(parameter.color);
|
|
943
|
+
if (parameter.texture)
|
|
944
|
+
material.map = getTexture(parameter.texture);
|
|
945
|
+
break;
|
|
946
|
+
case "specular":
|
|
947
|
+
if (parameter.color && material.specular)
|
|
948
|
+
material.specular.fromArray(parameter.color);
|
|
949
|
+
if (parameter.texture)
|
|
950
|
+
material.specularMap = getTexture(parameter.texture);
|
|
951
|
+
break;
|
|
952
|
+
case "bump":
|
|
953
|
+
if (parameter.texture)
|
|
954
|
+
material.normalMap = getTexture(parameter.texture);
|
|
955
|
+
break;
|
|
956
|
+
case "ambient":
|
|
957
|
+
if (parameter.texture)
|
|
958
|
+
material.lightMap = getTexture(parameter.texture);
|
|
959
|
+
break;
|
|
960
|
+
case "shininess":
|
|
961
|
+
if (parameter.float && material.shininess)
|
|
962
|
+
material.shininess = parameter.float;
|
|
963
|
+
break;
|
|
964
|
+
case "emission":
|
|
965
|
+
if (parameter.color && material.emissive)
|
|
966
|
+
material.emissive.fromArray(parameter.color);
|
|
967
|
+
if (parameter.texture)
|
|
968
|
+
material.emissiveMap = getTexture(parameter.texture);
|
|
969
|
+
break;
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
let transparent = parameters["transparent"];
|
|
973
|
+
let transparency = parameters["transparency"];
|
|
974
|
+
if (transparency === void 0 && transparent) {
|
|
1202
975
|
transparency = {
|
|
1203
976
|
float: 1
|
|
1204
977
|
};
|
|
1205
|
-
}
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
if (transparent === undefined && transparency) {
|
|
978
|
+
}
|
|
979
|
+
if (transparent === void 0 && transparency) {
|
|
1209
980
|
transparent = {
|
|
1210
|
-
opaque:
|
|
981
|
+
opaque: "A_ONE",
|
|
1211
982
|
data: {
|
|
1212
983
|
color: [1, 1, 1, 1]
|
|
1213
984
|
}
|
|
1214
985
|
};
|
|
1215
986
|
}
|
|
1216
|
-
|
|
1217
987
|
if (transparent && transparency) {
|
|
1218
|
-
// handle case if a texture exists but no color
|
|
1219
988
|
if (transparent.data.texture) {
|
|
1220
|
-
// we do not set an alpha map (see #13792)
|
|
1221
989
|
material.transparent = true;
|
|
1222
990
|
} else {
|
|
1223
991
|
const color = transparent.data.color;
|
|
1224
|
-
|
|
1225
992
|
switch (transparent.opaque) {
|
|
1226
|
-
case
|
|
993
|
+
case "A_ONE":
|
|
1227
994
|
material.opacity = color[3] * transparency.float;
|
|
1228
995
|
break;
|
|
1229
|
-
|
|
1230
|
-
case 'RGB_ZERO':
|
|
996
|
+
case "RGB_ZERO":
|
|
1231
997
|
material.opacity = 1 - color[0] * transparency.float;
|
|
1232
998
|
break;
|
|
1233
|
-
|
|
1234
|
-
case 'A_ZERO':
|
|
999
|
+
case "A_ZERO":
|
|
1235
1000
|
material.opacity = 1 - color[3] * transparency.float;
|
|
1236
1001
|
break;
|
|
1237
|
-
|
|
1238
|
-
case 'RGB_ONE':
|
|
1002
|
+
case "RGB_ONE":
|
|
1239
1003
|
material.opacity = color[0] * transparency.float;
|
|
1240
1004
|
break;
|
|
1241
|
-
|
|
1242
1005
|
default:
|
|
1243
1006
|
console.warn('THREE.ColladaLoader: Invalid opaque type "%s" of transparent tag.', transparent.opaque);
|
|
1244
1007
|
}
|
|
1245
|
-
|
|
1246
|
-
|
|
1008
|
+
if (material.opacity < 1)
|
|
1009
|
+
material.transparent = true;
|
|
1247
1010
|
}
|
|
1248
|
-
}
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
if (technique.extra !== undefined && technique.extra.technique !== undefined) {
|
|
1011
|
+
}
|
|
1012
|
+
if (technique.extra !== void 0 && technique.extra.technique !== void 0) {
|
|
1252
1013
|
const techniques = technique.extra.technique;
|
|
1253
|
-
|
|
1254
1014
|
for (const k in techniques) {
|
|
1255
1015
|
const v = techniques[k];
|
|
1256
|
-
|
|
1257
1016
|
switch (k) {
|
|
1258
|
-
case
|
|
1259
|
-
material.side = v === 1 ? DoubleSide : FrontSide;
|
|
1017
|
+
case "double_sided":
|
|
1018
|
+
material.side = v === 1 ? THREE.DoubleSide : THREE.FrontSide;
|
|
1260
1019
|
break;
|
|
1261
|
-
|
|
1262
|
-
case 'bump':
|
|
1020
|
+
case "bump":
|
|
1263
1021
|
material.normalMap = getTexture(v.texture);
|
|
1264
|
-
material.normalScale = new Vector2(1, 1);
|
|
1022
|
+
material.normalScale = new THREE.Vector2(1, 1);
|
|
1265
1023
|
break;
|
|
1266
1024
|
}
|
|
1267
1025
|
}
|
|
1268
1026
|
}
|
|
1269
|
-
|
|
1270
1027
|
return material;
|
|
1271
1028
|
}
|
|
1272
|
-
|
|
1273
1029
|
function getMaterial(id) {
|
|
1274
1030
|
return getBuild(library.materials[id], buildMaterial);
|
|
1275
|
-
}
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
function parseCamera(xml) {
|
|
1031
|
+
}
|
|
1032
|
+
function parseCamera(xml2) {
|
|
1279
1033
|
const data = {
|
|
1280
|
-
name:
|
|
1034
|
+
name: xml2.getAttribute("name")
|
|
1281
1035
|
};
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1036
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
1037
|
+
const child = xml2.childNodes[i];
|
|
1038
|
+
if (child.nodeType !== 1)
|
|
1039
|
+
continue;
|
|
1287
1040
|
switch (child.nodeName) {
|
|
1288
|
-
case
|
|
1041
|
+
case "optics":
|
|
1289
1042
|
data.optics = parseCameraOptics(child);
|
|
1290
1043
|
break;
|
|
1291
1044
|
}
|
|
1292
1045
|
}
|
|
1293
|
-
|
|
1294
|
-
library.cameras[xml.getAttribute('id')] = data;
|
|
1046
|
+
library.cameras[xml2.getAttribute("id")] = data;
|
|
1295
1047
|
}
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
const child = xml.childNodes[i];
|
|
1300
|
-
|
|
1048
|
+
function parseCameraOptics(xml2) {
|
|
1049
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1050
|
+
const child = xml2.childNodes[i];
|
|
1301
1051
|
switch (child.nodeName) {
|
|
1302
|
-
case
|
|
1052
|
+
case "technique_common":
|
|
1303
1053
|
return parseCameraTechnique(child);
|
|
1304
1054
|
}
|
|
1305
1055
|
}
|
|
1306
|
-
|
|
1307
1056
|
return {};
|
|
1308
1057
|
}
|
|
1309
|
-
|
|
1310
|
-
function parseCameraTechnique(xml) {
|
|
1058
|
+
function parseCameraTechnique(xml2) {
|
|
1311
1059
|
const data = {};
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
const child = xml.childNodes[i];
|
|
1315
|
-
|
|
1060
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1061
|
+
const child = xml2.childNodes[i];
|
|
1316
1062
|
switch (child.nodeName) {
|
|
1317
|
-
case
|
|
1318
|
-
case
|
|
1063
|
+
case "perspective":
|
|
1064
|
+
case "orthographic":
|
|
1319
1065
|
data.technique = child.nodeName;
|
|
1320
1066
|
data.parameters = parseCameraParameters(child);
|
|
1321
1067
|
break;
|
|
1322
1068
|
}
|
|
1323
1069
|
}
|
|
1324
|
-
|
|
1325
1070
|
return data;
|
|
1326
1071
|
}
|
|
1327
|
-
|
|
1328
|
-
function parseCameraParameters(xml) {
|
|
1072
|
+
function parseCameraParameters(xml2) {
|
|
1329
1073
|
const data = {};
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
const child = xml.childNodes[i];
|
|
1333
|
-
|
|
1074
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1075
|
+
const child = xml2.childNodes[i];
|
|
1334
1076
|
switch (child.nodeName) {
|
|
1335
|
-
case
|
|
1336
|
-
case
|
|
1337
|
-
case
|
|
1338
|
-
case
|
|
1339
|
-
case
|
|
1340
|
-
case
|
|
1341
|
-
case
|
|
1077
|
+
case "xfov":
|
|
1078
|
+
case "yfov":
|
|
1079
|
+
case "xmag":
|
|
1080
|
+
case "ymag":
|
|
1081
|
+
case "znear":
|
|
1082
|
+
case "zfar":
|
|
1083
|
+
case "aspect_ratio":
|
|
1342
1084
|
data[child.nodeName] = parseFloat(child.textContent);
|
|
1343
1085
|
break;
|
|
1344
1086
|
}
|
|
1345
1087
|
}
|
|
1346
|
-
|
|
1347
1088
|
return data;
|
|
1348
1089
|
}
|
|
1349
|
-
|
|
1350
1090
|
function buildCamera(data) {
|
|
1351
1091
|
let camera;
|
|
1352
|
-
|
|
1353
1092
|
switch (data.optics.technique) {
|
|
1354
|
-
case
|
|
1355
|
-
camera = new PerspectiveCamera(
|
|
1093
|
+
case "perspective":
|
|
1094
|
+
camera = new THREE.PerspectiveCamera(
|
|
1095
|
+
data.optics.parameters.yfov,
|
|
1096
|
+
data.optics.parameters.aspect_ratio,
|
|
1097
|
+
data.optics.parameters.znear,
|
|
1098
|
+
data.optics.parameters.zfar
|
|
1099
|
+
);
|
|
1356
1100
|
break;
|
|
1357
|
-
|
|
1358
|
-
case 'orthographic':
|
|
1101
|
+
case "orthographic":
|
|
1359
1102
|
let ymag = data.optics.parameters.ymag;
|
|
1360
1103
|
let xmag = data.optics.parameters.xmag;
|
|
1361
1104
|
const aspectRatio = data.optics.parameters.aspect_ratio;
|
|
1362
|
-
xmag = xmag ===
|
|
1363
|
-
ymag = ymag ===
|
|
1105
|
+
xmag = xmag === void 0 ? ymag * aspectRatio : xmag;
|
|
1106
|
+
ymag = ymag === void 0 ? xmag / aspectRatio : ymag;
|
|
1364
1107
|
xmag *= 0.5;
|
|
1365
1108
|
ymag *= 0.5;
|
|
1366
|
-
camera = new OrthographicCamera(
|
|
1367
|
-
|
|
1109
|
+
camera = new THREE.OrthographicCamera(
|
|
1110
|
+
-xmag,
|
|
1111
|
+
xmag,
|
|
1112
|
+
ymag,
|
|
1113
|
+
-ymag,
|
|
1114
|
+
data.optics.parameters.znear,
|
|
1115
|
+
data.optics.parameters.zfar
|
|
1116
|
+
);
|
|
1368
1117
|
break;
|
|
1369
|
-
|
|
1370
1118
|
default:
|
|
1371
|
-
camera = new PerspectiveCamera();
|
|
1119
|
+
camera = new THREE.PerspectiveCamera();
|
|
1372
1120
|
break;
|
|
1373
1121
|
}
|
|
1374
|
-
|
|
1375
|
-
camera.name = data.name || '';
|
|
1122
|
+
camera.name = data.name || "";
|
|
1376
1123
|
return camera;
|
|
1377
1124
|
}
|
|
1378
|
-
|
|
1379
1125
|
function getCamera(id) {
|
|
1380
1126
|
const data = library.cameras[id];
|
|
1381
|
-
|
|
1382
|
-
if (data !== undefined) {
|
|
1127
|
+
if (data !== void 0) {
|
|
1383
1128
|
return getBuild(data, buildCamera);
|
|
1384
1129
|
}
|
|
1385
|
-
|
|
1386
1130
|
console.warn("THREE.ColladaLoader: Couldn't find camera with ID:", id);
|
|
1387
1131
|
return null;
|
|
1388
|
-
}
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
function parseLight(xml) {
|
|
1132
|
+
}
|
|
1133
|
+
function parseLight(xml2) {
|
|
1392
1134
|
let data = {};
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1135
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
1136
|
+
const child = xml2.childNodes[i];
|
|
1137
|
+
if (child.nodeType !== 1)
|
|
1138
|
+
continue;
|
|
1398
1139
|
switch (child.nodeName) {
|
|
1399
|
-
case
|
|
1140
|
+
case "technique_common":
|
|
1400
1141
|
data = parseLightTechnique(child);
|
|
1401
1142
|
break;
|
|
1402
1143
|
}
|
|
1403
1144
|
}
|
|
1404
|
-
|
|
1405
|
-
library.lights[xml.getAttribute('id')] = data;
|
|
1145
|
+
library.lights[xml2.getAttribute("id")] = data;
|
|
1406
1146
|
}
|
|
1407
|
-
|
|
1408
|
-
function parseLightTechnique(xml) {
|
|
1147
|
+
function parseLightTechnique(xml2) {
|
|
1409
1148
|
const data = {};
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1149
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
1150
|
+
const child = xml2.childNodes[i];
|
|
1151
|
+
if (child.nodeType !== 1)
|
|
1152
|
+
continue;
|
|
1415
1153
|
switch (child.nodeName) {
|
|
1416
|
-
case
|
|
1417
|
-
case
|
|
1418
|
-
case
|
|
1419
|
-
case
|
|
1154
|
+
case "directional":
|
|
1155
|
+
case "point":
|
|
1156
|
+
case "spot":
|
|
1157
|
+
case "ambient":
|
|
1420
1158
|
data.technique = child.nodeName;
|
|
1421
1159
|
data.parameters = parseLightParameters(child);
|
|
1422
1160
|
}
|
|
1423
1161
|
}
|
|
1424
|
-
|
|
1425
1162
|
return data;
|
|
1426
1163
|
}
|
|
1427
|
-
|
|
1428
|
-
function parseLightParameters(xml) {
|
|
1164
|
+
function parseLightParameters(xml2) {
|
|
1429
1165
|
const data = {};
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1166
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
1167
|
+
const child = xml2.childNodes[i];
|
|
1168
|
+
if (child.nodeType !== 1)
|
|
1169
|
+
continue;
|
|
1435
1170
|
switch (child.nodeName) {
|
|
1436
|
-
case
|
|
1171
|
+
case "color":
|
|
1437
1172
|
const array = parseFloats(child.textContent);
|
|
1438
|
-
data.color = new Color().fromArray(array);
|
|
1173
|
+
data.color = new THREE.Color().fromArray(array);
|
|
1439
1174
|
break;
|
|
1440
|
-
|
|
1441
|
-
case 'falloff_angle':
|
|
1175
|
+
case "falloff_angle":
|
|
1442
1176
|
data.falloffAngle = parseFloat(child.textContent);
|
|
1443
1177
|
break;
|
|
1444
|
-
|
|
1445
|
-
case 'quadratic_attenuation':
|
|
1178
|
+
case "quadratic_attenuation":
|
|
1446
1179
|
const f = parseFloat(child.textContent);
|
|
1447
1180
|
data.distance = f ? Math.sqrt(1 / f) : 0;
|
|
1448
1181
|
break;
|
|
1449
1182
|
}
|
|
1450
1183
|
}
|
|
1451
|
-
|
|
1452
1184
|
return data;
|
|
1453
1185
|
}
|
|
1454
|
-
|
|
1455
1186
|
function buildLight(data) {
|
|
1456
1187
|
let light;
|
|
1457
|
-
|
|
1458
1188
|
switch (data.technique) {
|
|
1459
|
-
case
|
|
1460
|
-
light = new DirectionalLight();
|
|
1189
|
+
case "directional":
|
|
1190
|
+
light = new THREE.DirectionalLight();
|
|
1461
1191
|
break;
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
light = new PointLight();
|
|
1192
|
+
case "point":
|
|
1193
|
+
light = new THREE.PointLight();
|
|
1465
1194
|
break;
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
light = new SpotLight();
|
|
1195
|
+
case "spot":
|
|
1196
|
+
light = new THREE.SpotLight();
|
|
1469
1197
|
break;
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
light = new AmbientLight();
|
|
1198
|
+
case "ambient":
|
|
1199
|
+
light = new THREE.AmbientLight();
|
|
1473
1200
|
break;
|
|
1474
1201
|
}
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
if (data.parameters.distance)
|
|
1202
|
+
if (data.parameters.color)
|
|
1203
|
+
light.color.copy(data.parameters.color);
|
|
1204
|
+
if (data.parameters.distance)
|
|
1205
|
+
light.distance = data.parameters.distance;
|
|
1478
1206
|
return light;
|
|
1479
1207
|
}
|
|
1480
|
-
|
|
1481
1208
|
function getLight(id) {
|
|
1482
1209
|
const data = library.lights[id];
|
|
1483
|
-
|
|
1484
|
-
if (data !== undefined) {
|
|
1210
|
+
if (data !== void 0) {
|
|
1485
1211
|
return getBuild(data, buildLight);
|
|
1486
1212
|
}
|
|
1487
|
-
|
|
1488
1213
|
console.warn("THREE.ColladaLoader: Couldn't find light with ID:", id);
|
|
1489
1214
|
return null;
|
|
1490
|
-
}
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
function parseGeometry(xml) {
|
|
1215
|
+
}
|
|
1216
|
+
function parseGeometry(xml2) {
|
|
1494
1217
|
const data = {
|
|
1495
|
-
name:
|
|
1218
|
+
name: xml2.getAttribute("name"),
|
|
1496
1219
|
sources: {},
|
|
1497
1220
|
vertices: {},
|
|
1498
1221
|
primitives: []
|
|
1499
1222
|
};
|
|
1500
|
-
const mesh = getElementsByTagName(
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1223
|
+
const mesh = getElementsByTagName(xml2, "mesh")[0];
|
|
1224
|
+
if (mesh === void 0)
|
|
1225
|
+
return;
|
|
1504
1226
|
for (let i = 0; i < mesh.childNodes.length; i++) {
|
|
1505
1227
|
const child = mesh.childNodes[i];
|
|
1506
|
-
if (child.nodeType !== 1)
|
|
1507
|
-
|
|
1508
|
-
|
|
1228
|
+
if (child.nodeType !== 1)
|
|
1229
|
+
continue;
|
|
1230
|
+
const id = child.getAttribute("id");
|
|
1509
1231
|
switch (child.nodeName) {
|
|
1510
|
-
case
|
|
1232
|
+
case "source":
|
|
1511
1233
|
data.sources[id] = parseSource(child);
|
|
1512
1234
|
break;
|
|
1513
|
-
|
|
1514
|
-
case 'vertices':
|
|
1515
|
-
// data.sources[ id ] = data.sources[ parseId( getElementsByTagName( child, 'input' )[ 0 ].getAttribute( 'source' ) ) ];
|
|
1235
|
+
case "vertices":
|
|
1516
1236
|
data.vertices = parseGeometryVertices(child);
|
|
1517
1237
|
break;
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
console.warn('THREE.ColladaLoader: Unsupported primitive type: ', child.nodeName);
|
|
1238
|
+
case "polygons":
|
|
1239
|
+
console.warn("THREE.ColladaLoader: Unsupported primitive type: ", child.nodeName);
|
|
1521
1240
|
break;
|
|
1522
|
-
|
|
1523
|
-
case
|
|
1524
|
-
case
|
|
1525
|
-
case
|
|
1526
|
-
case 'triangles':
|
|
1241
|
+
case "lines":
|
|
1242
|
+
case "linestrips":
|
|
1243
|
+
case "polylist":
|
|
1244
|
+
case "triangles":
|
|
1527
1245
|
data.primitives.push(parseGeometryPrimitive(child));
|
|
1528
1246
|
break;
|
|
1529
|
-
|
|
1530
1247
|
default:
|
|
1531
1248
|
console.log(child);
|
|
1532
1249
|
}
|
|
1533
1250
|
}
|
|
1534
|
-
|
|
1535
|
-
library.geometries[xml.getAttribute('id')] = data;
|
|
1251
|
+
library.geometries[xml2.getAttribute("id")] = data;
|
|
1536
1252
|
}
|
|
1537
|
-
|
|
1538
|
-
function parseSource(xml) {
|
|
1253
|
+
function parseSource(xml2) {
|
|
1539
1254
|
const data = {
|
|
1540
1255
|
array: [],
|
|
1541
1256
|
stride: 3
|
|
1542
1257
|
};
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1258
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1259
|
+
const child = xml2.childNodes[i];
|
|
1260
|
+
if (child.nodeType !== 1)
|
|
1261
|
+
continue;
|
|
1548
1262
|
switch (child.nodeName) {
|
|
1549
|
-
case
|
|
1263
|
+
case "float_array":
|
|
1550
1264
|
data.array = parseFloats(child.textContent);
|
|
1551
1265
|
break;
|
|
1552
|
-
|
|
1553
|
-
case 'Name_array':
|
|
1266
|
+
case "Name_array":
|
|
1554
1267
|
data.array = parseStrings(child.textContent);
|
|
1555
1268
|
break;
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
if (accessor !== undefined) {
|
|
1561
|
-
data.stride = parseInt(accessor.getAttribute('stride'));
|
|
1269
|
+
case "technique_common":
|
|
1270
|
+
const accessor = getElementsByTagName(child, "accessor")[0];
|
|
1271
|
+
if (accessor !== void 0) {
|
|
1272
|
+
data.stride = parseInt(accessor.getAttribute("stride"));
|
|
1562
1273
|
}
|
|
1563
|
-
|
|
1564
1274
|
break;
|
|
1565
1275
|
}
|
|
1566
1276
|
}
|
|
1567
|
-
|
|
1568
1277
|
return data;
|
|
1569
1278
|
}
|
|
1570
|
-
|
|
1571
|
-
function parseGeometryVertices(xml) {
|
|
1279
|
+
function parseGeometryVertices(xml2) {
|
|
1572
1280
|
const data = {};
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
data[child.getAttribute(
|
|
1281
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1282
|
+
const child = xml2.childNodes[i];
|
|
1283
|
+
if (child.nodeType !== 1)
|
|
1284
|
+
continue;
|
|
1285
|
+
data[child.getAttribute("semantic")] = parseId(child.getAttribute("source"));
|
|
1578
1286
|
}
|
|
1579
|
-
|
|
1580
1287
|
return data;
|
|
1581
1288
|
}
|
|
1582
|
-
|
|
1583
|
-
function parseGeometryPrimitive(xml) {
|
|
1289
|
+
function parseGeometryPrimitive(xml2) {
|
|
1584
1290
|
const primitive = {
|
|
1585
|
-
type:
|
|
1586
|
-
material:
|
|
1587
|
-
count: parseInt(
|
|
1291
|
+
type: xml2.nodeName,
|
|
1292
|
+
material: xml2.getAttribute("material"),
|
|
1293
|
+
count: parseInt(xml2.getAttribute("count")),
|
|
1588
1294
|
inputs: {},
|
|
1589
1295
|
stride: 0,
|
|
1590
1296
|
hasUV: false
|
|
1591
1297
|
};
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1298
|
+
for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
|
|
1299
|
+
const child = xml2.childNodes[i];
|
|
1300
|
+
if (child.nodeType !== 1)
|
|
1301
|
+
continue;
|
|
1597
1302
|
switch (child.nodeName) {
|
|
1598
|
-
case
|
|
1599
|
-
const id = parseId(child.getAttribute(
|
|
1600
|
-
const semantic = child.getAttribute(
|
|
1601
|
-
const offset = parseInt(child.getAttribute(
|
|
1602
|
-
const set = parseInt(child.getAttribute(
|
|
1303
|
+
case "input":
|
|
1304
|
+
const id = parseId(child.getAttribute("source"));
|
|
1305
|
+
const semantic = child.getAttribute("semantic");
|
|
1306
|
+
const offset = parseInt(child.getAttribute("offset"));
|
|
1307
|
+
const set = parseInt(child.getAttribute("set"));
|
|
1603
1308
|
const inputname = set > 0 ? semantic + set : semantic;
|
|
1604
|
-
primitive.inputs[inputname] = {
|
|
1605
|
-
id: id,
|
|
1606
|
-
offset: offset
|
|
1607
|
-
};
|
|
1309
|
+
primitive.inputs[inputname] = { id, offset };
|
|
1608
1310
|
primitive.stride = Math.max(primitive.stride, offset + 1);
|
|
1609
|
-
if (semantic ===
|
|
1311
|
+
if (semantic === "TEXCOORD")
|
|
1312
|
+
primitive.hasUV = true;
|
|
1610
1313
|
break;
|
|
1611
|
-
|
|
1612
|
-
case 'vcount':
|
|
1314
|
+
case "vcount":
|
|
1613
1315
|
primitive.vcount = parseInts(child.textContent);
|
|
1614
1316
|
break;
|
|
1615
|
-
|
|
1616
|
-
case 'p':
|
|
1317
|
+
case "p":
|
|
1617
1318
|
primitive.p = parseInts(child.textContent);
|
|
1618
1319
|
break;
|
|
1619
1320
|
}
|
|
1620
1321
|
}
|
|
1621
|
-
|
|
1622
1322
|
return primitive;
|
|
1623
1323
|
}
|
|
1624
|
-
|
|
1625
1324
|
function groupPrimitives(primitives) {
|
|
1626
1325
|
const build = {};
|
|
1627
|
-
|
|
1628
1326
|
for (let i = 0; i < primitives.length; i++) {
|
|
1629
1327
|
const primitive = primitives[i];
|
|
1630
|
-
if (build[primitive.type] ===
|
|
1328
|
+
if (build[primitive.type] === void 0)
|
|
1329
|
+
build[primitive.type] = [];
|
|
1631
1330
|
build[primitive.type].push(primitive);
|
|
1632
1331
|
}
|
|
1633
|
-
|
|
1634
1332
|
return build;
|
|
1635
1333
|
}
|
|
1636
|
-
|
|
1637
1334
|
function checkUVCoordinates(primitives) {
|
|
1638
|
-
let
|
|
1639
|
-
|
|
1335
|
+
let count2 = 0;
|
|
1640
1336
|
for (let i = 0, l = primitives.length; i < l; i++) {
|
|
1641
1337
|
const primitive = primitives[i];
|
|
1642
|
-
|
|
1643
1338
|
if (primitive.hasUV === true) {
|
|
1644
|
-
|
|
1339
|
+
count2++;
|
|
1645
1340
|
}
|
|
1646
1341
|
}
|
|
1647
|
-
|
|
1648
|
-
if (count > 0 && count < primitives.length) {
|
|
1342
|
+
if (count2 > 0 && count2 < primitives.length) {
|
|
1649
1343
|
primitives.uvsNeedsFix = true;
|
|
1650
1344
|
}
|
|
1651
1345
|
}
|
|
1652
|
-
|
|
1653
1346
|
function buildGeometry(data) {
|
|
1654
1347
|
const build = {};
|
|
1655
1348
|
const sources = data.sources;
|
|
1656
1349
|
const vertices = data.vertices;
|
|
1657
1350
|
const primitives = data.primitives;
|
|
1658
|
-
if (primitives.length === 0)
|
|
1659
|
-
|
|
1660
|
-
|
|
1351
|
+
if (primitives.length === 0)
|
|
1352
|
+
return {};
|
|
1661
1353
|
const groupedPrimitives = groupPrimitives(primitives);
|
|
1662
|
-
|
|
1663
1354
|
for (const type in groupedPrimitives) {
|
|
1664
|
-
const primitiveType = groupedPrimitives[type];
|
|
1665
|
-
|
|
1666
|
-
checkUVCoordinates(primitiveType); // third, create a buffer geometry for each type of primitives
|
|
1667
|
-
|
|
1355
|
+
const primitiveType = groupedPrimitives[type];
|
|
1356
|
+
checkUVCoordinates(primitiveType);
|
|
1668
1357
|
build[type] = buildGeometryType(primitiveType, sources, vertices);
|
|
1669
1358
|
}
|
|
1670
|
-
|
|
1671
1359
|
return build;
|
|
1672
1360
|
}
|
|
1673
|
-
|
|
1674
1361
|
function buildGeometryType(primitives, sources, vertices) {
|
|
1675
1362
|
const build = {};
|
|
1676
|
-
const
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
};
|
|
1680
|
-
const
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
const uv = {
|
|
1685
|
-
array: [],
|
|
1686
|
-
stride: 0
|
|
1687
|
-
};
|
|
1688
|
-
const uv2 = {
|
|
1689
|
-
array: [],
|
|
1690
|
-
stride: 0
|
|
1691
|
-
};
|
|
1692
|
-
const color = {
|
|
1693
|
-
array: [],
|
|
1694
|
-
stride: 0
|
|
1695
|
-
};
|
|
1696
|
-
const skinIndex = {
|
|
1697
|
-
array: [],
|
|
1698
|
-
stride: 4
|
|
1699
|
-
};
|
|
1700
|
-
const skinWeight = {
|
|
1701
|
-
array: [],
|
|
1702
|
-
stride: 4
|
|
1703
|
-
};
|
|
1704
|
-
const geometry = new BufferGeometry();
|
|
1363
|
+
const position2 = { array: [], stride: 0 };
|
|
1364
|
+
const normal = { array: [], stride: 0 };
|
|
1365
|
+
const uv = { array: [], stride: 0 };
|
|
1366
|
+
const uv2 = { array: [], stride: 0 };
|
|
1367
|
+
const color = { array: [], stride: 0 };
|
|
1368
|
+
const skinIndex = { array: [], stride: 4 };
|
|
1369
|
+
const skinWeight = { array: [], stride: 4 };
|
|
1370
|
+
const geometry = new THREE.BufferGeometry();
|
|
1705
1371
|
const materialKeys = [];
|
|
1706
1372
|
let start = 0;
|
|
1707
|
-
|
|
1708
1373
|
for (let p = 0; p < primitives.length; p++) {
|
|
1709
1374
|
const primitive = primitives[p];
|
|
1710
|
-
const inputs = primitive.inputs;
|
|
1711
|
-
|
|
1712
|
-
let count = 0;
|
|
1713
|
-
|
|
1375
|
+
const inputs = primitive.inputs;
|
|
1376
|
+
let count2 = 0;
|
|
1714
1377
|
switch (primitive.type) {
|
|
1715
|
-
case
|
|
1716
|
-
case
|
|
1717
|
-
|
|
1378
|
+
case "lines":
|
|
1379
|
+
case "linestrips":
|
|
1380
|
+
count2 = primitive.count * 2;
|
|
1718
1381
|
break;
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
count = primitive.count * 3;
|
|
1382
|
+
case "triangles":
|
|
1383
|
+
count2 = primitive.count * 3;
|
|
1722
1384
|
break;
|
|
1723
|
-
|
|
1724
|
-
case 'polylist':
|
|
1385
|
+
case "polylist":
|
|
1725
1386
|
for (let g = 0; g < primitive.count; g++) {
|
|
1726
1387
|
const vc = primitive.vcount[g];
|
|
1727
|
-
|
|
1728
1388
|
switch (vc) {
|
|
1729
1389
|
case 3:
|
|
1730
|
-
|
|
1731
|
-
|
|
1390
|
+
count2 += 3;
|
|
1732
1391
|
break;
|
|
1733
|
-
|
|
1734
1392
|
case 4:
|
|
1735
|
-
|
|
1736
|
-
|
|
1393
|
+
count2 += 6;
|
|
1737
1394
|
break;
|
|
1738
|
-
|
|
1739
1395
|
default:
|
|
1740
|
-
|
|
1741
|
-
|
|
1396
|
+
count2 += (vc - 2) * 3;
|
|
1742
1397
|
break;
|
|
1743
1398
|
}
|
|
1744
1399
|
}
|
|
1745
|
-
|
|
1746
1400
|
break;
|
|
1747
|
-
|
|
1748
1401
|
default:
|
|
1749
|
-
console.warn(
|
|
1402
|
+
console.warn("THREE.ColladaLoader: Unknow primitive type:", primitive.type);
|
|
1750
1403
|
}
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
start += count; // material
|
|
1754
|
-
|
|
1404
|
+
geometry.addGroup(start, count2, p);
|
|
1405
|
+
start += count2;
|
|
1755
1406
|
if (primitive.material) {
|
|
1756
1407
|
materialKeys.push(primitive.material);
|
|
1757
|
-
}
|
|
1758
|
-
|
|
1759
|
-
|
|
1408
|
+
}
|
|
1760
1409
|
for (const name in inputs) {
|
|
1761
1410
|
const input = inputs[name];
|
|
1762
|
-
|
|
1763
1411
|
switch (name) {
|
|
1764
|
-
case
|
|
1412
|
+
case "VERTEX":
|
|
1765
1413
|
for (const key in vertices) {
|
|
1766
1414
|
const id = vertices[key];
|
|
1767
|
-
|
|
1768
1415
|
switch (key) {
|
|
1769
|
-
case
|
|
1770
|
-
const prevLength =
|
|
1771
|
-
buildGeometryData(primitive, sources[id], input.offset,
|
|
1772
|
-
|
|
1773
|
-
|
|
1416
|
+
case "POSITION":
|
|
1417
|
+
const prevLength = position2.array.length;
|
|
1418
|
+
buildGeometryData(primitive, sources[id], input.offset, position2.array);
|
|
1419
|
+
position2.stride = sources[id].stride;
|
|
1774
1420
|
if (sources.skinWeights && sources.skinIndices) {
|
|
1775
1421
|
buildGeometryData(primitive, sources.skinIndices, input.offset, skinIndex.array);
|
|
1776
1422
|
buildGeometryData(primitive, sources.skinWeights, input.offset, skinWeight.array);
|
|
1777
|
-
}
|
|
1778
|
-
|
|
1779
|
-
|
|
1423
|
+
}
|
|
1780
1424
|
if (primitive.hasUV === false && primitives.uvsNeedsFix === true) {
|
|
1781
|
-
const
|
|
1782
|
-
|
|
1783
|
-
for (let i = 0; i < count; i++) {
|
|
1784
|
-
// fill missing uv coordinates
|
|
1425
|
+
const count3 = (position2.array.length - prevLength) / position2.stride;
|
|
1426
|
+
for (let i = 0; i < count3; i++) {
|
|
1785
1427
|
uv.array.push(0, 0);
|
|
1786
1428
|
}
|
|
1787
1429
|
}
|
|
1788
|
-
|
|
1789
1430
|
break;
|
|
1790
|
-
|
|
1791
|
-
case 'NORMAL':
|
|
1431
|
+
case "NORMAL":
|
|
1792
1432
|
buildGeometryData(primitive, sources[id], input.offset, normal.array);
|
|
1793
1433
|
normal.stride = sources[id].stride;
|
|
1794
1434
|
break;
|
|
1795
|
-
|
|
1796
|
-
case 'COLOR':
|
|
1435
|
+
case "COLOR":
|
|
1797
1436
|
buildGeometryData(primitive, sources[id], input.offset, color.array);
|
|
1798
1437
|
color.stride = sources[id].stride;
|
|
1799
1438
|
break;
|
|
1800
|
-
|
|
1801
|
-
case 'TEXCOORD':
|
|
1439
|
+
case "TEXCOORD":
|
|
1802
1440
|
buildGeometryData(primitive, sources[id], input.offset, uv.array);
|
|
1803
1441
|
uv.stride = sources[id].stride;
|
|
1804
1442
|
break;
|
|
1805
|
-
|
|
1806
|
-
case 'TEXCOORD1':
|
|
1443
|
+
case "TEXCOORD1":
|
|
1807
1444
|
buildGeometryData(primitive, sources[id], input.offset, uv2.array);
|
|
1808
1445
|
uv.stride = sources[id].stride;
|
|
1809
1446
|
break;
|
|
1810
|
-
|
|
1811
1447
|
default:
|
|
1812
1448
|
console.warn('THREE.ColladaLoader: Semantic "%s" not handled in geometry build process.', key);
|
|
1813
1449
|
}
|
|
1814
1450
|
}
|
|
1815
|
-
|
|
1816
1451
|
break;
|
|
1817
|
-
|
|
1818
|
-
case 'NORMAL':
|
|
1452
|
+
case "NORMAL":
|
|
1819
1453
|
buildGeometryData(primitive, sources[input.id], input.offset, normal.array);
|
|
1820
1454
|
normal.stride = sources[input.id].stride;
|
|
1821
1455
|
break;
|
|
1822
|
-
|
|
1823
|
-
case 'COLOR':
|
|
1456
|
+
case "COLOR":
|
|
1824
1457
|
buildGeometryData(primitive, sources[input.id], input.offset, color.array);
|
|
1825
1458
|
color.stride = sources[input.id].stride;
|
|
1826
1459
|
break;
|
|
1827
|
-
|
|
1828
|
-
case 'TEXCOORD':
|
|
1460
|
+
case "TEXCOORD":
|
|
1829
1461
|
buildGeometryData(primitive, sources[input.id], input.offset, uv.array);
|
|
1830
1462
|
uv.stride = sources[input.id].stride;
|
|
1831
1463
|
break;
|
|
1832
|
-
|
|
1833
|
-
case 'TEXCOORD1':
|
|
1464
|
+
case "TEXCOORD1":
|
|
1834
1465
|
buildGeometryData(primitive, sources[input.id], input.offset, uv2.array);
|
|
1835
1466
|
uv2.stride = sources[input.id].stride;
|
|
1836
1467
|
break;
|
|
1837
1468
|
}
|
|
1838
1469
|
}
|
|
1839
|
-
} // build geometry
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
if (position.array.length > 0) {
|
|
1843
|
-
geometry.setAttribute('position', new Float32BufferAttribute(position.array, position.stride));
|
|
1844
1470
|
}
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
geometry.setAttribute('normal', new Float32BufferAttribute(normal.array, normal.stride));
|
|
1471
|
+
if (position2.array.length > 0) {
|
|
1472
|
+
geometry.setAttribute("position", new THREE.Float32BufferAttribute(position2.array, position2.stride));
|
|
1848
1473
|
}
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
if (
|
|
1853
|
-
|
|
1474
|
+
if (normal.array.length > 0) {
|
|
1475
|
+
geometry.setAttribute("normal", new THREE.Float32BufferAttribute(normal.array, normal.stride));
|
|
1476
|
+
}
|
|
1477
|
+
if (color.array.length > 0)
|
|
1478
|
+
geometry.setAttribute("color", new THREE.Float32BufferAttribute(color.array, color.stride));
|
|
1479
|
+
if (uv.array.length > 0)
|
|
1480
|
+
geometry.setAttribute("uv", new THREE.Float32BufferAttribute(uv.array, uv.stride));
|
|
1481
|
+
if (uv2.array.length > 0)
|
|
1482
|
+
geometry.setAttribute("uv2", new THREE.Float32BufferAttribute(uv2.array, uv2.stride));
|
|
1854
1483
|
if (skinIndex.array.length > 0) {
|
|
1855
|
-
geometry.setAttribute(
|
|
1484
|
+
geometry.setAttribute("skinIndex", new THREE.Float32BufferAttribute(skinIndex.array, skinIndex.stride));
|
|
1856
1485
|
}
|
|
1857
|
-
|
|
1858
1486
|
if (skinWeight.array.length > 0) {
|
|
1859
|
-
geometry.setAttribute(
|
|
1487
|
+
geometry.setAttribute("skinWeight", new THREE.Float32BufferAttribute(skinWeight.array, skinWeight.stride));
|
|
1860
1488
|
}
|
|
1861
|
-
|
|
1862
1489
|
build.data = geometry;
|
|
1863
1490
|
build.type = primitives[0].type;
|
|
1864
1491
|
build.materialKeys = materialKeys;
|
|
1865
1492
|
return build;
|
|
1866
1493
|
}
|
|
1867
|
-
|
|
1868
1494
|
function buildGeometryData(primitive, source, offset, array) {
|
|
1869
1495
|
const indices = primitive.p;
|
|
1870
1496
|
const stride = primitive.stride;
|
|
1871
1497
|
const vcount = primitive.vcount;
|
|
1872
|
-
|
|
1873
1498
|
function pushVector(i) {
|
|
1874
1499
|
let index = indices[i + offset] * sourceStride;
|
|
1875
1500
|
const length = index + sourceStride;
|
|
1876
|
-
|
|
1877
1501
|
for (; index < length; index++) {
|
|
1878
1502
|
array.push(sourceArray[index]);
|
|
1879
1503
|
}
|
|
1880
1504
|
}
|
|
1881
|
-
|
|
1882
1505
|
const sourceArray = source.array;
|
|
1883
1506
|
const sourceStride = source.stride;
|
|
1884
|
-
|
|
1885
|
-
if (primitive.vcount !== undefined) {
|
|
1507
|
+
if (primitive.vcount !== void 0) {
|
|
1886
1508
|
let index = 0;
|
|
1887
|
-
|
|
1888
1509
|
for (let i = 0, l = vcount.length; i < l; i++) {
|
|
1889
|
-
const
|
|
1890
|
-
|
|
1891
|
-
if (count === 4) {
|
|
1510
|
+
const count2 = vcount[i];
|
|
1511
|
+
if (count2 === 4) {
|
|
1892
1512
|
const a = index + stride * 0;
|
|
1893
1513
|
const b = index + stride * 1;
|
|
1894
1514
|
const c = index + stride * 2;
|
|
@@ -1899,15 +1519,15 @@ class ColladaLoader extends Loader {
|
|
|
1899
1519
|
pushVector(b);
|
|
1900
1520
|
pushVector(c);
|
|
1901
1521
|
pushVector(d);
|
|
1902
|
-
} else if (
|
|
1522
|
+
} else if (count2 === 3) {
|
|
1903
1523
|
const a = index + stride * 0;
|
|
1904
1524
|
const b = index + stride * 1;
|
|
1905
1525
|
const c = index + stride * 2;
|
|
1906
1526
|
pushVector(a);
|
|
1907
1527
|
pushVector(b);
|
|
1908
1528
|
pushVector(c);
|
|
1909
|
-
} else if (
|
|
1910
|
-
for (let k = 1, kl =
|
|
1529
|
+
} else if (count2 > 4) {
|
|
1530
|
+
for (let k = 1, kl = count2 - 2; k <= kl; k++) {
|
|
1911
1531
|
const a = index + stride * 0;
|
|
1912
1532
|
const b = index + stride * k;
|
|
1913
1533
|
const c = index + stride * (k + 1);
|
|
@@ -1916,8 +1536,7 @@ class ColladaLoader extends Loader {
|
|
|
1916
1536
|
pushVector(c);
|
|
1917
1537
|
}
|
|
1918
1538
|
}
|
|
1919
|
-
|
|
1920
|
-
index += stride * count;
|
|
1539
|
+
index += stride * count2;
|
|
1921
1540
|
}
|
|
1922
1541
|
} else {
|
|
1923
1542
|
for (let i = 0, l = indices.length; i < l; i += stride) {
|
|
@@ -1925,493 +1544,420 @@ class ColladaLoader extends Loader {
|
|
|
1925
1544
|
}
|
|
1926
1545
|
}
|
|
1927
1546
|
}
|
|
1928
|
-
|
|
1929
1547
|
function getGeometry(id) {
|
|
1930
1548
|
return getBuild(library.geometries[id], buildGeometry);
|
|
1931
|
-
}
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
function parseKinematicsModel(xml) {
|
|
1549
|
+
}
|
|
1550
|
+
function parseKinematicsModel(xml2) {
|
|
1935
1551
|
const data = {
|
|
1936
|
-
name:
|
|
1552
|
+
name: xml2.getAttribute("name") || "",
|
|
1937
1553
|
joints: {},
|
|
1938
1554
|
links: []
|
|
1939
1555
|
};
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1556
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1557
|
+
const child = xml2.childNodes[i];
|
|
1558
|
+
if (child.nodeType !== 1)
|
|
1559
|
+
continue;
|
|
1945
1560
|
switch (child.nodeName) {
|
|
1946
|
-
case
|
|
1561
|
+
case "technique_common":
|
|
1947
1562
|
parseKinematicsTechniqueCommon(child, data);
|
|
1948
1563
|
break;
|
|
1949
1564
|
}
|
|
1950
1565
|
}
|
|
1951
|
-
|
|
1952
|
-
library.kinematicsModels[xml.getAttribute('id')] = data;
|
|
1566
|
+
library.kinematicsModels[xml2.getAttribute("id")] = data;
|
|
1953
1567
|
}
|
|
1954
|
-
|
|
1955
1568
|
function buildKinematicsModel(data) {
|
|
1956
|
-
if (data.build !==
|
|
1569
|
+
if (data.build !== void 0)
|
|
1570
|
+
return data.build;
|
|
1957
1571
|
return data;
|
|
1958
1572
|
}
|
|
1959
|
-
|
|
1960
1573
|
function getKinematicsModel(id) {
|
|
1961
1574
|
return getBuild(library.kinematicsModels[id], buildKinematicsModel);
|
|
1962
1575
|
}
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1576
|
+
function parseKinematicsTechniqueCommon(xml2, data) {
|
|
1577
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1578
|
+
const child = xml2.childNodes[i];
|
|
1579
|
+
if (child.nodeType !== 1)
|
|
1580
|
+
continue;
|
|
1969
1581
|
switch (child.nodeName) {
|
|
1970
|
-
case
|
|
1971
|
-
data.joints[child.getAttribute(
|
|
1582
|
+
case "joint":
|
|
1583
|
+
data.joints[child.getAttribute("sid")] = parseKinematicsJoint(child);
|
|
1972
1584
|
break;
|
|
1973
|
-
|
|
1974
|
-
case 'link':
|
|
1585
|
+
case "link":
|
|
1975
1586
|
data.links.push(parseKinematicsLink(child));
|
|
1976
1587
|
break;
|
|
1977
1588
|
}
|
|
1978
1589
|
}
|
|
1979
1590
|
}
|
|
1980
|
-
|
|
1981
|
-
function parseKinematicsJoint(xml) {
|
|
1591
|
+
function parseKinematicsJoint(xml2) {
|
|
1982
1592
|
let data;
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1593
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1594
|
+
const child = xml2.childNodes[i];
|
|
1595
|
+
if (child.nodeType !== 1)
|
|
1596
|
+
continue;
|
|
1988
1597
|
switch (child.nodeName) {
|
|
1989
|
-
case
|
|
1990
|
-
case
|
|
1598
|
+
case "prismatic":
|
|
1599
|
+
case "revolute":
|
|
1991
1600
|
data = parseKinematicsJointParameter(child);
|
|
1992
1601
|
break;
|
|
1993
1602
|
}
|
|
1994
1603
|
}
|
|
1995
|
-
|
|
1996
1604
|
return data;
|
|
1997
1605
|
}
|
|
1998
|
-
|
|
1999
|
-
function parseKinematicsJointParameter(xml) {
|
|
1606
|
+
function parseKinematicsJointParameter(xml2) {
|
|
2000
1607
|
const data = {
|
|
2001
|
-
sid:
|
|
2002
|
-
name:
|
|
2003
|
-
axis: new Vector3(),
|
|
1608
|
+
sid: xml2.getAttribute("sid"),
|
|
1609
|
+
name: xml2.getAttribute("name") || "",
|
|
1610
|
+
axis: new THREE.Vector3(),
|
|
2004
1611
|
limits: {
|
|
2005
1612
|
min: 0,
|
|
2006
1613
|
max: 0
|
|
2007
1614
|
},
|
|
2008
|
-
type:
|
|
1615
|
+
type: xml2.nodeName,
|
|
2009
1616
|
static: false,
|
|
2010
1617
|
zeroPosition: 0,
|
|
2011
1618
|
middlePosition: 0
|
|
2012
1619
|
};
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
1620
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1621
|
+
const child = xml2.childNodes[i];
|
|
1622
|
+
if (child.nodeType !== 1)
|
|
1623
|
+
continue;
|
|
2018
1624
|
switch (child.nodeName) {
|
|
2019
|
-
case
|
|
1625
|
+
case "axis":
|
|
2020
1626
|
const array = parseFloats(child.textContent);
|
|
2021
1627
|
data.axis.fromArray(array);
|
|
2022
1628
|
break;
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
const
|
|
2026
|
-
const min = child.getElementsByTagName('min')[0];
|
|
1629
|
+
case "limits":
|
|
1630
|
+
const max = child.getElementsByTagName("max")[0];
|
|
1631
|
+
const min = child.getElementsByTagName("min")[0];
|
|
2027
1632
|
data.limits.max = parseFloat(max.textContent);
|
|
2028
1633
|
data.limits.min = parseFloat(min.textContent);
|
|
2029
1634
|
break;
|
|
2030
1635
|
}
|
|
2031
|
-
}
|
|
2032
|
-
|
|
2033
|
-
|
|
1636
|
+
}
|
|
2034
1637
|
if (data.limits.min >= data.limits.max) {
|
|
2035
1638
|
data.static = true;
|
|
2036
|
-
}
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
data.middlePosition = (data.limits.min + data.limits.max) / 2.0;
|
|
1639
|
+
}
|
|
1640
|
+
data.middlePosition = (data.limits.min + data.limits.max) / 2;
|
|
2040
1641
|
return data;
|
|
2041
1642
|
}
|
|
2042
|
-
|
|
2043
|
-
function parseKinematicsLink(xml) {
|
|
1643
|
+
function parseKinematicsLink(xml2) {
|
|
2044
1644
|
const data = {
|
|
2045
|
-
sid:
|
|
2046
|
-
name:
|
|
1645
|
+
sid: xml2.getAttribute("sid"),
|
|
1646
|
+
name: xml2.getAttribute("name") || "",
|
|
2047
1647
|
attachments: [],
|
|
2048
1648
|
transforms: []
|
|
2049
1649
|
};
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
1650
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1651
|
+
const child = xml2.childNodes[i];
|
|
1652
|
+
if (child.nodeType !== 1)
|
|
1653
|
+
continue;
|
|
2055
1654
|
switch (child.nodeName) {
|
|
2056
|
-
case
|
|
1655
|
+
case "attachment_full":
|
|
2057
1656
|
data.attachments.push(parseKinematicsAttachment(child));
|
|
2058
1657
|
break;
|
|
2059
|
-
|
|
2060
|
-
case
|
|
2061
|
-
case
|
|
2062
|
-
case 'rotate':
|
|
1658
|
+
case "matrix":
|
|
1659
|
+
case "translate":
|
|
1660
|
+
case "rotate":
|
|
2063
1661
|
data.transforms.push(parseKinematicsTransform(child));
|
|
2064
1662
|
break;
|
|
2065
1663
|
}
|
|
2066
1664
|
}
|
|
2067
|
-
|
|
2068
1665
|
return data;
|
|
2069
1666
|
}
|
|
2070
|
-
|
|
2071
|
-
function parseKinematicsAttachment(xml) {
|
|
1667
|
+
function parseKinematicsAttachment(xml2) {
|
|
2072
1668
|
const data = {
|
|
2073
|
-
joint:
|
|
1669
|
+
joint: xml2.getAttribute("joint").split("/").pop(),
|
|
2074
1670
|
transforms: [],
|
|
2075
1671
|
links: []
|
|
2076
1672
|
};
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
1673
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1674
|
+
const child = xml2.childNodes[i];
|
|
1675
|
+
if (child.nodeType !== 1)
|
|
1676
|
+
continue;
|
|
2082
1677
|
switch (child.nodeName) {
|
|
2083
|
-
case
|
|
1678
|
+
case "link":
|
|
2084
1679
|
data.links.push(parseKinematicsLink(child));
|
|
2085
1680
|
break;
|
|
2086
|
-
|
|
2087
|
-
case
|
|
2088
|
-
case
|
|
2089
|
-
case 'rotate':
|
|
1681
|
+
case "matrix":
|
|
1682
|
+
case "translate":
|
|
1683
|
+
case "rotate":
|
|
2090
1684
|
data.transforms.push(parseKinematicsTransform(child));
|
|
2091
1685
|
break;
|
|
2092
1686
|
}
|
|
2093
1687
|
}
|
|
2094
|
-
|
|
2095
1688
|
return data;
|
|
2096
1689
|
}
|
|
2097
|
-
|
|
2098
|
-
function parseKinematicsTransform(xml) {
|
|
1690
|
+
function parseKinematicsTransform(xml2) {
|
|
2099
1691
|
const data = {
|
|
2100
|
-
type:
|
|
1692
|
+
type: xml2.nodeName
|
|
2101
1693
|
};
|
|
2102
|
-
const array = parseFloats(
|
|
2103
|
-
|
|
1694
|
+
const array = parseFloats(xml2.textContent);
|
|
2104
1695
|
switch (data.type) {
|
|
2105
|
-
case
|
|
2106
|
-
data.obj = new Matrix4();
|
|
1696
|
+
case "matrix":
|
|
1697
|
+
data.obj = new THREE.Matrix4();
|
|
2107
1698
|
data.obj.fromArray(array).transpose();
|
|
2108
1699
|
break;
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
data.obj = new Vector3();
|
|
1700
|
+
case "translate":
|
|
1701
|
+
data.obj = new THREE.Vector3();
|
|
2112
1702
|
data.obj.fromArray(array);
|
|
2113
1703
|
break;
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
data.obj = new Vector3();
|
|
1704
|
+
case "rotate":
|
|
1705
|
+
data.obj = new THREE.Vector3();
|
|
2117
1706
|
data.obj.fromArray(array);
|
|
2118
|
-
data.angle = MathUtils.degToRad(array[3]);
|
|
1707
|
+
data.angle = THREE.MathUtils.degToRad(array[3]);
|
|
2119
1708
|
break;
|
|
2120
1709
|
}
|
|
2121
|
-
|
|
2122
1710
|
return data;
|
|
2123
|
-
}
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
function parsePhysicsModel(xml) {
|
|
1711
|
+
}
|
|
1712
|
+
function parsePhysicsModel(xml2) {
|
|
2127
1713
|
const data = {
|
|
2128
|
-
name:
|
|
1714
|
+
name: xml2.getAttribute("name") || "",
|
|
2129
1715
|
rigidBodies: {}
|
|
2130
1716
|
};
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
1717
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1718
|
+
const child = xml2.childNodes[i];
|
|
1719
|
+
if (child.nodeType !== 1)
|
|
1720
|
+
continue;
|
|
2136
1721
|
switch (child.nodeName) {
|
|
2137
|
-
case
|
|
2138
|
-
data.rigidBodies[child.getAttribute(
|
|
2139
|
-
parsePhysicsRigidBody(child, data.rigidBodies[child.getAttribute(
|
|
1722
|
+
case "rigid_body":
|
|
1723
|
+
data.rigidBodies[child.getAttribute("name")] = {};
|
|
1724
|
+
parsePhysicsRigidBody(child, data.rigidBodies[child.getAttribute("name")]);
|
|
2140
1725
|
break;
|
|
2141
1726
|
}
|
|
2142
1727
|
}
|
|
2143
|
-
|
|
2144
|
-
library.physicsModels[xml.getAttribute('id')] = data;
|
|
1728
|
+
library.physicsModels[xml2.getAttribute("id")] = data;
|
|
2145
1729
|
}
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
1730
|
+
function parsePhysicsRigidBody(xml2, data) {
|
|
1731
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1732
|
+
const child = xml2.childNodes[i];
|
|
1733
|
+
if (child.nodeType !== 1)
|
|
1734
|
+
continue;
|
|
2152
1735
|
switch (child.nodeName) {
|
|
2153
|
-
case
|
|
1736
|
+
case "technique_common":
|
|
2154
1737
|
parsePhysicsTechniqueCommon(child, data);
|
|
2155
1738
|
break;
|
|
2156
1739
|
}
|
|
2157
1740
|
}
|
|
2158
1741
|
}
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
1742
|
+
function parsePhysicsTechniqueCommon(xml2, data) {
|
|
1743
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1744
|
+
const child = xml2.childNodes[i];
|
|
1745
|
+
if (child.nodeType !== 1)
|
|
1746
|
+
continue;
|
|
2165
1747
|
switch (child.nodeName) {
|
|
2166
|
-
case
|
|
1748
|
+
case "inertia":
|
|
2167
1749
|
data.inertia = parseFloats(child.textContent);
|
|
2168
1750
|
break;
|
|
2169
|
-
|
|
2170
|
-
case 'mass':
|
|
1751
|
+
case "mass":
|
|
2171
1752
|
data.mass = parseFloats(child.textContent)[0];
|
|
2172
1753
|
break;
|
|
2173
1754
|
}
|
|
2174
1755
|
}
|
|
2175
|
-
}
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
function parseKinematicsScene(xml) {
|
|
1756
|
+
}
|
|
1757
|
+
function parseKinematicsScene(xml2) {
|
|
2179
1758
|
const data = {
|
|
2180
1759
|
bindJointAxis: []
|
|
2181
1760
|
};
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
1761
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1762
|
+
const child = xml2.childNodes[i];
|
|
1763
|
+
if (child.nodeType !== 1)
|
|
1764
|
+
continue;
|
|
2187
1765
|
switch (child.nodeName) {
|
|
2188
|
-
case
|
|
1766
|
+
case "bind_joint_axis":
|
|
2189
1767
|
data.bindJointAxis.push(parseKinematicsBindJointAxis(child));
|
|
2190
1768
|
break;
|
|
2191
1769
|
}
|
|
2192
1770
|
}
|
|
2193
|
-
|
|
2194
|
-
library.kinematicsScenes[parseId(xml.getAttribute('url'))] = data;
|
|
1771
|
+
library.kinematicsScenes[parseId(xml2.getAttribute("url"))] = data;
|
|
2195
1772
|
}
|
|
2196
|
-
|
|
2197
|
-
function parseKinematicsBindJointAxis(xml) {
|
|
1773
|
+
function parseKinematicsBindJointAxis(xml2) {
|
|
2198
1774
|
const data = {
|
|
2199
|
-
target:
|
|
1775
|
+
target: xml2.getAttribute("target").split("/").pop()
|
|
2200
1776
|
};
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
1777
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1778
|
+
const child = xml2.childNodes[i];
|
|
1779
|
+
if (child.nodeType !== 1)
|
|
1780
|
+
continue;
|
|
2206
1781
|
switch (child.nodeName) {
|
|
2207
|
-
case
|
|
2208
|
-
const param = child.getElementsByTagName(
|
|
1782
|
+
case "axis":
|
|
1783
|
+
const param = child.getElementsByTagName("param")[0];
|
|
2209
1784
|
data.axis = param.textContent;
|
|
2210
|
-
const tmpJointIndex = data.axis.split(
|
|
1785
|
+
const tmpJointIndex = data.axis.split("inst_").pop().split("axis")[0];
|
|
2211
1786
|
data.jointIndex = tmpJointIndex.substr(0, tmpJointIndex.length - 1);
|
|
2212
1787
|
break;
|
|
2213
1788
|
}
|
|
2214
1789
|
}
|
|
2215
|
-
|
|
2216
1790
|
return data;
|
|
2217
1791
|
}
|
|
2218
|
-
|
|
2219
1792
|
function buildKinematicsScene(data) {
|
|
2220
|
-
if (data.build !==
|
|
1793
|
+
if (data.build !== void 0)
|
|
1794
|
+
return data.build;
|
|
2221
1795
|
return data;
|
|
2222
1796
|
}
|
|
2223
|
-
|
|
2224
1797
|
function getKinematicsScene(id) {
|
|
2225
1798
|
return getBuild(library.kinematicsScenes[id], buildKinematicsScene);
|
|
2226
1799
|
}
|
|
2227
|
-
|
|
2228
1800
|
function setupKinematics() {
|
|
2229
1801
|
const kinematicsModelId = Object.keys(library.kinematicsModels)[0];
|
|
2230
1802
|
const kinematicsSceneId = Object.keys(library.kinematicsScenes)[0];
|
|
2231
1803
|
const visualSceneId = Object.keys(library.visualScenes)[0];
|
|
2232
|
-
if (kinematicsModelId ===
|
|
1804
|
+
if (kinematicsModelId === void 0 || kinematicsSceneId === void 0)
|
|
1805
|
+
return;
|
|
2233
1806
|
const kinematicsModel = getKinematicsModel(kinematicsModelId);
|
|
2234
1807
|
const kinematicsScene = getKinematicsScene(kinematicsSceneId);
|
|
2235
1808
|
const visualScene = getVisualScene(visualSceneId);
|
|
2236
1809
|
const bindJointAxis = kinematicsScene.bindJointAxis;
|
|
2237
1810
|
const jointMap = {};
|
|
2238
|
-
|
|
2239
1811
|
for (let i = 0, l = bindJointAxis.length; i < l; i++) {
|
|
2240
|
-
const axis = bindJointAxis[i];
|
|
2241
|
-
|
|
1812
|
+
const axis = bindJointAxis[i];
|
|
2242
1813
|
const targetElement = collada.querySelector('[sid="' + axis.target + '"]');
|
|
2243
|
-
|
|
2244
1814
|
if (targetElement) {
|
|
2245
|
-
|
|
2246
|
-
const parentVisualElement = targetElement.parentElement; // connect the joint of the kinematics model with the element in the visual scene
|
|
2247
|
-
|
|
1815
|
+
const parentVisualElement = targetElement.parentElement;
|
|
2248
1816
|
connect(axis.jointIndex, parentVisualElement);
|
|
2249
1817
|
}
|
|
2250
1818
|
}
|
|
2251
|
-
|
|
2252
1819
|
function connect(jointIndex, visualElement) {
|
|
2253
|
-
const visualElementName = visualElement.getAttribute(
|
|
1820
|
+
const visualElementName = visualElement.getAttribute("name");
|
|
2254
1821
|
const joint = kinematicsModel.joints[jointIndex];
|
|
2255
|
-
visualScene.traverse(function
|
|
1822
|
+
visualScene.traverse(function(object) {
|
|
2256
1823
|
if (object.name === visualElementName) {
|
|
2257
1824
|
jointMap[jointIndex] = {
|
|
2258
|
-
object
|
|
1825
|
+
object,
|
|
2259
1826
|
transforms: buildTransformList(visualElement),
|
|
2260
|
-
joint
|
|
1827
|
+
joint,
|
|
2261
1828
|
position: joint.zeroPosition
|
|
2262
1829
|
};
|
|
2263
1830
|
}
|
|
2264
1831
|
});
|
|
2265
1832
|
}
|
|
2266
|
-
|
|
2267
|
-
const m0 = new Matrix4();
|
|
1833
|
+
const m0 = new THREE.Matrix4();
|
|
2268
1834
|
kinematics = {
|
|
2269
1835
|
joints: kinematicsModel && kinematicsModel.joints,
|
|
2270
|
-
getJointValue: function
|
|
1836
|
+
getJointValue: function(jointIndex) {
|
|
2271
1837
|
const jointData = jointMap[jointIndex];
|
|
2272
|
-
|
|
2273
1838
|
if (jointData) {
|
|
2274
1839
|
return jointData.position;
|
|
2275
1840
|
} else {
|
|
2276
|
-
console.warn(
|
|
1841
|
+
console.warn("THREE.ColladaLoader: Joint " + jointIndex + " doesn't exist.");
|
|
2277
1842
|
}
|
|
2278
1843
|
},
|
|
2279
|
-
setJointValue: function
|
|
1844
|
+
setJointValue: function(jointIndex, value) {
|
|
2280
1845
|
const jointData = jointMap[jointIndex];
|
|
2281
|
-
|
|
2282
1846
|
if (jointData) {
|
|
2283
1847
|
const joint = jointData.joint;
|
|
2284
|
-
|
|
2285
1848
|
if (value > joint.limits.max || value < joint.limits.min) {
|
|
2286
|
-
console.warn(
|
|
1849
|
+
console.warn(
|
|
1850
|
+
"THREE.ColladaLoader: Joint " + jointIndex + " value " + value + " outside of limits (min: " + joint.limits.min + ", max: " + joint.limits.max + ")."
|
|
1851
|
+
);
|
|
2287
1852
|
} else if (joint.static) {
|
|
2288
|
-
console.warn(
|
|
1853
|
+
console.warn("THREE.ColladaLoader: Joint " + jointIndex + " is static.");
|
|
2289
1854
|
} else {
|
|
2290
1855
|
const object = jointData.object;
|
|
2291
1856
|
const axis = joint.axis;
|
|
2292
1857
|
const transforms = jointData.transforms;
|
|
2293
|
-
matrix.identity();
|
|
2294
|
-
|
|
1858
|
+
matrix.identity();
|
|
2295
1859
|
for (let i = 0; i < transforms.length; i++) {
|
|
2296
|
-
const transform = transforms[i];
|
|
2297
|
-
|
|
1860
|
+
const transform = transforms[i];
|
|
2298
1861
|
if (transform.sid && transform.sid.indexOf(jointIndex) !== -1) {
|
|
2299
1862
|
switch (joint.type) {
|
|
2300
|
-
case
|
|
2301
|
-
matrix.multiply(m0.makeRotationAxis(axis, MathUtils.degToRad(value)));
|
|
1863
|
+
case "revolute":
|
|
1864
|
+
matrix.multiply(m0.makeRotationAxis(axis, THREE.MathUtils.degToRad(value)));
|
|
2302
1865
|
break;
|
|
2303
|
-
|
|
2304
|
-
case 'prismatic':
|
|
1866
|
+
case "prismatic":
|
|
2305
1867
|
matrix.multiply(m0.makeTranslation(axis.x * value, axis.y * value, axis.z * value));
|
|
2306
1868
|
break;
|
|
2307
|
-
|
|
2308
1869
|
default:
|
|
2309
|
-
console.warn(
|
|
1870
|
+
console.warn("THREE.ColladaLoader: Unknown joint type: " + joint.type);
|
|
2310
1871
|
break;
|
|
2311
1872
|
}
|
|
2312
1873
|
} else {
|
|
2313
1874
|
switch (transform.type) {
|
|
2314
|
-
case
|
|
1875
|
+
case "matrix":
|
|
2315
1876
|
matrix.multiply(transform.obj);
|
|
2316
1877
|
break;
|
|
2317
|
-
|
|
2318
|
-
case 'translate':
|
|
1878
|
+
case "translate":
|
|
2319
1879
|
matrix.multiply(m0.makeTranslation(transform.obj.x, transform.obj.y, transform.obj.z));
|
|
2320
1880
|
break;
|
|
2321
|
-
|
|
2322
|
-
case 'scale':
|
|
1881
|
+
case "scale":
|
|
2323
1882
|
matrix.scale(transform.obj);
|
|
2324
1883
|
break;
|
|
2325
|
-
|
|
2326
|
-
case 'rotate':
|
|
1884
|
+
case "rotate":
|
|
2327
1885
|
matrix.multiply(m0.makeRotationAxis(transform.obj, transform.angle));
|
|
2328
1886
|
break;
|
|
2329
1887
|
}
|
|
2330
1888
|
}
|
|
2331
1889
|
}
|
|
2332
|
-
|
|
2333
1890
|
object.matrix.copy(matrix);
|
|
2334
1891
|
object.matrix.decompose(object.position, object.quaternion, object.scale);
|
|
2335
1892
|
jointMap[jointIndex].position = value;
|
|
2336
1893
|
}
|
|
2337
1894
|
} else {
|
|
2338
|
-
console.log(
|
|
1895
|
+
console.log("THREE.ColladaLoader: " + jointIndex + " does not exist.");
|
|
2339
1896
|
}
|
|
2340
1897
|
}
|
|
2341
1898
|
};
|
|
2342
1899
|
}
|
|
2343
|
-
|
|
2344
1900
|
function buildTransformList(node) {
|
|
2345
1901
|
const transforms = [];
|
|
2346
|
-
const
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
let array,
|
|
2352
|
-
|
|
1902
|
+
const xml2 = collada.querySelector('[id="' + node.id + '"]');
|
|
1903
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1904
|
+
const child = xml2.childNodes[i];
|
|
1905
|
+
if (child.nodeType !== 1)
|
|
1906
|
+
continue;
|
|
1907
|
+
let array, vector2;
|
|
2353
1908
|
switch (child.nodeName) {
|
|
2354
|
-
case
|
|
1909
|
+
case "matrix":
|
|
2355
1910
|
array = parseFloats(child.textContent);
|
|
2356
|
-
const
|
|
1911
|
+
const matrix2 = new THREE.Matrix4().fromArray(array).transpose();
|
|
2357
1912
|
transforms.push({
|
|
2358
|
-
sid: child.getAttribute(
|
|
1913
|
+
sid: child.getAttribute("sid"),
|
|
2359
1914
|
type: child.nodeName,
|
|
2360
|
-
obj:
|
|
1915
|
+
obj: matrix2
|
|
2361
1916
|
});
|
|
2362
1917
|
break;
|
|
2363
|
-
|
|
2364
|
-
case
|
|
2365
|
-
case 'scale':
|
|
1918
|
+
case "translate":
|
|
1919
|
+
case "scale":
|
|
2366
1920
|
array = parseFloats(child.textContent);
|
|
2367
|
-
|
|
1921
|
+
vector2 = new THREE.Vector3().fromArray(array);
|
|
2368
1922
|
transforms.push({
|
|
2369
|
-
sid: child.getAttribute(
|
|
1923
|
+
sid: child.getAttribute("sid"),
|
|
2370
1924
|
type: child.nodeName,
|
|
2371
|
-
obj:
|
|
1925
|
+
obj: vector2
|
|
2372
1926
|
});
|
|
2373
1927
|
break;
|
|
2374
|
-
|
|
2375
|
-
case 'rotate':
|
|
1928
|
+
case "rotate":
|
|
2376
1929
|
array = parseFloats(child.textContent);
|
|
2377
|
-
|
|
2378
|
-
const angle = MathUtils.degToRad(array[3]);
|
|
1930
|
+
vector2 = new THREE.Vector3().fromArray(array);
|
|
1931
|
+
const angle = THREE.MathUtils.degToRad(array[3]);
|
|
2379
1932
|
transforms.push({
|
|
2380
|
-
sid: child.getAttribute(
|
|
1933
|
+
sid: child.getAttribute("sid"),
|
|
2381
1934
|
type: child.nodeName,
|
|
2382
|
-
obj:
|
|
2383
|
-
angle
|
|
1935
|
+
obj: vector2,
|
|
1936
|
+
angle
|
|
2384
1937
|
});
|
|
2385
1938
|
break;
|
|
2386
1939
|
}
|
|
2387
1940
|
}
|
|
2388
|
-
|
|
2389
1941
|
return transforms;
|
|
2390
|
-
}
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
function prepareNodes(xml) {
|
|
2394
|
-
const elements = xml.getElementsByTagName('node'); // ensure all node elements have id attributes
|
|
2395
|
-
|
|
1942
|
+
}
|
|
1943
|
+
function prepareNodes(xml2) {
|
|
1944
|
+
const elements = xml2.getElementsByTagName("node");
|
|
2396
1945
|
for (let i = 0; i < elements.length; i++) {
|
|
2397
1946
|
const element = elements[i];
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
element.setAttribute('id', generateId());
|
|
1947
|
+
if (element.hasAttribute("id") === false) {
|
|
1948
|
+
element.setAttribute("id", generateId());
|
|
2401
1949
|
}
|
|
2402
1950
|
}
|
|
2403
1951
|
}
|
|
2404
|
-
|
|
2405
|
-
const
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
function parseNode(xml) {
|
|
1952
|
+
const matrix = new THREE.Matrix4();
|
|
1953
|
+
const vector = new THREE.Vector3();
|
|
1954
|
+
function parseNode(xml2) {
|
|
2409
1955
|
const data = {
|
|
2410
|
-
name:
|
|
2411
|
-
type:
|
|
2412
|
-
id:
|
|
2413
|
-
sid:
|
|
2414
|
-
matrix: new Matrix4(),
|
|
1956
|
+
name: xml2.getAttribute("name") || "",
|
|
1957
|
+
type: xml2.getAttribute("type"),
|
|
1958
|
+
id: xml2.getAttribute("id"),
|
|
1959
|
+
sid: xml2.getAttribute("sid"),
|
|
1960
|
+
matrix: new THREE.Matrix4(),
|
|
2415
1961
|
nodes: [],
|
|
2416
1962
|
instanceCameras: [],
|
|
2417
1963
|
instanceControllers: [],
|
|
@@ -2420,238 +1966,183 @@ class ColladaLoader extends Loader {
|
|
|
2420
1966
|
instanceNodes: [],
|
|
2421
1967
|
transforms: {}
|
|
2422
1968
|
};
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
1969
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
1970
|
+
const child = xml2.childNodes[i];
|
|
1971
|
+
if (child.nodeType !== 1)
|
|
1972
|
+
continue;
|
|
2427
1973
|
let array;
|
|
2428
|
-
|
|
2429
1974
|
switch (child.nodeName) {
|
|
2430
|
-
case
|
|
2431
|
-
data.nodes.push(child.getAttribute(
|
|
1975
|
+
case "node":
|
|
1976
|
+
data.nodes.push(child.getAttribute("id"));
|
|
2432
1977
|
parseNode(child);
|
|
2433
1978
|
break;
|
|
2434
|
-
|
|
2435
|
-
|
|
2436
|
-
data.instanceCameras.push(parseId(child.getAttribute('url')));
|
|
1979
|
+
case "instance_camera":
|
|
1980
|
+
data.instanceCameras.push(parseId(child.getAttribute("url")));
|
|
2437
1981
|
break;
|
|
2438
|
-
|
|
2439
|
-
case 'instance_controller':
|
|
1982
|
+
case "instance_controller":
|
|
2440
1983
|
data.instanceControllers.push(parseNodeInstance(child));
|
|
2441
1984
|
break;
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
data.instanceLights.push(parseId(child.getAttribute('url')));
|
|
1985
|
+
case "instance_light":
|
|
1986
|
+
data.instanceLights.push(parseId(child.getAttribute("url")));
|
|
2445
1987
|
break;
|
|
2446
|
-
|
|
2447
|
-
case 'instance_geometry':
|
|
1988
|
+
case "instance_geometry":
|
|
2448
1989
|
data.instanceGeometries.push(parseNodeInstance(child));
|
|
2449
1990
|
break;
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
data.instanceNodes.push(parseId(child.getAttribute('url')));
|
|
1991
|
+
case "instance_node":
|
|
1992
|
+
data.instanceNodes.push(parseId(child.getAttribute("url")));
|
|
2453
1993
|
break;
|
|
2454
|
-
|
|
2455
|
-
case 'matrix':
|
|
1994
|
+
case "matrix":
|
|
2456
1995
|
array = parseFloats(child.textContent);
|
|
2457
1996
|
data.matrix.multiply(matrix.fromArray(array).transpose());
|
|
2458
|
-
data.transforms[child.getAttribute(
|
|
1997
|
+
data.transforms[child.getAttribute("sid")] = child.nodeName;
|
|
2459
1998
|
break;
|
|
2460
|
-
|
|
2461
|
-
case 'translate':
|
|
1999
|
+
case "translate":
|
|
2462
2000
|
array = parseFloats(child.textContent);
|
|
2463
2001
|
vector.fromArray(array);
|
|
2464
2002
|
data.matrix.multiply(matrix.makeTranslation(vector.x, vector.y, vector.z));
|
|
2465
|
-
data.transforms[child.getAttribute(
|
|
2003
|
+
data.transforms[child.getAttribute("sid")] = child.nodeName;
|
|
2466
2004
|
break;
|
|
2467
|
-
|
|
2468
|
-
case 'rotate':
|
|
2005
|
+
case "rotate":
|
|
2469
2006
|
array = parseFloats(child.textContent);
|
|
2470
|
-
const angle = MathUtils.degToRad(array[3]);
|
|
2007
|
+
const angle = THREE.MathUtils.degToRad(array[3]);
|
|
2471
2008
|
data.matrix.multiply(matrix.makeRotationAxis(vector.fromArray(array), angle));
|
|
2472
|
-
data.transforms[child.getAttribute(
|
|
2009
|
+
data.transforms[child.getAttribute("sid")] = child.nodeName;
|
|
2473
2010
|
break;
|
|
2474
|
-
|
|
2475
|
-
case 'scale':
|
|
2011
|
+
case "scale":
|
|
2476
2012
|
array = parseFloats(child.textContent);
|
|
2477
2013
|
data.matrix.scale(vector.fromArray(array));
|
|
2478
|
-
data.transforms[child.getAttribute(
|
|
2014
|
+
data.transforms[child.getAttribute("sid")] = child.nodeName;
|
|
2479
2015
|
break;
|
|
2480
|
-
|
|
2481
|
-
case 'extra':
|
|
2016
|
+
case "extra":
|
|
2482
2017
|
break;
|
|
2483
|
-
|
|
2484
2018
|
default:
|
|
2485
2019
|
console.log(child);
|
|
2486
2020
|
}
|
|
2487
2021
|
}
|
|
2488
|
-
|
|
2489
2022
|
if (hasNode(data.id)) {
|
|
2490
|
-
console.warn(
|
|
2023
|
+
console.warn(
|
|
2024
|
+
"THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.",
|
|
2025
|
+
data.id
|
|
2026
|
+
);
|
|
2491
2027
|
} else {
|
|
2492
2028
|
library.nodes[data.id] = data;
|
|
2493
2029
|
}
|
|
2494
|
-
|
|
2495
2030
|
return data;
|
|
2496
2031
|
}
|
|
2497
|
-
|
|
2498
|
-
function parseNodeInstance(xml) {
|
|
2032
|
+
function parseNodeInstance(xml2) {
|
|
2499
2033
|
const data = {
|
|
2500
|
-
id: parseId(
|
|
2034
|
+
id: parseId(xml2.getAttribute("url")),
|
|
2501
2035
|
materials: {},
|
|
2502
2036
|
skeletons: []
|
|
2503
2037
|
};
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
const child = xml.childNodes[i];
|
|
2507
|
-
|
|
2038
|
+
for (let i = 0; i < xml2.childNodes.length; i++) {
|
|
2039
|
+
const child = xml2.childNodes[i];
|
|
2508
2040
|
switch (child.nodeName) {
|
|
2509
|
-
case
|
|
2510
|
-
const instances = child.getElementsByTagName(
|
|
2511
|
-
|
|
2041
|
+
case "bind_material":
|
|
2042
|
+
const instances = child.getElementsByTagName("instance_material");
|
|
2512
2043
|
for (let j = 0; j < instances.length; j++) {
|
|
2513
2044
|
const instance = instances[j];
|
|
2514
|
-
const symbol = instance.getAttribute(
|
|
2515
|
-
const target = instance.getAttribute(
|
|
2045
|
+
const symbol = instance.getAttribute("symbol");
|
|
2046
|
+
const target = instance.getAttribute("target");
|
|
2516
2047
|
data.materials[symbol] = parseId(target);
|
|
2517
2048
|
}
|
|
2518
|
-
|
|
2519
2049
|
break;
|
|
2520
|
-
|
|
2521
|
-
case 'skeleton':
|
|
2050
|
+
case "skeleton":
|
|
2522
2051
|
data.skeletons.push(parseId(child.textContent));
|
|
2523
2052
|
break;
|
|
2053
|
+
default:
|
|
2054
|
+
break;
|
|
2524
2055
|
}
|
|
2525
2056
|
}
|
|
2526
|
-
|
|
2527
2057
|
return data;
|
|
2528
2058
|
}
|
|
2529
|
-
|
|
2530
2059
|
function buildSkeleton(skeletons, joints) {
|
|
2531
2060
|
const boneData = [];
|
|
2532
2061
|
const sortedBoneData = [];
|
|
2533
|
-
let i, j, data;
|
|
2534
|
-
// situtation with multiple "skeleton" tags per controller instance
|
|
2535
|
-
|
|
2062
|
+
let i, j, data;
|
|
2536
2063
|
for (i = 0; i < skeletons.length; i++) {
|
|
2537
2064
|
const skeleton = skeletons[i];
|
|
2538
2065
|
let root;
|
|
2539
|
-
|
|
2540
2066
|
if (hasNode(skeleton)) {
|
|
2541
2067
|
root = getNode(skeleton);
|
|
2542
2068
|
buildBoneHierarchy(root, joints, boneData);
|
|
2543
2069
|
} else if (hasVisualScene(skeleton)) {
|
|
2544
|
-
// handle case where the skeleton refers to the visual scene (#13335)
|
|
2545
2070
|
const visualScene = library.visualScenes[skeleton];
|
|
2546
2071
|
const children = visualScene.children;
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
const root = getNode(child.id);
|
|
2553
|
-
buildBoneHierarchy(root, joints, boneData);
|
|
2072
|
+
for (let j2 = 0; j2 < children.length; j2++) {
|
|
2073
|
+
const child = children[j2];
|
|
2074
|
+
if (child.type === "JOINT") {
|
|
2075
|
+
const root2 = getNode(child.id);
|
|
2076
|
+
buildBoneHierarchy(root2, joints, boneData);
|
|
2554
2077
|
}
|
|
2555
2078
|
}
|
|
2556
2079
|
} else {
|
|
2557
|
-
console.error(
|
|
2080
|
+
console.error("THREE.ColladaLoader: Unable to find root bone of skeleton with ID:", skeleton);
|
|
2558
2081
|
}
|
|
2559
|
-
}
|
|
2560
|
-
|
|
2561
|
-
|
|
2082
|
+
}
|
|
2562
2083
|
for (i = 0; i < joints.length; i++) {
|
|
2563
2084
|
for (j = 0; j < boneData.length; j++) {
|
|
2564
2085
|
data = boneData[j];
|
|
2565
|
-
|
|
2566
2086
|
if (data.bone.name === joints[i].name) {
|
|
2567
2087
|
sortedBoneData[i] = data;
|
|
2568
2088
|
data.processed = true;
|
|
2569
2089
|
break;
|
|
2570
2090
|
}
|
|
2571
2091
|
}
|
|
2572
|
-
}
|
|
2573
|
-
|
|
2574
|
-
|
|
2092
|
+
}
|
|
2575
2093
|
for (i = 0; i < boneData.length; i++) {
|
|
2576
2094
|
data = boneData[i];
|
|
2577
|
-
|
|
2578
2095
|
if (data.processed === false) {
|
|
2579
2096
|
sortedBoneData.push(data);
|
|
2580
2097
|
data.processed = true;
|
|
2581
2098
|
}
|
|
2582
|
-
}
|
|
2583
|
-
|
|
2584
|
-
|
|
2099
|
+
}
|
|
2585
2100
|
const bones = [];
|
|
2586
2101
|
const boneInverses = [];
|
|
2587
|
-
|
|
2588
2102
|
for (i = 0; i < sortedBoneData.length; i++) {
|
|
2589
2103
|
data = sortedBoneData[i];
|
|
2590
2104
|
bones.push(data.bone);
|
|
2591
2105
|
boneInverses.push(data.boneInverse);
|
|
2592
2106
|
}
|
|
2593
|
-
|
|
2594
|
-
return new Skeleton(bones, boneInverses);
|
|
2107
|
+
return new THREE.Skeleton(bones, boneInverses);
|
|
2595
2108
|
}
|
|
2596
|
-
|
|
2597
2109
|
function buildBoneHierarchy(root, joints, boneData) {
|
|
2598
|
-
|
|
2599
|
-
root.traverse(function (object) {
|
|
2110
|
+
root.traverse(function(object) {
|
|
2600
2111
|
if (object.isBone === true) {
|
|
2601
|
-
let boneInverse;
|
|
2602
|
-
|
|
2112
|
+
let boneInverse;
|
|
2603
2113
|
for (let i = 0; i < joints.length; i++) {
|
|
2604
2114
|
const joint = joints[i];
|
|
2605
|
-
|
|
2606
2115
|
if (joint.name === object.name) {
|
|
2607
2116
|
boneInverse = joint.boneInverse;
|
|
2608
2117
|
break;
|
|
2609
2118
|
}
|
|
2610
2119
|
}
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
// Unfortunately, there can be joints in the visual scene that are not part of the
|
|
2614
|
-
// corresponding controller. In this case, we have to create a dummy boneInverse matrix
|
|
2615
|
-
// for the respective bone. This bone won't affect any vertices, because there are no skin indices
|
|
2616
|
-
// and weights defined for it. But we still have to add the bone to the sorted bone list in order to
|
|
2617
|
-
// ensure a correct animation of the model.
|
|
2618
|
-
boneInverse = new Matrix4();
|
|
2120
|
+
if (boneInverse === void 0) {
|
|
2121
|
+
boneInverse = new THREE.Matrix4();
|
|
2619
2122
|
}
|
|
2620
|
-
|
|
2621
|
-
boneData.push({
|
|
2622
|
-
bone: object,
|
|
2623
|
-
boneInverse: boneInverse,
|
|
2624
|
-
processed: false
|
|
2625
|
-
});
|
|
2123
|
+
boneData.push({ bone: object, boneInverse, processed: false });
|
|
2626
2124
|
}
|
|
2627
2125
|
});
|
|
2628
2126
|
}
|
|
2629
|
-
|
|
2630
2127
|
function buildNode(data) {
|
|
2631
2128
|
const objects = [];
|
|
2632
|
-
const
|
|
2129
|
+
const matrix2 = data.matrix;
|
|
2633
2130
|
const nodes = data.nodes;
|
|
2634
2131
|
const type = data.type;
|
|
2635
2132
|
const instanceCameras = data.instanceCameras;
|
|
2636
2133
|
const instanceControllers = data.instanceControllers;
|
|
2637
2134
|
const instanceLights = data.instanceLights;
|
|
2638
2135
|
const instanceGeometries = data.instanceGeometries;
|
|
2639
|
-
const instanceNodes = data.instanceNodes;
|
|
2640
|
-
|
|
2136
|
+
const instanceNodes = data.instanceNodes;
|
|
2641
2137
|
for (let i = 0, l = nodes.length; i < l; i++) {
|
|
2642
2138
|
objects.push(getNode(nodes[i]));
|
|
2643
|
-
}
|
|
2644
|
-
|
|
2645
|
-
|
|
2139
|
+
}
|
|
2646
2140
|
for (let i = 0, l = instanceCameras.length; i < l; i++) {
|
|
2647
2141
|
const instanceCamera = getCamera(instanceCameras[i]);
|
|
2648
|
-
|
|
2649
2142
|
if (instanceCamera !== null) {
|
|
2650
2143
|
objects.push(instanceCamera.clone());
|
|
2651
2144
|
}
|
|
2652
|
-
}
|
|
2653
|
-
|
|
2654
|
-
|
|
2145
|
+
}
|
|
2655
2146
|
for (let i = 0, l = instanceControllers.length; i < l; i++) {
|
|
2656
2147
|
const instance = instanceControllers[i];
|
|
2657
2148
|
const controller = getController(instance.id);
|
|
@@ -2660,272 +2151,196 @@ class ColladaLoader extends Loader {
|
|
|
2660
2151
|
const skeletons = instance.skeletons;
|
|
2661
2152
|
const joints = controller.skin.joints;
|
|
2662
2153
|
const skeleton = buildSkeleton(skeletons, joints);
|
|
2663
|
-
|
|
2664
2154
|
for (let j = 0, jl = newObjects.length; j < jl; j++) {
|
|
2665
|
-
const
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
object.normalizeSkinWeights();
|
|
2155
|
+
const object2 = newObjects[j];
|
|
2156
|
+
if (object2.isSkinnedMesh) {
|
|
2157
|
+
object2.bind(skeleton, controller.skin.bindMatrix);
|
|
2158
|
+
object2.normalizeSkinWeights();
|
|
2670
2159
|
}
|
|
2671
|
-
|
|
2672
|
-
objects.push(object);
|
|
2160
|
+
objects.push(object2);
|
|
2673
2161
|
}
|
|
2674
|
-
}
|
|
2675
|
-
|
|
2676
|
-
|
|
2162
|
+
}
|
|
2677
2163
|
for (let i = 0, l = instanceLights.length; i < l; i++) {
|
|
2678
2164
|
const instanceLight = getLight(instanceLights[i]);
|
|
2679
|
-
|
|
2680
2165
|
if (instanceLight !== null) {
|
|
2681
2166
|
objects.push(instanceLight.clone());
|
|
2682
2167
|
}
|
|
2683
|
-
}
|
|
2684
|
-
|
|
2685
|
-
|
|
2168
|
+
}
|
|
2686
2169
|
for (let i = 0, l = instanceGeometries.length; i < l; i++) {
|
|
2687
|
-
const instance = instanceGeometries[i];
|
|
2688
|
-
// this is the case when primitives are combined like triangles and lines
|
|
2689
|
-
|
|
2170
|
+
const instance = instanceGeometries[i];
|
|
2690
2171
|
const geometries = getGeometry(instance.id);
|
|
2691
2172
|
const newObjects = buildObjects(geometries, instance.materials);
|
|
2692
|
-
|
|
2693
2173
|
for (let j = 0, jl = newObjects.length; j < jl; j++) {
|
|
2694
2174
|
objects.push(newObjects[j]);
|
|
2695
2175
|
}
|
|
2696
|
-
}
|
|
2697
|
-
|
|
2698
|
-
|
|
2176
|
+
}
|
|
2699
2177
|
for (let i = 0, l = instanceNodes.length; i < l; i++) {
|
|
2700
2178
|
objects.push(getNode(instanceNodes[i]).clone());
|
|
2701
2179
|
}
|
|
2702
|
-
|
|
2703
2180
|
let object;
|
|
2704
|
-
|
|
2705
2181
|
if (nodes.length === 0 && objects.length === 1) {
|
|
2706
2182
|
object = objects[0];
|
|
2707
2183
|
} else {
|
|
2708
|
-
object = type ===
|
|
2709
|
-
|
|
2184
|
+
object = type === "JOINT" ? new THREE.Bone() : new THREE.Group();
|
|
2710
2185
|
for (let i = 0; i < objects.length; i++) {
|
|
2711
2186
|
object.add(objects[i]);
|
|
2712
2187
|
}
|
|
2713
2188
|
}
|
|
2714
|
-
|
|
2715
|
-
object.
|
|
2716
|
-
object.matrix.copy(matrix);
|
|
2189
|
+
object.name = type === "JOINT" ? data.sid : data.name;
|
|
2190
|
+
object.matrix.copy(matrix2);
|
|
2717
2191
|
object.matrix.decompose(object.position, object.quaternion, object.scale);
|
|
2718
2192
|
return object;
|
|
2719
2193
|
}
|
|
2720
|
-
|
|
2721
|
-
const fallbackMaterial = new MeshBasicMaterial({
|
|
2722
|
-
color: 0xff00ff
|
|
2723
|
-
});
|
|
2724
|
-
|
|
2194
|
+
const fallbackMaterial = new THREE.MeshBasicMaterial({ color: 16711935 });
|
|
2725
2195
|
function resolveMaterialBinding(keys, instanceMaterials) {
|
|
2726
2196
|
const materials = [];
|
|
2727
|
-
|
|
2728
2197
|
for (let i = 0, l = keys.length; i < l; i++) {
|
|
2729
2198
|
const id = instanceMaterials[keys[i]];
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
console.warn('THREE.ColladaLoader: Material with key %s not found. Apply fallback material.', keys[i]);
|
|
2199
|
+
if (id === void 0) {
|
|
2200
|
+
console.warn("THREE.ColladaLoader: Material with key %s not found. Apply fallback material.", keys[i]);
|
|
2733
2201
|
materials.push(fallbackMaterial);
|
|
2734
2202
|
} else {
|
|
2735
2203
|
materials.push(getMaterial(id));
|
|
2736
2204
|
}
|
|
2737
2205
|
}
|
|
2738
|
-
|
|
2739
2206
|
return materials;
|
|
2740
2207
|
}
|
|
2741
|
-
|
|
2742
2208
|
function buildObjects(geometries, instanceMaterials) {
|
|
2743
2209
|
const objects = [];
|
|
2744
|
-
|
|
2745
2210
|
for (const type in geometries) {
|
|
2746
2211
|
const geometry = geometries[type];
|
|
2747
|
-
const materials = resolveMaterialBinding(geometry.materialKeys, instanceMaterials);
|
|
2748
|
-
|
|
2212
|
+
const materials = resolveMaterialBinding(geometry.materialKeys, instanceMaterials);
|
|
2749
2213
|
if (materials.length === 0) {
|
|
2750
|
-
if (type ===
|
|
2751
|
-
materials.push(new LineBasicMaterial());
|
|
2214
|
+
if (type === "lines" || type === "linestrips") {
|
|
2215
|
+
materials.push(new THREE.LineBasicMaterial());
|
|
2752
2216
|
} else {
|
|
2753
|
-
materials.push(new MeshPhongMaterial());
|
|
2217
|
+
materials.push(new THREE.MeshPhongMaterial());
|
|
2754
2218
|
}
|
|
2755
|
-
}
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
const skinning = geometry.data.attributes.skinIndex !== undefined; // choose between a single or multi materials (material array)
|
|
2759
|
-
|
|
2760
|
-
const material = materials.length === 1 ? materials[0] : materials; // now create a specific 3D object
|
|
2761
|
-
|
|
2219
|
+
}
|
|
2220
|
+
const skinning = geometry.data.attributes.skinIndex !== void 0;
|
|
2221
|
+
const material = materials.length === 1 ? materials[0] : materials;
|
|
2762
2222
|
let object;
|
|
2763
|
-
|
|
2764
2223
|
switch (type) {
|
|
2765
|
-
case
|
|
2766
|
-
object = new LineSegments(geometry.data, material);
|
|
2224
|
+
case "lines":
|
|
2225
|
+
object = new THREE.LineSegments(geometry.data, material);
|
|
2767
2226
|
break;
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
object = new Line(geometry.data, material);
|
|
2227
|
+
case "linestrips":
|
|
2228
|
+
object = new THREE.Line(geometry.data, material);
|
|
2771
2229
|
break;
|
|
2772
|
-
|
|
2773
|
-
case
|
|
2774
|
-
case 'polylist':
|
|
2230
|
+
case "triangles":
|
|
2231
|
+
case "polylist":
|
|
2775
2232
|
if (skinning) {
|
|
2776
|
-
object = new SkinnedMesh(geometry.data, material);
|
|
2233
|
+
object = new THREE.SkinnedMesh(geometry.data, material);
|
|
2777
2234
|
} else {
|
|
2778
|
-
object = new Mesh(geometry.data, material);
|
|
2235
|
+
object = new THREE.Mesh(geometry.data, material);
|
|
2779
2236
|
}
|
|
2780
|
-
|
|
2781
2237
|
break;
|
|
2782
2238
|
}
|
|
2783
|
-
|
|
2784
2239
|
objects.push(object);
|
|
2785
2240
|
}
|
|
2786
|
-
|
|
2787
2241
|
return objects;
|
|
2788
2242
|
}
|
|
2789
|
-
|
|
2790
2243
|
function hasNode(id) {
|
|
2791
|
-
return library.nodes[id] !==
|
|
2244
|
+
return library.nodes[id] !== void 0;
|
|
2792
2245
|
}
|
|
2793
|
-
|
|
2794
2246
|
function getNode(id) {
|
|
2795
2247
|
return getBuild(library.nodes[id], buildNode);
|
|
2796
|
-
}
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
function parseVisualScene(xml) {
|
|
2248
|
+
}
|
|
2249
|
+
function parseVisualScene(xml2) {
|
|
2800
2250
|
const data = {
|
|
2801
|
-
name:
|
|
2251
|
+
name: xml2.getAttribute("name"),
|
|
2802
2252
|
children: []
|
|
2803
2253
|
};
|
|
2804
|
-
prepareNodes(
|
|
2805
|
-
const elements = getElementsByTagName(
|
|
2806
|
-
|
|
2254
|
+
prepareNodes(xml2);
|
|
2255
|
+
const elements = getElementsByTagName(xml2, "node");
|
|
2807
2256
|
for (let i = 0; i < elements.length; i++) {
|
|
2808
2257
|
data.children.push(parseNode(elements[i]));
|
|
2809
2258
|
}
|
|
2810
|
-
|
|
2811
|
-
library.visualScenes[xml.getAttribute('id')] = data;
|
|
2259
|
+
library.visualScenes[xml2.getAttribute("id")] = data;
|
|
2812
2260
|
}
|
|
2813
|
-
|
|
2814
2261
|
function buildVisualScene(data) {
|
|
2815
|
-
const group = new Group();
|
|
2262
|
+
const group = new THREE.Group();
|
|
2816
2263
|
group.name = data.name;
|
|
2817
2264
|
const children = data.children;
|
|
2818
|
-
|
|
2819
2265
|
for (let i = 0; i < children.length; i++) {
|
|
2820
2266
|
const child = children[i];
|
|
2821
2267
|
group.add(getNode(child.id));
|
|
2822
2268
|
}
|
|
2823
|
-
|
|
2824
2269
|
return group;
|
|
2825
2270
|
}
|
|
2826
|
-
|
|
2827
2271
|
function hasVisualScene(id) {
|
|
2828
|
-
return library.visualScenes[id] !==
|
|
2272
|
+
return library.visualScenes[id] !== void 0;
|
|
2829
2273
|
}
|
|
2830
|
-
|
|
2831
2274
|
function getVisualScene(id) {
|
|
2832
2275
|
return getBuild(library.visualScenes[id], buildVisualScene);
|
|
2833
|
-
}
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
return getVisualScene(parseId(instance.getAttribute('url')));
|
|
2839
|
-
}
|
|
2840
|
-
|
|
2276
|
+
}
|
|
2277
|
+
function parseScene(xml2) {
|
|
2278
|
+
const instance = getElementsByTagName(xml2, "instance_visual_scene")[0];
|
|
2279
|
+
return getVisualScene(parseId(instance.getAttribute("url")));
|
|
2280
|
+
}
|
|
2841
2281
|
function setupAnimations() {
|
|
2842
2282
|
const clips = library.clips;
|
|
2843
|
-
|
|
2844
2283
|
if (isEmpty(clips) === true) {
|
|
2845
2284
|
if (isEmpty(library.animations) === false) {
|
|
2846
|
-
// if there are animations but no clips, we create a default clip for playback
|
|
2847
2285
|
const tracks = [];
|
|
2848
|
-
|
|
2849
2286
|
for (const id in library.animations) {
|
|
2850
2287
|
const animationTracks = getAnimation(id);
|
|
2851
|
-
|
|
2852
2288
|
for (let i = 0, l = animationTracks.length; i < l; i++) {
|
|
2853
2289
|
tracks.push(animationTracks[i]);
|
|
2854
2290
|
}
|
|
2855
2291
|
}
|
|
2856
|
-
|
|
2857
|
-
animations.push(new AnimationClip('default', -1, tracks));
|
|
2292
|
+
animations.push(new THREE.AnimationClip("default", -1, tracks));
|
|
2858
2293
|
}
|
|
2859
2294
|
} else {
|
|
2860
2295
|
for (const id in clips) {
|
|
2861
2296
|
animations.push(getAnimationClip(id));
|
|
2862
2297
|
}
|
|
2863
2298
|
}
|
|
2864
|
-
}
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
function parserErrorToText(parserError) {
|
|
2869
|
-
let result = '';
|
|
2870
|
-
const stack = [parserError];
|
|
2871
|
-
|
|
2299
|
+
}
|
|
2300
|
+
function parserErrorToText(parserError2) {
|
|
2301
|
+
let result = "";
|
|
2302
|
+
const stack = [parserError2];
|
|
2872
2303
|
while (stack.length) {
|
|
2873
2304
|
const node = stack.shift();
|
|
2874
|
-
|
|
2875
2305
|
if (node.nodeType === Node.TEXT_NODE) {
|
|
2876
2306
|
result += node.textContent;
|
|
2877
2307
|
} else {
|
|
2878
|
-
result +=
|
|
2308
|
+
result += "\n";
|
|
2879
2309
|
stack.push.apply(stack, node.childNodes);
|
|
2880
2310
|
}
|
|
2881
2311
|
}
|
|
2882
|
-
|
|
2883
2312
|
return result.trim();
|
|
2884
2313
|
}
|
|
2885
|
-
|
|
2886
2314
|
if (text.length === 0) {
|
|
2887
|
-
return {
|
|
2888
|
-
scene: new Scene()
|
|
2889
|
-
};
|
|
2315
|
+
return { scene: new THREE.Scene() };
|
|
2890
2316
|
}
|
|
2891
|
-
|
|
2892
|
-
const
|
|
2893
|
-
const
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
if (parserError !== undefined) {
|
|
2897
|
-
// Chrome will return parser error with a div in it
|
|
2898
|
-
const errorElement = getElementsByTagName(parserError, 'div')[0];
|
|
2317
|
+
const xml = new DOMParser().parseFromString(text, "application/xml");
|
|
2318
|
+
const collada = getElementsByTagName(xml, "COLLADA")[0];
|
|
2319
|
+
const parserError = xml.getElementsByTagName("parsererror")[0];
|
|
2320
|
+
if (parserError !== void 0) {
|
|
2321
|
+
const errorElement = getElementsByTagName(parserError, "div")[0];
|
|
2899
2322
|
let errorText;
|
|
2900
|
-
|
|
2901
2323
|
if (errorElement) {
|
|
2902
2324
|
errorText = errorElement.textContent;
|
|
2903
2325
|
} else {
|
|
2904
2326
|
errorText = parserErrorToText(parserError);
|
|
2905
2327
|
}
|
|
2906
|
-
|
|
2907
|
-
console.error('THREE.ColladaLoader: Failed to parse collada file.\n', errorText);
|
|
2328
|
+
console.error("THREE.ColladaLoader: Failed to parse collada file.\n", errorText);
|
|
2908
2329
|
return null;
|
|
2909
|
-
}
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
const
|
|
2913
|
-
|
|
2914
|
-
const asset = parseAsset(getElementsByTagName(collada, 'asset')[0]);
|
|
2915
|
-
const textureLoader = new TextureLoader(this.manager);
|
|
2330
|
+
}
|
|
2331
|
+
const version = collada.getAttribute("version");
|
|
2332
|
+
console.log("THREE.ColladaLoader: File version", version);
|
|
2333
|
+
const asset = parseAsset(getElementsByTagName(collada, "asset")[0]);
|
|
2334
|
+
const textureLoader = new THREE.TextureLoader(this.manager);
|
|
2916
2335
|
textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
|
|
2917
2336
|
let tgaLoader;
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
tgaLoader = new TGALoader(this.manager);
|
|
2337
|
+
if (TGALoader.TGALoader) {
|
|
2338
|
+
tgaLoader = new TGALoader.TGALoader(this.manager);
|
|
2921
2339
|
tgaLoader.setPath(this.resourcePath || path);
|
|
2922
|
-
}
|
|
2923
|
-
|
|
2924
|
-
|
|
2340
|
+
}
|
|
2925
2341
|
const animations = [];
|
|
2926
2342
|
let kinematics = {};
|
|
2927
|
-
let count = 0;
|
|
2928
|
-
|
|
2343
|
+
let count = 0;
|
|
2929
2344
|
const library = {
|
|
2930
2345
|
animations: {},
|
|
2931
2346
|
clips: {},
|
|
@@ -2942,20 +2357,20 @@ class ColladaLoader extends Loader {
|
|
|
2942
2357
|
physicsModels: {},
|
|
2943
2358
|
kinematicsScenes: {}
|
|
2944
2359
|
};
|
|
2945
|
-
parseLibrary(collada,
|
|
2946
|
-
parseLibrary(collada,
|
|
2947
|
-
parseLibrary(collada,
|
|
2948
|
-
parseLibrary(collada,
|
|
2949
|
-
parseLibrary(collada,
|
|
2950
|
-
parseLibrary(collada,
|
|
2951
|
-
parseLibrary(collada,
|
|
2952
|
-
parseLibrary(collada,
|
|
2953
|
-
parseLibrary(collada,
|
|
2954
|
-
parseLibrary(collada,
|
|
2955
|
-
parseLibrary(collada,
|
|
2956
|
-
parseLibrary(collada,
|
|
2957
|
-
parseLibrary(collada,
|
|
2958
|
-
parseLibrary(collada,
|
|
2360
|
+
parseLibrary(collada, "library_animations", "animation", parseAnimation);
|
|
2361
|
+
parseLibrary(collada, "library_animation_clips", "animation_clip", parseAnimationClip);
|
|
2362
|
+
parseLibrary(collada, "library_controllers", "controller", parseController);
|
|
2363
|
+
parseLibrary(collada, "library_images", "image", parseImage);
|
|
2364
|
+
parseLibrary(collada, "library_effects", "effect", parseEffect);
|
|
2365
|
+
parseLibrary(collada, "library_materials", "material", parseMaterial);
|
|
2366
|
+
parseLibrary(collada, "library_cameras", "camera", parseCamera);
|
|
2367
|
+
parseLibrary(collada, "library_lights", "light", parseLight);
|
|
2368
|
+
parseLibrary(collada, "library_geometries", "geometry", parseGeometry);
|
|
2369
|
+
parseLibrary(collada, "library_nodes", "node", parseNode);
|
|
2370
|
+
parseLibrary(collada, "library_visual_scenes", "visual_scene", parseVisualScene);
|
|
2371
|
+
parseLibrary(collada, "library_kinematics_models", "kinematics_model", parseKinematicsModel);
|
|
2372
|
+
parseLibrary(collada, "library_physics_models", "physics_model", parsePhysicsModel);
|
|
2373
|
+
parseLibrary(collada, "scene", "instance_kinematics_scene", parseKinematicsScene);
|
|
2959
2374
|
buildLibrary(library.animations, buildAnimation);
|
|
2960
2375
|
buildLibrary(library.clips, buildAnimationClip);
|
|
2961
2376
|
buildLibrary(library.controllers, buildController);
|
|
@@ -2968,26 +2383,21 @@ class ColladaLoader extends Loader {
|
|
|
2968
2383
|
buildLibrary(library.visualScenes, buildVisualScene);
|
|
2969
2384
|
setupAnimations();
|
|
2970
2385
|
setupKinematics();
|
|
2971
|
-
const scene = parseScene(getElementsByTagName(collada,
|
|
2386
|
+
const scene = parseScene(getElementsByTagName(collada, "scene")[0]);
|
|
2972
2387
|
scene.animations = animations;
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
scene.quaternion.setFromEuler(new Euler(-Math.PI / 2, 0, 0));
|
|
2388
|
+
if (asset.upAxis === "Z_UP") {
|
|
2389
|
+
scene.quaternion.setFromEuler(new THREE.Euler(-Math.PI / 2, 0, 0));
|
|
2976
2390
|
}
|
|
2977
|
-
|
|
2978
2391
|
scene.scale.multiplyScalar(asset.unit);
|
|
2979
2392
|
return {
|
|
2980
2393
|
get animations() {
|
|
2981
|
-
console.warn(
|
|
2394
|
+
console.warn("THREE.ColladaLoader: Please access animations over scene.animations now.");
|
|
2982
2395
|
return animations;
|
|
2983
2396
|
},
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
scene: scene
|
|
2397
|
+
kinematics,
|
|
2398
|
+
library,
|
|
2399
|
+
scene
|
|
2988
2400
|
};
|
|
2989
2401
|
}
|
|
2990
|
-
|
|
2991
2402
|
}
|
|
2992
|
-
|
|
2993
|
-
export { ColladaLoader };
|
|
2403
|
+
exports.ColladaLoader = ColladaLoader;
|