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/LDrawLoader.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const THREE = require("three");
|
|
5
4
|
const FINISH_TYPE_DEFAULT = 0;
|
|
6
5
|
const FINISH_TYPE_CHROME = 1;
|
|
7
6
|
const FINISH_TYPE_PEARLESCENT = 2;
|
|
8
7
|
const FINISH_TYPE_RUBBER = 3;
|
|
9
8
|
const FINISH_TYPE_MATTE_METALLIC = 4;
|
|
10
|
-
const FINISH_TYPE_METAL = 5;
|
|
11
|
-
// The LDraw standard establishes these various possible subfolders.
|
|
12
|
-
|
|
9
|
+
const FINISH_TYPE_METAL = 5;
|
|
13
10
|
const FILE_LOCATION_AS_IS = 0;
|
|
14
11
|
const FILE_LOCATION_TRY_PARTS = 1;
|
|
15
12
|
const FILE_LOCATION_TRY_P = 2;
|
|
@@ -17,27 +14,25 @@ const FILE_LOCATION_TRY_MODELS = 3;
|
|
|
17
14
|
const FILE_LOCATION_TRY_RELATIVE = 4;
|
|
18
15
|
const FILE_LOCATION_TRY_ABSOLUTE = 5;
|
|
19
16
|
const FILE_LOCATION_NOT_FOUND = 6;
|
|
20
|
-
const MAIN_COLOUR_CODE =
|
|
21
|
-
const MAIN_EDGE_COLOUR_CODE =
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
const _tempVec1 = new Vector3();
|
|
26
|
-
|
|
27
|
-
class LDrawConditionalLineMaterial extends ShaderMaterial {
|
|
17
|
+
const MAIN_COLOUR_CODE = "16";
|
|
18
|
+
const MAIN_EDGE_COLOUR_CODE = "24";
|
|
19
|
+
const _tempVec0 = new THREE.Vector3();
|
|
20
|
+
const _tempVec1 = new THREE.Vector3();
|
|
21
|
+
class LDrawConditionalLineMaterial extends THREE.ShaderMaterial {
|
|
28
22
|
constructor(parameters) {
|
|
29
23
|
super({
|
|
30
|
-
uniforms: UniformsUtils.merge([
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
uniforms: THREE.UniformsUtils.merge([
|
|
25
|
+
THREE.UniformsLib.fog,
|
|
26
|
+
{
|
|
27
|
+
diffuse: {
|
|
28
|
+
value: new THREE.Color()
|
|
29
|
+
},
|
|
30
|
+
opacity: {
|
|
31
|
+
value: 1
|
|
32
|
+
}
|
|
36
33
|
}
|
|
37
|
-
|
|
38
|
-
vertexShader:
|
|
39
|
-
/* glsl */
|
|
40
|
-
`
|
|
34
|
+
]),
|
|
35
|
+
vertexShader: `
|
|
41
36
|
attribute vec3 control0;
|
|
42
37
|
attribute vec3 control1;
|
|
43
38
|
attribute vec3 direction;
|
|
@@ -85,9 +80,7 @@ class LDrawConditionalLineMaterial extends ShaderMaterial {
|
|
|
85
80
|
#include <fog_vertex>
|
|
86
81
|
}
|
|
87
82
|
`,
|
|
88
|
-
fragmentShader:
|
|
89
|
-
/* glsl */
|
|
90
|
-
`
|
|
83
|
+
fragmentShader: `
|
|
91
84
|
uniform vec3 diffuse;
|
|
92
85
|
uniform float opacity;
|
|
93
86
|
varying float discardFlag;
|
|
@@ -117,15 +110,15 @@ class LDrawConditionalLineMaterial extends ShaderMaterial {
|
|
|
117
110
|
});
|
|
118
111
|
Object.defineProperties(this, {
|
|
119
112
|
opacity: {
|
|
120
|
-
get: function
|
|
113
|
+
get: function() {
|
|
121
114
|
return this.uniforms.opacity.value;
|
|
122
115
|
},
|
|
123
|
-
set: function
|
|
116
|
+
set: function(value) {
|
|
124
117
|
this.uniforms.opacity.value = value;
|
|
125
118
|
}
|
|
126
119
|
},
|
|
127
120
|
color: {
|
|
128
|
-
get: function
|
|
121
|
+
get: function() {
|
|
129
122
|
return this.uniforms.diffuse.value;
|
|
130
123
|
}
|
|
131
124
|
}
|
|
@@ -133,17 +126,13 @@ class LDrawConditionalLineMaterial extends ShaderMaterial {
|
|
|
133
126
|
this.setValues(parameters);
|
|
134
127
|
this.isLDrawConditionalLineMaterial = true;
|
|
135
128
|
}
|
|
136
|
-
|
|
137
129
|
}
|
|
138
|
-
|
|
139
|
-
class ConditionalLineSegments extends LineSegments {
|
|
130
|
+
class ConditionalLineSegments extends THREE.LineSegments {
|
|
140
131
|
constructor(geometry, material) {
|
|
141
132
|
super(geometry, material);
|
|
142
133
|
this.isConditionalLine = true;
|
|
143
134
|
}
|
|
144
|
-
|
|
145
135
|
}
|
|
146
|
-
|
|
147
136
|
function generateFaceNormals(faces) {
|
|
148
137
|
for (let i = 0, l = faces.length; i < l; i++) {
|
|
149
138
|
const face = faces[i];
|
|
@@ -151,263 +140,179 @@ function generateFaceNormals(faces) {
|
|
|
151
140
|
const v0 = vertices[0];
|
|
152
141
|
const v1 = vertices[1];
|
|
153
142
|
const v2 = vertices[2];
|
|
154
|
-
|
|
155
143
|
_tempVec0.subVectors(v1, v0);
|
|
156
|
-
|
|
157
144
|
_tempVec1.subVectors(v2, v1);
|
|
158
|
-
|
|
159
|
-
face.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize();
|
|
145
|
+
face.faceNormal = new THREE.Vector3().crossVectors(_tempVec0, _tempVec1).normalize();
|
|
160
146
|
}
|
|
161
147
|
}
|
|
162
|
-
|
|
163
|
-
const _ray = new Ray();
|
|
164
|
-
|
|
148
|
+
const _ray = new THREE.Ray();
|
|
165
149
|
function smoothNormals(faces, lineSegments, checkSubSegments = false) {
|
|
166
|
-
|
|
167
|
-
// it allows edges to be smoothed as expected (see minifig arms).
|
|
168
|
-
// --
|
|
169
|
-
// And the vector values are initialize multiplied by 1 + 1e-10 to account for floating
|
|
170
|
-
// point errors on vertices along quantization boundaries. Ie after matrix multiplication
|
|
171
|
-
// vertices that should be merged might be set to "1.7" and "1.6999..." meaning they won't
|
|
172
|
-
// get merged. This added epsilon attempts to push these error values to the same quantized
|
|
173
|
-
// value for the sake of hashing. See "AT-ST mini" dishes. See mrdoob/three#23169.
|
|
174
|
-
const hashMultiplier = (1 + 1e-10) * 1e2;
|
|
175
|
-
|
|
150
|
+
const hashMultiplier = (1 + 1e-10) * 100;
|
|
176
151
|
function hashVertex(v) {
|
|
177
152
|
const x = ~~(v.x * hashMultiplier);
|
|
178
153
|
const y = ~~(v.y * hashMultiplier);
|
|
179
154
|
const z = ~~(v.z * hashMultiplier);
|
|
180
155
|
return `${x},${y},${z}`;
|
|
181
156
|
}
|
|
182
|
-
|
|
183
157
|
function hashEdge(v0, v1) {
|
|
184
158
|
return `${hashVertex(v0)}_${hashVertex(v1)}`;
|
|
185
|
-
}
|
|
186
|
-
// onto the original line.
|
|
187
|
-
|
|
188
|
-
|
|
159
|
+
}
|
|
189
160
|
function toNormalizedRay(v0, v1, targetRay) {
|
|
190
161
|
targetRay.direction.subVectors(v1, v0).normalize();
|
|
191
162
|
const scalar = v0.dot(targetRay.direction);
|
|
192
163
|
targetRay.origin.copy(v0).addScaledVector(targetRay.direction, -scalar);
|
|
193
164
|
return targetRay;
|
|
194
165
|
}
|
|
195
|
-
|
|
196
166
|
function hashRay(ray) {
|
|
197
167
|
return hashEdge(ray.origin, ray.direction);
|
|
198
168
|
}
|
|
199
|
-
|
|
200
|
-
const
|
|
201
|
-
const hardEdgeRays = new Map();
|
|
169
|
+
const hardEdges = /* @__PURE__ */ new Set();
|
|
170
|
+
const hardEdgeRays = /* @__PURE__ */ new Map();
|
|
202
171
|
const halfEdgeList = {};
|
|
203
|
-
const normals = [];
|
|
204
|
-
|
|
172
|
+
const normals = [];
|
|
205
173
|
for (let i = 0, l = lineSegments.length; i < l; i++) {
|
|
206
174
|
const ls = lineSegments[i];
|
|
207
175
|
const vertices = ls.vertices;
|
|
208
176
|
const v0 = vertices[0];
|
|
209
177
|
const v1 = vertices[1];
|
|
210
178
|
hardEdges.add(hashEdge(v0, v1));
|
|
211
|
-
hardEdges.add(hashEdge(v1, v0));
|
|
212
|
-
// and requires more memory.
|
|
213
|
-
|
|
179
|
+
hardEdges.add(hashEdge(v1, v0));
|
|
214
180
|
if (checkSubSegments) {
|
|
215
|
-
|
|
216
|
-
const ray = toNormalizedRay(v0, v1, new Ray());
|
|
181
|
+
const ray = toNormalizedRay(v0, v1, new THREE.Ray());
|
|
217
182
|
const rh1 = hashRay(ray);
|
|
218
|
-
|
|
219
183
|
if (!hardEdgeRays.has(rh1)) {
|
|
220
184
|
toNormalizedRay(v1, v0, ray);
|
|
221
185
|
const rh2 = hashRay(ray);
|
|
222
|
-
const
|
|
186
|
+
const info2 = {
|
|
223
187
|
ray,
|
|
224
188
|
distances: []
|
|
225
189
|
};
|
|
226
|
-
hardEdgeRays.set(rh1,
|
|
227
|
-
hardEdgeRays.set(rh2,
|
|
228
|
-
}
|
|
229
|
-
// subsegment later.
|
|
230
|
-
|
|
231
|
-
|
|
190
|
+
hardEdgeRays.set(rh1, info2);
|
|
191
|
+
hardEdgeRays.set(rh2, info2);
|
|
192
|
+
}
|
|
232
193
|
const info = hardEdgeRays.get(rh1);
|
|
233
194
|
let d0 = info.ray.direction.dot(v0);
|
|
234
195
|
let d1 = info.ray.direction.dot(v1);
|
|
235
|
-
|
|
236
196
|
if (d0 > d1) {
|
|
197
|
+
;
|
|
237
198
|
[d0, d1] = [d1, d0];
|
|
238
199
|
}
|
|
239
|
-
|
|
240
200
|
info.distances.push(d0, d1);
|
|
241
201
|
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
|
|
202
|
+
}
|
|
245
203
|
for (let i = 0, l = faces.length; i < l; i++) {
|
|
246
204
|
const tri = faces[i];
|
|
247
205
|
const vertices = tri.vertices;
|
|
248
206
|
const vertCount = vertices.length;
|
|
249
|
-
|
|
250
207
|
for (let i2 = 0; i2 < vertCount; i2++) {
|
|
251
208
|
const index = i2;
|
|
252
209
|
const next = (i2 + 1) % vertCount;
|
|
253
210
|
const v0 = vertices[index];
|
|
254
211
|
const v1 = vertices[next];
|
|
255
|
-
const hash = hashEdge(v0, v1);
|
|
256
|
-
|
|
212
|
+
const hash = hashEdge(v0, v1);
|
|
257
213
|
if (hardEdges.has(hash)) {
|
|
258
214
|
continue;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
|
|
215
|
+
}
|
|
262
216
|
if (checkSubSegments) {
|
|
263
217
|
toNormalizedRay(v0, v1, _ray);
|
|
264
218
|
const rayHash = hashRay(_ray);
|
|
265
|
-
|
|
266
219
|
if (hardEdgeRays.has(rayHash)) {
|
|
267
|
-
const
|
|
268
|
-
const {
|
|
269
|
-
ray,
|
|
270
|
-
distances
|
|
271
|
-
} = info;
|
|
220
|
+
const info2 = hardEdgeRays.get(rayHash);
|
|
221
|
+
const { ray, distances } = info2;
|
|
272
222
|
let d0 = ray.direction.dot(v0);
|
|
273
223
|
let d1 = ray.direction.dot(v1);
|
|
274
|
-
|
|
275
224
|
if (d0 > d1) {
|
|
225
|
+
;
|
|
276
226
|
[d0, d1] = [d1, d0];
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
|
|
227
|
+
}
|
|
280
228
|
let found = false;
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
if (d0 >= distances[i] && d1 <= distances[i + 1]) {
|
|
229
|
+
for (let i3 = 0, l2 = distances.length; i3 < l2; i3 += 2) {
|
|
230
|
+
if (d0 >= distances[i3] && d1 <= distances[i3 + 1]) {
|
|
284
231
|
found = true;
|
|
285
232
|
break;
|
|
286
233
|
}
|
|
287
234
|
}
|
|
288
|
-
|
|
289
235
|
if (found) {
|
|
290
236
|
continue;
|
|
291
237
|
}
|
|
292
238
|
}
|
|
293
239
|
}
|
|
294
|
-
|
|
295
240
|
const info = {
|
|
296
|
-
index
|
|
297
|
-
tri
|
|
241
|
+
index,
|
|
242
|
+
tri
|
|
298
243
|
};
|
|
299
244
|
halfEdgeList[hash] = info;
|
|
300
245
|
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
|
|
246
|
+
}
|
|
304
247
|
while (true) {
|
|
305
|
-
// Stop if there are no more faces left
|
|
306
248
|
let halfEdge = null;
|
|
307
|
-
|
|
308
249
|
for (const key in halfEdgeList) {
|
|
309
250
|
halfEdge = halfEdgeList[key];
|
|
310
251
|
break;
|
|
311
252
|
}
|
|
312
|
-
|
|
313
253
|
if (halfEdge === null) {
|
|
314
254
|
break;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
|
|
255
|
+
}
|
|
318
256
|
const queue = [halfEdge];
|
|
319
|
-
|
|
320
257
|
while (queue.length > 0) {
|
|
321
|
-
// initialize all vertex normals in this triangle
|
|
322
258
|
const tri = queue.pop().tri;
|
|
323
259
|
const vertices = tri.vertices;
|
|
324
260
|
const vertNormals = tri.normals;
|
|
325
|
-
const faceNormal = tri.faceNormal;
|
|
326
|
-
|
|
261
|
+
const faceNormal = tri.faceNormal;
|
|
327
262
|
const vertCount = vertices.length;
|
|
328
|
-
|
|
329
263
|
for (let i2 = 0; i2 < vertCount; i2++) {
|
|
330
264
|
const index = i2;
|
|
331
265
|
const next = (i2 + 1) % vertCount;
|
|
332
266
|
const v0 = vertices[index];
|
|
333
|
-
const v1 = vertices[next];
|
|
334
|
-
|
|
267
|
+
const v1 = vertices[next];
|
|
335
268
|
const hash = hashEdge(v0, v1);
|
|
336
269
|
delete halfEdgeList[hash];
|
|
337
270
|
const reverseHash = hashEdge(v1, v0);
|
|
338
271
|
const otherInfo = halfEdgeList[reverseHash];
|
|
339
|
-
|
|
340
272
|
if (otherInfo) {
|
|
341
273
|
const otherTri = otherInfo.tri;
|
|
342
274
|
const otherIndex = otherInfo.index;
|
|
343
275
|
const otherNormals = otherTri.normals;
|
|
344
276
|
const otherVertCount = otherNormals.length;
|
|
345
|
-
const otherFaceNormal = otherTri.faceNormal;
|
|
346
|
-
// hard edge. There are some cases where the line segments do not line up exactly
|
|
347
|
-
// with or span multiple triangle edges (see Lunar Vehicle wheels).
|
|
348
|
-
|
|
277
|
+
const otherFaceNormal = otherTri.faceNormal;
|
|
349
278
|
if (Math.abs(otherTri.faceNormal.dot(tri.faceNormal)) < 0.25) {
|
|
350
279
|
continue;
|
|
351
|
-
}
|
|
352
|
-
// the halfEdgeList. If it has not then add it to the queue and delete
|
|
353
|
-
// it so it won't be found again.
|
|
354
|
-
|
|
355
|
-
|
|
280
|
+
}
|
|
356
281
|
if (reverseHash in halfEdgeList) {
|
|
357
282
|
queue.push(otherInfo);
|
|
358
283
|
delete halfEdgeList[reverseHash];
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
|
|
284
|
+
}
|
|
362
285
|
const otherNext = (otherIndex + 1) % otherVertCount;
|
|
363
|
-
|
|
364
286
|
if (vertNormals[index] && otherNormals[otherNext] && vertNormals[index] !== otherNormals[otherNext]) {
|
|
365
287
|
otherNormals[otherNext].norm.add(vertNormals[index].norm);
|
|
366
288
|
vertNormals[index].norm = otherNormals[otherNext].norm;
|
|
367
289
|
}
|
|
368
|
-
|
|
369
290
|
let sharedNormal1 = vertNormals[index] || otherNormals[otherNext];
|
|
370
|
-
|
|
371
291
|
if (sharedNormal1 === null) {
|
|
372
|
-
|
|
373
|
-
// both edges already have different normals defined and shared. To work around this we create
|
|
374
|
-
// a wrapper object so when those edges are merged the normals can be updated everywhere.
|
|
375
|
-
sharedNormal1 = {
|
|
376
|
-
norm: new Vector3()
|
|
377
|
-
};
|
|
292
|
+
sharedNormal1 = { norm: new THREE.Vector3() };
|
|
378
293
|
normals.push(sharedNormal1.norm);
|
|
379
294
|
}
|
|
380
|
-
|
|
381
295
|
if (vertNormals[index] === null) {
|
|
382
296
|
vertNormals[index] = sharedNormal1;
|
|
383
297
|
sharedNormal1.norm.add(faceNormal);
|
|
384
298
|
}
|
|
385
|
-
|
|
386
299
|
if (otherNormals[otherNext] === null) {
|
|
387
300
|
otherNormals[otherNext] = sharedNormal1;
|
|
388
301
|
sharedNormal1.norm.add(otherFaceNormal);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
|
|
302
|
+
}
|
|
392
303
|
if (vertNormals[next] && otherNormals[otherIndex] && vertNormals[next] !== otherNormals[otherIndex]) {
|
|
393
304
|
otherNormals[otherIndex].norm.add(vertNormals[next].norm);
|
|
394
305
|
vertNormals[next].norm = otherNormals[otherIndex].norm;
|
|
395
306
|
}
|
|
396
|
-
|
|
397
307
|
let sharedNormal2 = vertNormals[next] || otherNormals[otherIndex];
|
|
398
|
-
|
|
399
308
|
if (sharedNormal2 === null) {
|
|
400
|
-
sharedNormal2 = {
|
|
401
|
-
norm: new Vector3()
|
|
402
|
-
};
|
|
309
|
+
sharedNormal2 = { norm: new THREE.Vector3() };
|
|
403
310
|
normals.push(sharedNormal2.norm);
|
|
404
311
|
}
|
|
405
|
-
|
|
406
312
|
if (vertNormals[next] === null) {
|
|
407
313
|
vertNormals[next] = sharedNormal2;
|
|
408
314
|
sharedNormal2.norm.add(faceNormal);
|
|
409
315
|
}
|
|
410
|
-
|
|
411
316
|
if (otherNormals[otherIndex] === null) {
|
|
412
317
|
otherNormals[otherIndex] = sharedNormal2;
|
|
413
318
|
sharedNormal2.norm.add(otherFaceNormal);
|
|
@@ -415,119 +320,94 @@ function smoothNormals(faces, lineSegments, checkSubSegments = false) {
|
|
|
415
320
|
}
|
|
416
321
|
}
|
|
417
322
|
}
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
|
|
323
|
+
}
|
|
421
324
|
for (let i = 0, l = normals.length; i < l; i++) {
|
|
422
325
|
normals[i].normalize();
|
|
423
326
|
}
|
|
424
327
|
}
|
|
425
|
-
|
|
426
328
|
function isPartType(type) {
|
|
427
|
-
return type ===
|
|
329
|
+
return type === "Part" || type === "Unofficial_Part";
|
|
428
330
|
}
|
|
429
|
-
|
|
430
331
|
function isPrimitiveType(type) {
|
|
431
|
-
return /primitive/i.test(type) || type ===
|
|
332
|
+
return /primitive/i.test(type) || type === "Subpart";
|
|
432
333
|
}
|
|
433
|
-
|
|
434
334
|
class LineParser {
|
|
435
335
|
constructor(line, lineNumber) {
|
|
436
336
|
this.line = line;
|
|
437
337
|
this.lineLength = line.length;
|
|
438
338
|
this.currentCharIndex = 0;
|
|
439
|
-
this.currentChar =
|
|
339
|
+
this.currentChar = " ";
|
|
440
340
|
this.lineNumber = lineNumber;
|
|
441
341
|
}
|
|
442
|
-
|
|
443
342
|
seekNonSpace() {
|
|
444
343
|
while (this.currentCharIndex < this.lineLength) {
|
|
445
344
|
this.currentChar = this.line.charAt(this.currentCharIndex);
|
|
446
|
-
|
|
447
|
-
if (this.currentChar !== ' ' && this.currentChar !== '\t') {
|
|
345
|
+
if (this.currentChar !== " " && this.currentChar !== " ") {
|
|
448
346
|
return;
|
|
449
347
|
}
|
|
450
|
-
|
|
451
348
|
this.currentCharIndex++;
|
|
452
349
|
}
|
|
453
350
|
}
|
|
454
|
-
|
|
455
351
|
getToken() {
|
|
456
|
-
const pos0 = this.currentCharIndex++;
|
|
457
|
-
|
|
352
|
+
const pos0 = this.currentCharIndex++;
|
|
458
353
|
while (this.currentCharIndex < this.lineLength) {
|
|
459
354
|
this.currentChar = this.line.charAt(this.currentCharIndex);
|
|
460
|
-
|
|
461
|
-
if (this.currentChar === ' ' || this.currentChar === '\t') {
|
|
355
|
+
if (this.currentChar === " " || this.currentChar === " ") {
|
|
462
356
|
break;
|
|
463
357
|
}
|
|
464
|
-
|
|
465
358
|
this.currentCharIndex++;
|
|
466
359
|
}
|
|
467
|
-
|
|
468
360
|
const pos1 = this.currentCharIndex;
|
|
469
361
|
this.seekNonSpace();
|
|
470
362
|
return this.line.substring(pos0, pos1);
|
|
471
363
|
}
|
|
472
|
-
|
|
473
364
|
getVector() {
|
|
474
|
-
return new Vector3(parseFloat(this.getToken()), parseFloat(this.getToken()), parseFloat(this.getToken()));
|
|
365
|
+
return new THREE.Vector3(parseFloat(this.getToken()), parseFloat(this.getToken()), parseFloat(this.getToken()));
|
|
475
366
|
}
|
|
476
|
-
|
|
477
367
|
getRemainingString() {
|
|
478
368
|
return this.line.substring(this.currentCharIndex, this.lineLength);
|
|
479
369
|
}
|
|
480
|
-
|
|
481
370
|
isAtTheEnd() {
|
|
482
371
|
return this.currentCharIndex >= this.lineLength;
|
|
483
372
|
}
|
|
484
|
-
|
|
485
373
|
setToEnd() {
|
|
486
374
|
this.currentCharIndex = this.lineLength;
|
|
487
375
|
}
|
|
488
|
-
|
|
489
376
|
getLineNumberString() {
|
|
490
|
-
return this.lineNumber >= 0 ?
|
|
377
|
+
return this.lineNumber >= 0 ? " at line " + this.lineNumber : "";
|
|
491
378
|
}
|
|
492
|
-
|
|
493
|
-
} // Fetches and parses an intermediate representation of LDraw parts files.
|
|
494
|
-
|
|
495
|
-
|
|
379
|
+
}
|
|
496
380
|
class LDrawParsedCache {
|
|
497
381
|
constructor(loader) {
|
|
498
382
|
this.loader = loader;
|
|
499
383
|
this._cache = {};
|
|
500
384
|
}
|
|
501
|
-
|
|
502
385
|
cloneResult(original) {
|
|
503
|
-
const result = {};
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
result.faces = original.faces.map(face => {
|
|
386
|
+
const result = {};
|
|
387
|
+
result.faces = original.faces.map((face) => {
|
|
507
388
|
return {
|
|
508
389
|
colorCode: face.colorCode,
|
|
509
390
|
material: face.material,
|
|
510
|
-
vertices: face.vertices.map(v => v.clone()),
|
|
391
|
+
vertices: face.vertices.map((v) => v.clone()),
|
|
511
392
|
normals: face.normals.map(() => null),
|
|
512
393
|
faceNormal: null
|
|
513
394
|
};
|
|
514
395
|
});
|
|
515
|
-
result.conditionalSegments = original.conditionalSegments.map(face => {
|
|
396
|
+
result.conditionalSegments = original.conditionalSegments.map((face) => {
|
|
516
397
|
return {
|
|
517
398
|
colorCode: face.colorCode,
|
|
518
399
|
material: face.material,
|
|
519
|
-
vertices: face.vertices.map(v => v.clone()),
|
|
520
|
-
controlPoints: face.controlPoints.map(v => v.clone())
|
|
400
|
+
vertices: face.vertices.map((v) => v.clone()),
|
|
401
|
+
controlPoints: face.controlPoints.map((v) => v.clone())
|
|
521
402
|
};
|
|
522
403
|
});
|
|
523
|
-
result.lineSegments = original.lineSegments.map(face => {
|
|
404
|
+
result.lineSegments = original.lineSegments.map((face) => {
|
|
524
405
|
return {
|
|
525
406
|
colorCode: face.colorCode,
|
|
526
407
|
material: face.material,
|
|
527
|
-
vertices: face.vertices.map(v => v.clone())
|
|
408
|
+
vertices: face.vertices.map((v) => v.clone())
|
|
528
409
|
};
|
|
529
|
-
});
|
|
530
|
-
|
|
410
|
+
});
|
|
531
411
|
result.type = original.type;
|
|
532
412
|
result.category = original.category;
|
|
533
413
|
result.keywords = original.keywords;
|
|
@@ -538,95 +418,74 @@ class LDrawParsedCache {
|
|
|
538
418
|
result.group = null;
|
|
539
419
|
return result;
|
|
540
420
|
}
|
|
541
|
-
|
|
542
421
|
async fetchData(fileName) {
|
|
543
422
|
let triedLowerCase = false;
|
|
544
423
|
let locationState = FILE_LOCATION_AS_IS;
|
|
545
|
-
|
|
546
424
|
while (locationState !== FILE_LOCATION_NOT_FOUND) {
|
|
547
425
|
let subobjectURL = fileName;
|
|
548
|
-
|
|
549
426
|
switch (locationState) {
|
|
550
427
|
case FILE_LOCATION_AS_IS:
|
|
551
428
|
locationState = locationState + 1;
|
|
552
429
|
break;
|
|
553
|
-
|
|
554
430
|
case FILE_LOCATION_TRY_PARTS:
|
|
555
|
-
subobjectURL =
|
|
431
|
+
subobjectURL = "parts/" + subobjectURL;
|
|
556
432
|
locationState = locationState + 1;
|
|
557
433
|
break;
|
|
558
|
-
|
|
559
434
|
case FILE_LOCATION_TRY_P:
|
|
560
|
-
subobjectURL =
|
|
435
|
+
subobjectURL = "p/" + subobjectURL;
|
|
561
436
|
locationState = locationState + 1;
|
|
562
437
|
break;
|
|
563
|
-
|
|
564
438
|
case FILE_LOCATION_TRY_MODELS:
|
|
565
|
-
subobjectURL =
|
|
439
|
+
subobjectURL = "models/" + subobjectURL;
|
|
566
440
|
locationState = locationState + 1;
|
|
567
441
|
break;
|
|
568
|
-
|
|
569
442
|
case FILE_LOCATION_TRY_RELATIVE:
|
|
570
|
-
subobjectURL = fileName.substring(0, fileName.lastIndexOf(
|
|
443
|
+
subobjectURL = fileName.substring(0, fileName.lastIndexOf("/") + 1) + subobjectURL;
|
|
571
444
|
locationState = locationState + 1;
|
|
572
445
|
break;
|
|
573
|
-
|
|
574
446
|
case FILE_LOCATION_TRY_ABSOLUTE:
|
|
575
447
|
if (triedLowerCase) {
|
|
576
|
-
// Try absolute path
|
|
577
448
|
locationState = FILE_LOCATION_NOT_FOUND;
|
|
578
449
|
} else {
|
|
579
|
-
// Next attempt is lower case
|
|
580
450
|
fileName = fileName.toLowerCase();
|
|
581
451
|
subobjectURL = fileName;
|
|
582
452
|
triedLowerCase = true;
|
|
583
453
|
locationState = FILE_LOCATION_AS_IS;
|
|
584
454
|
}
|
|
585
|
-
|
|
586
455
|
break;
|
|
587
456
|
}
|
|
588
|
-
|
|
589
457
|
const loader = this.loader;
|
|
590
|
-
const fileLoader = new FileLoader(loader.manager);
|
|
458
|
+
const fileLoader = new THREE.FileLoader(loader.manager);
|
|
591
459
|
fileLoader.setPath(loader.partsLibraryPath);
|
|
592
460
|
fileLoader.setRequestHeader(loader.requestHeader);
|
|
593
461
|
fileLoader.setWithCredentials(loader.withCredentials);
|
|
594
|
-
|
|
595
462
|
try {
|
|
596
463
|
const text = await fileLoader.loadAsync(subobjectURL);
|
|
597
464
|
return text;
|
|
598
|
-
} catch {
|
|
465
|
+
} catch (e) {
|
|
599
466
|
continue;
|
|
600
467
|
}
|
|
601
468
|
}
|
|
602
|
-
|
|
603
469
|
throw new Error('LDrawLoader: Subobject "' + fileName + '" could not be loaded.');
|
|
604
470
|
}
|
|
605
|
-
|
|
606
471
|
parse(text, fileName = null) {
|
|
607
|
-
const loader = this.loader;
|
|
608
|
-
|
|
472
|
+
const loader = this.loader;
|
|
609
473
|
const faces = [];
|
|
610
474
|
const lineSegments = [];
|
|
611
475
|
const conditionalSegments = [];
|
|
612
476
|
const subobjects = [];
|
|
613
477
|
const materials = {};
|
|
614
|
-
|
|
615
|
-
const getLocalMaterial = colorCode => {
|
|
478
|
+
const getLocalMaterial = (colorCode) => {
|
|
616
479
|
return materials[colorCode] || null;
|
|
617
480
|
};
|
|
618
|
-
|
|
619
|
-
let type = 'Model';
|
|
481
|
+
let type = "Model";
|
|
620
482
|
let category = null;
|
|
621
483
|
let keywords = null;
|
|
622
|
-
let totalFaces = 0;
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
// This is faster than String.split with regex that splits on both
|
|
626
|
-
text = text.replace(/\r\n/g, '\n');
|
|
484
|
+
let totalFaces = 0;
|
|
485
|
+
if (text.indexOf("\r\n") !== -1) {
|
|
486
|
+
text = text.replace(/\r\n/g, "\n");
|
|
627
487
|
}
|
|
628
|
-
|
|
629
|
-
const lines = text.split('\n');
|
|
488
|
+
const lines = text.split("\n");
|
|
630
489
|
const numLines = lines.length;
|
|
631
490
|
let parsingEmbeddedFiles = false;
|
|
632
491
|
let currentEmbeddedFileName = null;
|
|
@@ -635,35 +494,26 @@ class LDrawParsedCache {
|
|
|
635
494
|
let bfcCCW = true;
|
|
636
495
|
let bfcInverted = false;
|
|
637
496
|
let bfcCull = true;
|
|
638
|
-
let startingConstructionStep = false;
|
|
639
|
-
|
|
497
|
+
let startingConstructionStep = false;
|
|
640
498
|
for (let lineIndex = 0; lineIndex < numLines; lineIndex++) {
|
|
641
499
|
const line = lines[lineIndex];
|
|
642
|
-
if (line.length === 0)
|
|
643
|
-
|
|
500
|
+
if (line.length === 0)
|
|
501
|
+
continue;
|
|
644
502
|
if (parsingEmbeddedFiles) {
|
|
645
|
-
if (line.startsWith(
|
|
646
|
-
|
|
647
|
-
this.setData(currentEmbeddedFileName, currentEmbeddedText); // New embedded text file
|
|
648
|
-
|
|
503
|
+
if (line.startsWith("0 FILE ")) {
|
|
504
|
+
this.setData(currentEmbeddedFileName, currentEmbeddedText);
|
|
649
505
|
currentEmbeddedFileName = line.substring(7);
|
|
650
|
-
currentEmbeddedText =
|
|
506
|
+
currentEmbeddedText = "";
|
|
651
507
|
} else {
|
|
652
|
-
currentEmbeddedText += line +
|
|
508
|
+
currentEmbeddedText += line + "\n";
|
|
653
509
|
}
|
|
654
|
-
|
|
655
510
|
continue;
|
|
656
511
|
}
|
|
657
|
-
|
|
658
512
|
const lp = new LineParser(line, lineIndex + 1);
|
|
659
513
|
lp.seekNonSpace();
|
|
660
|
-
|
|
661
514
|
if (lp.isAtTheEnd()) {
|
|
662
|
-
// Empty line
|
|
663
515
|
continue;
|
|
664
|
-
}
|
|
665
|
-
|
|
666
|
-
|
|
516
|
+
}
|
|
667
517
|
const lineType = lp.getToken();
|
|
668
518
|
let material;
|
|
669
519
|
let colorCode;
|
|
@@ -671,105 +521,80 @@ class LDrawParsedCache {
|
|
|
671
521
|
let ccw;
|
|
672
522
|
let doubleSided;
|
|
673
523
|
let v0, v1, v2, v3, c0, c1;
|
|
674
|
-
|
|
675
524
|
switch (lineType) {
|
|
676
|
-
|
|
677
|
-
case '0':
|
|
678
|
-
// Parse meta directive
|
|
525
|
+
case "0":
|
|
679
526
|
const meta = lp.getToken();
|
|
680
|
-
|
|
681
527
|
if (meta) {
|
|
682
528
|
switch (meta) {
|
|
683
|
-
case
|
|
529
|
+
case "!LDRAW_ORG":
|
|
684
530
|
type = lp.getToken();
|
|
685
531
|
break;
|
|
686
|
-
|
|
687
|
-
case '!COLOUR':
|
|
532
|
+
case "!COLOUR":
|
|
688
533
|
material = loader.parseColorMetaDirective(lp);
|
|
689
|
-
|
|
690
534
|
if (material) {
|
|
691
535
|
materials[material.userData.code] = material;
|
|
692
536
|
} else {
|
|
693
|
-
console.warn(
|
|
537
|
+
console.warn("LDrawLoader: Error parsing material" + lp.getLineNumberString());
|
|
694
538
|
}
|
|
695
|
-
|
|
696
539
|
break;
|
|
697
|
-
|
|
698
|
-
case '!CATEGORY':
|
|
540
|
+
case "!CATEGORY":
|
|
699
541
|
category = lp.getToken();
|
|
700
542
|
break;
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
const newKeywords = lp.getRemainingString().split(',');
|
|
704
|
-
|
|
543
|
+
case "!KEYWORDS":
|
|
544
|
+
const newKeywords = lp.getRemainingString().split(",");
|
|
705
545
|
if (newKeywords.length > 0) {
|
|
706
546
|
if (!keywords) {
|
|
707
547
|
keywords = [];
|
|
708
548
|
}
|
|
709
|
-
|
|
710
|
-
newKeywords.forEach(function (keyword) {
|
|
549
|
+
newKeywords.forEach(function(keyword) {
|
|
711
550
|
keywords.push(keyword.trim());
|
|
712
551
|
});
|
|
713
552
|
}
|
|
714
|
-
|
|
715
553
|
break;
|
|
716
|
-
|
|
717
|
-
case 'FILE':
|
|
554
|
+
case "FILE":
|
|
718
555
|
if (lineIndex > 0) {
|
|
719
|
-
// Start embedded text files parsing
|
|
720
556
|
parsingEmbeddedFiles = true;
|
|
721
557
|
currentEmbeddedFileName = lp.getRemainingString();
|
|
722
|
-
currentEmbeddedText =
|
|
558
|
+
currentEmbeddedText = "";
|
|
723
559
|
bfcCertified = false;
|
|
724
560
|
bfcCCW = true;
|
|
725
561
|
}
|
|
726
|
-
|
|
727
562
|
break;
|
|
728
|
-
|
|
729
|
-
case 'BFC':
|
|
730
|
-
// Changes to the backface culling state
|
|
563
|
+
case "BFC":
|
|
731
564
|
while (!lp.isAtTheEnd()) {
|
|
732
565
|
const token = lp.getToken();
|
|
733
|
-
|
|
734
566
|
switch (token) {
|
|
735
|
-
case
|
|
736
|
-
case
|
|
737
|
-
bfcCertified = token ===
|
|
567
|
+
case "CERTIFY":
|
|
568
|
+
case "NOCERTIFY":
|
|
569
|
+
bfcCertified = token === "CERTIFY";
|
|
738
570
|
bfcCCW = true;
|
|
739
571
|
break;
|
|
740
|
-
|
|
741
|
-
case
|
|
742
|
-
|
|
743
|
-
bfcCCW = token === 'CCW';
|
|
572
|
+
case "CW":
|
|
573
|
+
case "CCW":
|
|
574
|
+
bfcCCW = token === "CCW";
|
|
744
575
|
break;
|
|
745
|
-
|
|
746
|
-
case 'INVERTNEXT':
|
|
576
|
+
case "INVERTNEXT":
|
|
747
577
|
bfcInverted = true;
|
|
748
578
|
break;
|
|
749
|
-
|
|
750
|
-
case
|
|
751
|
-
|
|
752
|
-
bfcCull = token === 'CLIP';
|
|
579
|
+
case "CLIP":
|
|
580
|
+
case "NOCLIP":
|
|
581
|
+
bfcCull = token === "CLIP";
|
|
753
582
|
break;
|
|
754
|
-
|
|
755
583
|
default:
|
|
756
584
|
console.warn('THREE.LDrawLoader: BFC directive "' + token + '" is unknown.');
|
|
757
585
|
break;
|
|
758
586
|
}
|
|
759
587
|
}
|
|
760
|
-
|
|
761
588
|
break;
|
|
762
|
-
|
|
763
|
-
case 'STEP':
|
|
589
|
+
case "STEP":
|
|
764
590
|
startingConstructionStep = true;
|
|
765
591
|
break;
|
|
592
|
+
default:
|
|
593
|
+
break;
|
|
766
594
|
}
|
|
767
595
|
}
|
|
768
|
-
|
|
769
596
|
break;
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
case '1':
|
|
597
|
+
case "1":
|
|
773
598
|
colorCode = lp.getToken();
|
|
774
599
|
material = getLocalMaterial(colorCode);
|
|
775
600
|
const posX = parseFloat(lp.getToken());
|
|
@@ -784,48 +609,40 @@ class LDrawParsedCache {
|
|
|
784
609
|
const m6 = parseFloat(lp.getToken());
|
|
785
610
|
const m7 = parseFloat(lp.getToken());
|
|
786
611
|
const m8 = parseFloat(lp.getToken());
|
|
787
|
-
const matrix = new Matrix4().set(m0, m1, m2, posX, m3, m4, m5, posY, m6, m7, m8, posZ, 0, 0, 0, 1);
|
|
788
|
-
let
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
// Found the subobject path in the preloaded file path map
|
|
792
|
-
fileName = loader.fileMap[fileName];
|
|
612
|
+
const matrix = new THREE.Matrix4().set(m0, m1, m2, posX, m3, m4, m5, posY, m6, m7, m8, posZ, 0, 0, 0, 1);
|
|
613
|
+
let fileName2 = lp.getRemainingString().trim().replace(/\\/g, "/");
|
|
614
|
+
if (loader.fileMap[fileName2]) {
|
|
615
|
+
fileName2 = loader.fileMap[fileName2];
|
|
793
616
|
} else {
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
fileName = 'p/' + fileName;
|
|
617
|
+
if (fileName2.startsWith("s/")) {
|
|
618
|
+
fileName2 = "parts/" + fileName2;
|
|
619
|
+
} else if (fileName2.startsWith("48/")) {
|
|
620
|
+
fileName2 = "p/" + fileName2;
|
|
799
621
|
}
|
|
800
622
|
}
|
|
801
|
-
|
|
802
623
|
subobjects.push({
|
|
803
|
-
material
|
|
804
|
-
colorCode
|
|
805
|
-
matrix
|
|
806
|
-
fileName:
|
|
624
|
+
material,
|
|
625
|
+
colorCode,
|
|
626
|
+
matrix,
|
|
627
|
+
fileName: fileName2,
|
|
807
628
|
inverted: bfcInverted,
|
|
808
|
-
startingConstructionStep
|
|
629
|
+
startingConstructionStep
|
|
809
630
|
});
|
|
810
631
|
bfcInverted = false;
|
|
811
632
|
break;
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
case '2':
|
|
633
|
+
case "2":
|
|
815
634
|
colorCode = lp.getToken();
|
|
816
635
|
material = getLocalMaterial(colorCode);
|
|
817
636
|
v0 = lp.getVector();
|
|
818
637
|
v1 = lp.getVector();
|
|
819
638
|
segment = {
|
|
820
|
-
material
|
|
821
|
-
colorCode
|
|
639
|
+
material,
|
|
640
|
+
colorCode,
|
|
822
641
|
vertices: [v0, v1]
|
|
823
642
|
};
|
|
824
643
|
lineSegments.push(segment);
|
|
825
644
|
break;
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
case '5':
|
|
645
|
+
case "5":
|
|
829
646
|
colorCode = lp.getToken();
|
|
830
647
|
material = getLocalMaterial(colorCode);
|
|
831
648
|
v0 = lp.getVector();
|
|
@@ -833,21 +650,18 @@ class LDrawParsedCache {
|
|
|
833
650
|
c0 = lp.getVector();
|
|
834
651
|
c1 = lp.getVector();
|
|
835
652
|
segment = {
|
|
836
|
-
material
|
|
837
|
-
colorCode
|
|
653
|
+
material,
|
|
654
|
+
colorCode,
|
|
838
655
|
vertices: [v0, v1],
|
|
839
656
|
controlPoints: [c0, c1]
|
|
840
657
|
};
|
|
841
658
|
conditionalSegments.push(segment);
|
|
842
659
|
break;
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
case '3':
|
|
660
|
+
case "3":
|
|
846
661
|
colorCode = lp.getToken();
|
|
847
662
|
material = getLocalMaterial(colorCode);
|
|
848
663
|
ccw = bfcCCW;
|
|
849
664
|
doubleSided = !bfcCertified || !bfcCull;
|
|
850
|
-
|
|
851
665
|
if (ccw === true) {
|
|
852
666
|
v0 = lp.getVector();
|
|
853
667
|
v1 = lp.getVector();
|
|
@@ -857,36 +671,30 @@ class LDrawParsedCache {
|
|
|
857
671
|
v1 = lp.getVector();
|
|
858
672
|
v0 = lp.getVector();
|
|
859
673
|
}
|
|
860
|
-
|
|
861
674
|
faces.push({
|
|
862
|
-
material
|
|
863
|
-
colorCode
|
|
675
|
+
material,
|
|
676
|
+
colorCode,
|
|
864
677
|
faceNormal: null,
|
|
865
678
|
vertices: [v0, v1, v2],
|
|
866
679
|
normals: [null, null, null]
|
|
867
680
|
});
|
|
868
681
|
totalFaces++;
|
|
869
|
-
|
|
870
682
|
if (doubleSided === true) {
|
|
871
683
|
faces.push({
|
|
872
|
-
material
|
|
873
|
-
colorCode
|
|
684
|
+
material,
|
|
685
|
+
colorCode,
|
|
874
686
|
faceNormal: null,
|
|
875
687
|
vertices: [v2, v1, v0],
|
|
876
688
|
normals: [null, null, null]
|
|
877
689
|
});
|
|
878
690
|
totalFaces++;
|
|
879
691
|
}
|
|
880
|
-
|
|
881
692
|
break;
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
case '4':
|
|
693
|
+
case "4":
|
|
885
694
|
colorCode = lp.getToken();
|
|
886
695
|
material = getLocalMaterial(colorCode);
|
|
887
696
|
ccw = bfcCCW;
|
|
888
697
|
doubleSided = !bfcCertified || !bfcCull;
|
|
889
|
-
|
|
890
698
|
if (ccw === true) {
|
|
891
699
|
v0 = lp.getVector();
|
|
892
700
|
v1 = lp.getVector();
|
|
@@ -897,41 +705,33 @@ class LDrawParsedCache {
|
|
|
897
705
|
v2 = lp.getVector();
|
|
898
706
|
v1 = lp.getVector();
|
|
899
707
|
v0 = lp.getVector();
|
|
900
|
-
}
|
|
901
|
-
// account for the doubling of vertices later when smoothing normals.
|
|
902
|
-
|
|
903
|
-
|
|
708
|
+
}
|
|
904
709
|
faces.push({
|
|
905
|
-
material
|
|
906
|
-
colorCode
|
|
710
|
+
material,
|
|
711
|
+
colorCode,
|
|
907
712
|
faceNormal: null,
|
|
908
713
|
vertices: [v0, v1, v2, v3],
|
|
909
714
|
normals: [null, null, null, null]
|
|
910
715
|
});
|
|
911
716
|
totalFaces += 2;
|
|
912
|
-
|
|
913
717
|
if (doubleSided === true) {
|
|
914
718
|
faces.push({
|
|
915
|
-
material
|
|
916
|
-
colorCode
|
|
719
|
+
material,
|
|
720
|
+
colorCode,
|
|
917
721
|
faceNormal: null,
|
|
918
722
|
vertices: [v3, v2, v1, v0],
|
|
919
723
|
normals: [null, null, null, null]
|
|
920
724
|
});
|
|
921
725
|
totalFaces += 2;
|
|
922
726
|
}
|
|
923
|
-
|
|
924
727
|
break;
|
|
925
|
-
|
|
926
728
|
default:
|
|
927
|
-
throw new Error('LDrawLoader: Unknown line type "' + lineType + '"' + lp.getLineNumberString() +
|
|
729
|
+
throw new Error('LDrawLoader: Unknown line type "' + lineType + '"' + lp.getLineNumberString() + ".");
|
|
928
730
|
}
|
|
929
731
|
}
|
|
930
|
-
|
|
931
732
|
if (parsingEmbeddedFiles) {
|
|
932
733
|
this.setData(currentEmbeddedFileName, currentEmbeddedText);
|
|
933
734
|
}
|
|
934
|
-
|
|
935
735
|
return {
|
|
936
736
|
faces,
|
|
937
737
|
conditionalSegments,
|
|
@@ -946,155 +746,114 @@ class LDrawParsedCache {
|
|
|
946
746
|
fileName,
|
|
947
747
|
group: null
|
|
948
748
|
};
|
|
949
|
-
}
|
|
950
|
-
|
|
951
|
-
|
|
749
|
+
}
|
|
952
750
|
getData(fileName, clone = true) {
|
|
953
751
|
const key = fileName.toLowerCase();
|
|
954
752
|
const result = this._cache[key];
|
|
955
|
-
|
|
956
753
|
if (result === null || result instanceof Promise) {
|
|
957
754
|
return null;
|
|
958
755
|
}
|
|
959
|
-
|
|
960
756
|
if (clone) {
|
|
961
757
|
return this.cloneResult(result);
|
|
962
758
|
} else {
|
|
963
759
|
return result;
|
|
964
760
|
}
|
|
965
|
-
}
|
|
966
|
-
// the data is ready to use and can be retrieved synchronously with "getData".
|
|
967
|
-
|
|
968
|
-
|
|
761
|
+
}
|
|
969
762
|
async ensureDataLoaded(fileName) {
|
|
970
763
|
const key = fileName.toLowerCase();
|
|
971
|
-
|
|
972
764
|
if (!(key in this._cache)) {
|
|
973
|
-
|
|
974
|
-
this._cache[key] = this.fetchData(fileName).then(text => {
|
|
765
|
+
this._cache[key] = this.fetchData(fileName).then((text) => {
|
|
975
766
|
const info = this.parse(text, fileName);
|
|
976
767
|
this._cache[key] = info;
|
|
977
768
|
return info;
|
|
978
769
|
});
|
|
979
770
|
}
|
|
980
|
-
|
|
981
771
|
await this._cache[key];
|
|
982
|
-
}
|
|
983
|
-
|
|
984
|
-
|
|
772
|
+
}
|
|
985
773
|
setData(fileName, text) {
|
|
986
774
|
const key = fileName.toLowerCase();
|
|
987
775
|
this._cache[key] = this.parse(text, fileName);
|
|
988
776
|
}
|
|
989
|
-
|
|
990
|
-
} // returns the material for an associated color code. If the color code is 16 for a face or 24 for
|
|
991
|
-
// an edge then the passthroughColorCode is used.
|
|
992
|
-
|
|
993
|
-
|
|
777
|
+
}
|
|
994
778
|
function getMaterialFromCode(colorCode, parentColorCode, materialHierarchy, forEdge) {
|
|
995
779
|
const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;
|
|
996
|
-
|
|
997
780
|
if (isPassthrough) {
|
|
998
781
|
colorCode = parentColorCode;
|
|
999
782
|
}
|
|
1000
|
-
|
|
1001
783
|
return materialHierarchy[colorCode] || null;
|
|
1002
|
-
}
|
|
1003
|
-
|
|
1004
|
-
|
|
784
|
+
}
|
|
1005
785
|
class LDrawPartsGeometryCache {
|
|
1006
786
|
constructor(loader) {
|
|
1007
787
|
this.loader = loader;
|
|
1008
788
|
this.parseCache = new LDrawParsedCache(loader);
|
|
1009
789
|
this._cache = {};
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
|
-
|
|
790
|
+
}
|
|
1013
791
|
async processIntoMesh(info) {
|
|
1014
792
|
const loader = this.loader;
|
|
1015
793
|
const parseCache = this.parseCache;
|
|
1016
|
-
const faceMaterials = new Set();
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
const subobjects = info.subobjects;
|
|
1021
|
-
const promises = []; // Trigger load of all subobjects. If a subobject isn't a primitive then load it as a separate
|
|
1022
|
-
// group which lets instruction steps apply correctly.
|
|
1023
|
-
|
|
794
|
+
const faceMaterials = /* @__PURE__ */ new Set();
|
|
795
|
+
const processInfoSubobjects = async (info2, subobject = null) => {
|
|
796
|
+
const subobjects = info2.subobjects;
|
|
797
|
+
const promises = [];
|
|
1024
798
|
for (let i = 0, l = subobjects.length; i < l; i++) {
|
|
1025
|
-
const
|
|
1026
|
-
const promise = parseCache.ensureDataLoaded(
|
|
1027
|
-
const subobjectInfo = parseCache.getData(
|
|
1028
|
-
|
|
799
|
+
const subobject2 = subobjects[i];
|
|
800
|
+
const promise = parseCache.ensureDataLoaded(subobject2.fileName).then(() => {
|
|
801
|
+
const subobjectInfo = parseCache.getData(subobject2.fileName, false);
|
|
1029
802
|
if (!isPrimitiveType(subobjectInfo.type)) {
|
|
1030
|
-
return this.loadModel(
|
|
803
|
+
return this.loadModel(subobject2.fileName).catch((error) => {
|
|
1031
804
|
console.warn(error);
|
|
1032
805
|
return null;
|
|
1033
806
|
});
|
|
1034
807
|
}
|
|
1035
|
-
|
|
1036
|
-
return processInfoSubobjects(parseCache.getData(subobject.fileName), subobject);
|
|
808
|
+
return processInfoSubobjects(parseCache.getData(subobject2.fileName), subobject2);
|
|
1037
809
|
});
|
|
1038
810
|
promises.push(promise);
|
|
1039
811
|
}
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
group
|
|
1044
|
-
info.group = group;
|
|
812
|
+
const group2 = new THREE.Group();
|
|
813
|
+
group2.userData.category = info2.category;
|
|
814
|
+
group2.userData.keywords = info2.keywords;
|
|
815
|
+
info2.group = group2;
|
|
1045
816
|
const subobjectInfos = await Promise.all(promises);
|
|
1046
|
-
|
|
1047
817
|
for (let i = 0, l = subobjectInfos.length; i < l; i++) {
|
|
1048
|
-
const
|
|
818
|
+
const subobject2 = info2.subobjects[i];
|
|
1049
819
|
const subobjectInfo = subobjectInfos[i];
|
|
1050
|
-
|
|
1051
820
|
if (subobjectInfo === null) {
|
|
1052
|
-
// the subobject failed to load
|
|
1053
821
|
continue;
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1056
|
-
|
|
822
|
+
}
|
|
1057
823
|
if (subobjectInfo.isGroup) {
|
|
1058
824
|
const subobjectGroup = subobjectInfo;
|
|
1059
|
-
|
|
1060
|
-
subobjectGroup.userData.startingConstructionStep =
|
|
1061
|
-
subobjectGroup.name =
|
|
1062
|
-
loader.applyMaterialsToMesh(subobjectGroup,
|
|
1063
|
-
|
|
825
|
+
subobject2.matrix.decompose(subobjectGroup.position, subobjectGroup.quaternion, subobjectGroup.scale);
|
|
826
|
+
subobjectGroup.userData.startingConstructionStep = subobject2.startingConstructionStep;
|
|
827
|
+
subobjectGroup.name = subobject2.fileName;
|
|
828
|
+
loader.applyMaterialsToMesh(subobjectGroup, subobject2.colorCode, info2.materials);
|
|
829
|
+
group2.add(subobjectGroup);
|
|
1064
830
|
continue;
|
|
1065
|
-
}
|
|
1066
|
-
|
|
1067
|
-
|
|
831
|
+
}
|
|
1068
832
|
if (subobjectInfo.group.children.length) {
|
|
1069
|
-
|
|
1070
|
-
}
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
const parentLineSegments = info.lineSegments;
|
|
1075
|
-
const parentConditionalSegments = info.conditionalSegments;
|
|
1076
|
-
const parentFaces = info.faces;
|
|
833
|
+
group2.add(subobjectInfo.group);
|
|
834
|
+
}
|
|
835
|
+
const parentLineSegments = info2.lineSegments;
|
|
836
|
+
const parentConditionalSegments = info2.conditionalSegments;
|
|
837
|
+
const parentFaces = info2.faces;
|
|
1077
838
|
const lineSegments = subobjectInfo.lineSegments;
|
|
1078
839
|
const conditionalSegments = subobjectInfo.conditionalSegments;
|
|
1079
840
|
const faces = subobjectInfo.faces;
|
|
1080
|
-
const matrix =
|
|
1081
|
-
const inverted =
|
|
841
|
+
const matrix = subobject2.matrix;
|
|
842
|
+
const inverted = subobject2.inverted;
|
|
1082
843
|
const matrixScaleInverted = matrix.determinant() < 0;
|
|
1083
|
-
const colorCode =
|
|
844
|
+
const colorCode = subobject2.colorCode;
|
|
1084
845
|
const lineColorCode = colorCode === MAIN_COLOUR_CODE ? MAIN_EDGE_COLOUR_CODE : colorCode;
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
const ls = lineSegments[i];
|
|
846
|
+
for (let i2 = 0, l2 = lineSegments.length; i2 < l2; i2++) {
|
|
847
|
+
const ls = lineSegments[i2];
|
|
1088
848
|
const vertices = ls.vertices;
|
|
1089
849
|
vertices[0].applyMatrix4(matrix);
|
|
1090
850
|
vertices[1].applyMatrix4(matrix);
|
|
1091
851
|
ls.colorCode = ls.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : ls.colorCode;
|
|
1092
|
-
ls.material = ls.material || getMaterialFromCode(ls.colorCode, ls.colorCode,
|
|
852
|
+
ls.material = ls.material || getMaterialFromCode(ls.colorCode, ls.colorCode, info2.materials, true);
|
|
1093
853
|
parentLineSegments.push(ls);
|
|
1094
854
|
}
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
const os = conditionalSegments[i];
|
|
855
|
+
for (let i2 = 0, l2 = conditionalSegments.length; i2 < l2; i2++) {
|
|
856
|
+
const os = conditionalSegments[i2];
|
|
1098
857
|
const vertices = os.vertices;
|
|
1099
858
|
const controlPoints = os.controlPoints;
|
|
1100
859
|
vertices[0].applyMatrix4(matrix);
|
|
@@ -1102,77 +861,54 @@ class LDrawPartsGeometryCache {
|
|
|
1102
861
|
controlPoints[0].applyMatrix4(matrix);
|
|
1103
862
|
controlPoints[1].applyMatrix4(matrix);
|
|
1104
863
|
os.colorCode = os.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : os.colorCode;
|
|
1105
|
-
os.material = os.material || getMaterialFromCode(os.colorCode, os.colorCode,
|
|
864
|
+
os.material = os.material || getMaterialFromCode(os.colorCode, os.colorCode, info2.materials, true);
|
|
1106
865
|
parentConditionalSegments.push(os);
|
|
1107
866
|
}
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
const tri = faces[i];
|
|
867
|
+
for (let i2 = 0, l2 = faces.length; i2 < l2; i2++) {
|
|
868
|
+
const tri = faces[i2];
|
|
1111
869
|
const vertices = tri.vertices;
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
vertices[i].applyMatrix4(matrix);
|
|
870
|
+
for (let i3 = 0, l3 = vertices.length; i3 < l3; i3++) {
|
|
871
|
+
vertices[i3].applyMatrix4(matrix);
|
|
1115
872
|
}
|
|
1116
|
-
|
|
1117
873
|
tri.colorCode = tri.colorCode === MAIN_COLOUR_CODE ? colorCode : tri.colorCode;
|
|
1118
|
-
tri.material = tri.material || getMaterialFromCode(tri.colorCode, colorCode,
|
|
1119
|
-
faceMaterials.add(tri.colorCode);
|
|
1120
|
-
// needs to be flipped.
|
|
1121
|
-
|
|
874
|
+
tri.material = tri.material || getMaterialFromCode(tri.colorCode, colorCode, info2.materials, false);
|
|
875
|
+
faceMaterials.add(tri.colorCode);
|
|
1122
876
|
if (matrixScaleInverted !== inverted) {
|
|
1123
877
|
vertices.reverse();
|
|
1124
878
|
}
|
|
1125
|
-
|
|
1126
879
|
parentFaces.push(tri);
|
|
1127
880
|
}
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
} // Apply the parent subobjects pass through material code to this object. This is done several times due
|
|
1131
|
-
// to material scoping.
|
|
1132
|
-
|
|
1133
|
-
|
|
881
|
+
info2.totalFaces += subobjectInfo.totalFaces;
|
|
882
|
+
}
|
|
1134
883
|
if (subobject) {
|
|
1135
|
-
loader.applyMaterialsToMesh(
|
|
884
|
+
loader.applyMaterialsToMesh(group2, subobject.colorCode, info2.materials);
|
|
1136
885
|
}
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
}; // Track material use to see if we need to use the normal smooth slow path for hard edges.
|
|
1140
|
-
|
|
1141
|
-
|
|
886
|
+
return info2;
|
|
887
|
+
};
|
|
1142
888
|
for (let i = 0, l = info.faces; i < l; i++) {
|
|
1143
889
|
faceMaterials.add(info.faces[i].colorCode);
|
|
1144
890
|
}
|
|
1145
|
-
|
|
1146
891
|
await processInfoSubobjects(info);
|
|
1147
|
-
|
|
1148
892
|
if (loader.smoothNormals) {
|
|
1149
893
|
const checkSubSegments = faceMaterials.size > 1;
|
|
1150
894
|
generateFaceNormals(info.faces);
|
|
1151
895
|
smoothNormals(info.faces, info.lineSegments, checkSubSegments);
|
|
1152
|
-
}
|
|
1153
|
-
|
|
1154
|
-
|
|
896
|
+
}
|
|
1155
897
|
const group = info.group;
|
|
1156
|
-
|
|
1157
898
|
if (info.faces.length > 0) {
|
|
1158
899
|
group.add(createObject(info.faces, 3, false, info.totalFaces));
|
|
1159
900
|
}
|
|
1160
|
-
|
|
1161
901
|
if (info.lineSegments.length > 0) {
|
|
1162
902
|
group.add(createObject(info.lineSegments, 2));
|
|
1163
903
|
}
|
|
1164
|
-
|
|
1165
904
|
if (info.conditionalSegments.length > 0) {
|
|
1166
905
|
group.add(createObject(info.conditionalSegments, 2, true));
|
|
1167
906
|
}
|
|
1168
|
-
|
|
1169
907
|
return group;
|
|
1170
908
|
}
|
|
1171
|
-
|
|
1172
909
|
hasCachedModel(fileName) {
|
|
1173
910
|
return fileName !== null && fileName.toLowerCase() in this._cache;
|
|
1174
911
|
}
|
|
1175
|
-
|
|
1176
912
|
async getCachedModel(fileName) {
|
|
1177
913
|
if (fileName !== null && this.hasCachedModel(fileName)) {
|
|
1178
914
|
const key = fileName.toLowerCase();
|
|
@@ -1181,90 +917,61 @@ class LDrawPartsGeometryCache {
|
|
|
1181
917
|
} else {
|
|
1182
918
|
return null;
|
|
1183
919
|
}
|
|
1184
|
-
}
|
|
1185
|
-
|
|
1186
|
-
|
|
920
|
+
}
|
|
1187
921
|
async loadModel(fileName) {
|
|
1188
922
|
const parseCache = this.parseCache;
|
|
1189
923
|
const key = fileName.toLowerCase();
|
|
1190
|
-
|
|
1191
924
|
if (this.hasCachedModel(fileName)) {
|
|
1192
|
-
// Return cached model if available.
|
|
1193
925
|
return this.getCachedModel(fileName);
|
|
1194
926
|
} else {
|
|
1195
|
-
// Otherwise parse a new model.
|
|
1196
|
-
// Ensure the file data is loaded and pre parsed.
|
|
1197
927
|
await parseCache.ensureDataLoaded(fileName);
|
|
1198
928
|
const info = parseCache.getData(fileName);
|
|
1199
|
-
const promise = this.processIntoMesh(info);
|
|
1200
|
-
// so check the cache again to see if it's been added since the last async operation so we don't
|
|
1201
|
-
// do unnecessary work.
|
|
1202
|
-
|
|
929
|
+
const promise = this.processIntoMesh(info);
|
|
1203
930
|
if (this.hasCachedModel(fileName)) {
|
|
1204
931
|
return this.getCachedModel(fileName);
|
|
1205
|
-
}
|
|
1206
|
-
|
|
1207
|
-
|
|
932
|
+
}
|
|
1208
933
|
if (isPartType(info.type)) {
|
|
1209
934
|
this._cache[key] = promise;
|
|
1210
|
-
}
|
|
1211
|
-
|
|
1212
|
-
|
|
935
|
+
}
|
|
1213
936
|
const group = await promise;
|
|
1214
937
|
return group.clone();
|
|
1215
938
|
}
|
|
1216
|
-
}
|
|
1217
|
-
|
|
1218
|
-
|
|
939
|
+
}
|
|
1219
940
|
async parseModel(text) {
|
|
1220
941
|
const parseCache = this.parseCache;
|
|
1221
942
|
const info = parseCache.parse(text);
|
|
1222
|
-
|
|
1223
943
|
if (isPartType(info.type) && this.hasCachedModel(info.fileName)) {
|
|
1224
944
|
return this.getCachedModel(info.fileName);
|
|
1225
945
|
}
|
|
1226
|
-
|
|
1227
946
|
return this.processIntoMesh(info);
|
|
1228
947
|
}
|
|
1229
|
-
|
|
1230
948
|
}
|
|
1231
|
-
|
|
1232
949
|
function sortByMaterial(a, b) {
|
|
1233
950
|
if (a.colorCode === b.colorCode) {
|
|
1234
951
|
return 0;
|
|
1235
952
|
}
|
|
1236
|
-
|
|
1237
953
|
if (a.colorCode < b.colorCode) {
|
|
1238
954
|
return -1;
|
|
1239
955
|
}
|
|
1240
|
-
|
|
1241
956
|
return 1;
|
|
1242
957
|
}
|
|
1243
|
-
|
|
1244
958
|
function createObject(elements, elementSize, isConditionalSegments = false, totalElements = null) {
|
|
1245
|
-
// Creates a LineSegments (elementSize = 2) or a Mesh (elementSize = 3 )
|
|
1246
|
-
// With per face / segment material, implemented with mesh groups and materials array
|
|
1247
|
-
// Sort the faces or line segments by color code to make later the mesh groups
|
|
1248
959
|
elements.sort(sortByMaterial);
|
|
1249
|
-
|
|
1250
960
|
if (totalElements === null) {
|
|
1251
961
|
totalElements = elements.length;
|
|
1252
962
|
}
|
|
1253
|
-
|
|
1254
963
|
const positions = new Float32Array(elementSize * totalElements * 3);
|
|
1255
964
|
const normals = elementSize === 3 ? new Float32Array(elementSize * totalElements * 3) : null;
|
|
1256
965
|
const materials = [];
|
|
1257
966
|
const quadArray = new Array(6);
|
|
1258
|
-
const bufferGeometry = new BufferGeometry();
|
|
967
|
+
const bufferGeometry = new THREE.BufferGeometry();
|
|
1259
968
|
let prevMaterial = null;
|
|
1260
969
|
let index0 = 0;
|
|
1261
970
|
let numGroupVerts = 0;
|
|
1262
971
|
let offset = 0;
|
|
1263
|
-
|
|
1264
972
|
for (let iElem = 0, nElem = elements.length; iElem < nElem; iElem++) {
|
|
1265
973
|
const elem = elements[iElem];
|
|
1266
974
|
let vertices = elem.vertices;
|
|
1267
|
-
|
|
1268
975
|
if (vertices.length === 4) {
|
|
1269
976
|
quadArray[0] = vertices[0];
|
|
1270
977
|
quadArray[1] = vertices[1];
|
|
@@ -1274,31 +981,23 @@ function createObject(elements, elementSize, isConditionalSegments = false, tota
|
|
|
1274
981
|
quadArray[5] = vertices[3];
|
|
1275
982
|
vertices = quadArray;
|
|
1276
983
|
}
|
|
1277
|
-
|
|
1278
984
|
for (let j = 0, l = vertices.length; j < l; j++) {
|
|
1279
985
|
const v = vertices[j];
|
|
1280
986
|
const index = offset + j * 3;
|
|
1281
987
|
positions[index + 0] = v.x;
|
|
1282
988
|
positions[index + 1] = v.y;
|
|
1283
989
|
positions[index + 2] = v.z;
|
|
1284
|
-
}
|
|
1285
|
-
|
|
1286
|
-
|
|
990
|
+
}
|
|
1287
991
|
if (elementSize === 3) {
|
|
1288
992
|
if (!elem.faceNormal) {
|
|
1289
993
|
const v0 = vertices[0];
|
|
1290
994
|
const v1 = vertices[1];
|
|
1291
995
|
const v2 = vertices[2];
|
|
1292
|
-
|
|
1293
996
|
_tempVec0.subVectors(v1, v0);
|
|
1294
|
-
|
|
1295
997
|
_tempVec1.subVectors(v2, v1);
|
|
1296
|
-
|
|
1297
|
-
elem.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize();
|
|
998
|
+
elem.faceNormal = new THREE.Vector3().crossVectors(_tempVec0, _tempVec1).normalize();
|
|
1298
999
|
}
|
|
1299
|
-
|
|
1300
1000
|
let elemNormals = elem.normals;
|
|
1301
|
-
|
|
1302
1001
|
if (elemNormals.length === 4) {
|
|
1303
1002
|
quadArray[0] = elemNormals[0];
|
|
1304
1003
|
quadArray[1] = elemNormals[1];
|
|
@@ -1308,29 +1007,22 @@ function createObject(elements, elementSize, isConditionalSegments = false, tota
|
|
|
1308
1007
|
quadArray[5] = elemNormals[3];
|
|
1309
1008
|
elemNormals = quadArray;
|
|
1310
1009
|
}
|
|
1311
|
-
|
|
1312
1010
|
for (let j = 0, l = elemNormals.length; j < l; j++) {
|
|
1313
|
-
// use face normal if a vertex normal is not provided
|
|
1314
1011
|
let n = elem.faceNormal;
|
|
1315
|
-
|
|
1316
1012
|
if (elemNormals[j]) {
|
|
1317
1013
|
n = elemNormals[j].norm;
|
|
1318
1014
|
}
|
|
1319
|
-
|
|
1320
1015
|
const index = offset + j * 3;
|
|
1321
1016
|
normals[index + 0] = n.x;
|
|
1322
1017
|
normals[index + 1] = n.y;
|
|
1323
1018
|
normals[index + 2] = n.z;
|
|
1324
1019
|
}
|
|
1325
1020
|
}
|
|
1326
|
-
|
|
1327
1021
|
if (prevMaterial !== elem.colorCode) {
|
|
1328
1022
|
if (prevMaterial !== null) {
|
|
1329
1023
|
bufferGeometry.addGroup(index0, numGroupVerts, materials.length - 1);
|
|
1330
1024
|
}
|
|
1331
|
-
|
|
1332
1025
|
const material = elem.material;
|
|
1333
|
-
|
|
1334
1026
|
if (material !== null) {
|
|
1335
1027
|
if (elementSize === 3) {
|
|
1336
1028
|
materials.push(material);
|
|
@@ -1346,49 +1038,38 @@ function createObject(elements, elementSize, isConditionalSegments = false, tota
|
|
|
1346
1038
|
}
|
|
1347
1039
|
}
|
|
1348
1040
|
} else {
|
|
1349
|
-
// If a material has not been made available yet then keep the color code string in the material array
|
|
1350
|
-
// to save the spot for the material once a parent scopes materials are being applied to the object.
|
|
1351
1041
|
materials.push(elem.colorCode);
|
|
1352
1042
|
}
|
|
1353
|
-
|
|
1354
1043
|
prevMaterial = elem.colorCode;
|
|
1355
1044
|
index0 = offset / 3;
|
|
1356
1045
|
numGroupVerts = vertices.length;
|
|
1357
1046
|
} else {
|
|
1358
1047
|
numGroupVerts += vertices.length;
|
|
1359
1048
|
}
|
|
1360
|
-
|
|
1361
1049
|
offset += 3 * vertices.length;
|
|
1362
1050
|
}
|
|
1363
|
-
|
|
1364
1051
|
if (numGroupVerts > 0) {
|
|
1365
1052
|
bufferGeometry.addGroup(index0, Infinity, materials.length - 1);
|
|
1366
1053
|
}
|
|
1367
|
-
|
|
1368
|
-
bufferGeometry.setAttribute('position', new BufferAttribute(positions, 3));
|
|
1369
|
-
|
|
1054
|
+
bufferGeometry.setAttribute("position", new THREE.BufferAttribute(positions, 3));
|
|
1370
1055
|
if (normals !== null) {
|
|
1371
|
-
bufferGeometry.setAttribute(
|
|
1056
|
+
bufferGeometry.setAttribute("normal", new THREE.BufferAttribute(normals, 3));
|
|
1372
1057
|
}
|
|
1373
|
-
|
|
1374
1058
|
let object3d = null;
|
|
1375
|
-
|
|
1376
1059
|
if (elementSize === 2) {
|
|
1377
1060
|
if (isConditionalSegments) {
|
|
1378
1061
|
object3d = new ConditionalLineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials);
|
|
1379
1062
|
} else {
|
|
1380
|
-
object3d = new LineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials);
|
|
1063
|
+
object3d = new THREE.LineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials);
|
|
1381
1064
|
}
|
|
1382
1065
|
} else if (elementSize === 3) {
|
|
1383
|
-
object3d = new Mesh(bufferGeometry, materials.length === 1 ? materials[0] : materials);
|
|
1066
|
+
object3d = new THREE.Mesh(bufferGeometry, materials.length === 1 ? materials[0] : materials);
|
|
1384
1067
|
}
|
|
1385
|
-
|
|
1386
1068
|
if (isConditionalSegments) {
|
|
1387
1069
|
object3d.isConditionalLine = true;
|
|
1388
1070
|
const controlArray0 = new Float32Array(elements.length * 3 * 2);
|
|
1389
1071
|
const controlArray1 = new Float32Array(elements.length * 3 * 2);
|
|
1390
1072
|
const directionArray = new Float32Array(elements.length * 3 * 2);
|
|
1391
|
-
|
|
1392
1073
|
for (let i = 0, l = elements.length; i < l; i++) {
|
|
1393
1074
|
const os = elements[i];
|
|
1394
1075
|
const vertices = os.vertices;
|
|
@@ -1417,41 +1098,29 @@ function createObject(elements, elementSize, isConditionalSegments = false, tota
|
|
|
1417
1098
|
directionArray[index + 4] = v1.y - v0.y;
|
|
1418
1099
|
directionArray[index + 5] = v1.z - v0.z;
|
|
1419
1100
|
}
|
|
1420
|
-
|
|
1421
|
-
bufferGeometry.setAttribute(
|
|
1422
|
-
bufferGeometry.setAttribute(
|
|
1423
|
-
bufferGeometry.setAttribute('direction', new BufferAttribute(directionArray, 3, false));
|
|
1101
|
+
bufferGeometry.setAttribute("control0", new THREE.BufferAttribute(controlArray0, 3, false));
|
|
1102
|
+
bufferGeometry.setAttribute("control1", new THREE.BufferAttribute(controlArray1, 3, false));
|
|
1103
|
+
bufferGeometry.setAttribute("direction", new THREE.BufferAttribute(directionArray, 3, false));
|
|
1424
1104
|
}
|
|
1425
|
-
|
|
1426
1105
|
return object3d;
|
|
1427
|
-
}
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
class LDrawLoader extends Loader {
|
|
1106
|
+
}
|
|
1107
|
+
class LDrawLoader extends THREE.Loader {
|
|
1431
1108
|
constructor(manager) {
|
|
1432
|
-
super(manager);
|
|
1433
|
-
|
|
1109
|
+
super(manager);
|
|
1434
1110
|
this.materials = [];
|
|
1435
|
-
this.materialLibrary = {};
|
|
1436
|
-
|
|
1437
|
-
this.
|
|
1438
|
-
|
|
1439
|
-
this.
|
|
1440
|
-
|
|
1441
|
-
this.setMaterials([]); // If this flag is set to true the vertex normals will be smoothed.
|
|
1442
|
-
|
|
1443
|
-
this.smoothNormals = true; // The path to load parts from the LDraw parts library from.
|
|
1444
|
-
|
|
1445
|
-
this.partsLibraryPath = '';
|
|
1111
|
+
this.materialLibrary = {};
|
|
1112
|
+
this.partsCache = new LDrawPartsGeometryCache(this);
|
|
1113
|
+
this.fileMap = {};
|
|
1114
|
+
this.setMaterials([]);
|
|
1115
|
+
this.smoothNormals = true;
|
|
1116
|
+
this.partsLibraryPath = "";
|
|
1446
1117
|
}
|
|
1447
|
-
|
|
1448
1118
|
setPartsLibraryPath(path) {
|
|
1449
1119
|
this.partsLibraryPath = path;
|
|
1450
1120
|
return this;
|
|
1451
1121
|
}
|
|
1452
|
-
|
|
1453
1122
|
async preloadMaterials(url) {
|
|
1454
|
-
const fileLoader = new FileLoader(this.manager);
|
|
1123
|
+
const fileLoader = new THREE.FileLoader(this.manager);
|
|
1455
1124
|
fileLoader.setPath(this.path);
|
|
1456
1125
|
fileLoader.setRequestHeader(this.requestHeader);
|
|
1457
1126
|
fileLoader.setWithCredentials(this.withCredentials);
|
|
@@ -1459,89 +1128,75 @@ class LDrawLoader extends Loader {
|
|
|
1459
1128
|
const colorLineRegex = /^0 !COLOUR/;
|
|
1460
1129
|
const lines = text.split(/[\n\r]/g);
|
|
1461
1130
|
const materials = [];
|
|
1462
|
-
|
|
1463
1131
|
for (let i = 0, l = lines.length; i < l; i++) {
|
|
1464
1132
|
const line = lines[i];
|
|
1465
|
-
|
|
1466
1133
|
if (colorLineRegex.test(line)) {
|
|
1467
|
-
const directive = line.replace(colorLineRegex,
|
|
1134
|
+
const directive = line.replace(colorLineRegex, "");
|
|
1468
1135
|
const material = this.parseColorMetaDirective(new LineParser(directive));
|
|
1469
1136
|
materials.push(material);
|
|
1470
1137
|
}
|
|
1471
1138
|
}
|
|
1472
|
-
|
|
1473
1139
|
this.setMaterials(materials);
|
|
1474
1140
|
}
|
|
1475
|
-
|
|
1476
1141
|
load(url, onLoad, onProgress, onError) {
|
|
1477
|
-
const fileLoader = new FileLoader(this.manager);
|
|
1142
|
+
const fileLoader = new THREE.FileLoader(this.manager);
|
|
1478
1143
|
fileLoader.setPath(this.path);
|
|
1479
1144
|
fileLoader.setRequestHeader(this.requestHeader);
|
|
1480
1145
|
fileLoader.setWithCredentials(this.withCredentials);
|
|
1481
|
-
fileLoader.load(
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
this.
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1146
|
+
fileLoader.load(
|
|
1147
|
+
url,
|
|
1148
|
+
(text) => {
|
|
1149
|
+
this.partsCache.parseModel(text, this.materialLibrary).then((group) => {
|
|
1150
|
+
this.applyMaterialsToMesh(group, MAIN_COLOUR_CODE, this.materialLibrary, true);
|
|
1151
|
+
this.computeConstructionSteps(group);
|
|
1152
|
+
onLoad(group);
|
|
1153
|
+
}).catch(onError);
|
|
1154
|
+
},
|
|
1155
|
+
onProgress,
|
|
1156
|
+
onError
|
|
1157
|
+
);
|
|
1488
1158
|
}
|
|
1489
|
-
|
|
1490
1159
|
parse(text, onLoad) {
|
|
1491
|
-
this.partsCache.parseModel(text, this.materialLibrary).then(group => {
|
|
1160
|
+
this.partsCache.parseModel(text, this.materialLibrary).then((group) => {
|
|
1492
1161
|
this.computeConstructionSteps(group);
|
|
1493
1162
|
onLoad(group);
|
|
1494
1163
|
});
|
|
1495
1164
|
}
|
|
1496
|
-
|
|
1497
1165
|
setMaterials(materials) {
|
|
1498
1166
|
this.materialLibrary = {};
|
|
1499
1167
|
this.materials = [];
|
|
1500
|
-
|
|
1501
1168
|
for (let i = 0, l = materials.length; i < l; i++) {
|
|
1502
1169
|
this.addMaterial(materials[i]);
|
|
1503
|
-
}
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
this.addMaterial(this.parseColorMetaDirective(new LineParser('Main_Colour CODE 16 VALUE #FF8080 EDGE #333333')));
|
|
1507
|
-
this.addMaterial(this.parseColorMetaDirective(new LineParser('Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333')));
|
|
1170
|
+
}
|
|
1171
|
+
this.addMaterial(this.parseColorMetaDirective(new LineParser("Main_Colour CODE 16 VALUE #FF8080 EDGE #333333")));
|
|
1172
|
+
this.addMaterial(this.parseColorMetaDirective(new LineParser("Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333")));
|
|
1508
1173
|
return this;
|
|
1509
1174
|
}
|
|
1510
|
-
|
|
1511
1175
|
setFileMap(fileMap) {
|
|
1512
1176
|
this.fileMap = fileMap;
|
|
1513
1177
|
return this;
|
|
1514
1178
|
}
|
|
1515
|
-
|
|
1516
1179
|
addMaterial(material) {
|
|
1517
|
-
// Adds a material to the material library which is on top of the parse scopes stack. And also to the materials array
|
|
1518
1180
|
const matLib = this.materialLibrary;
|
|
1519
|
-
|
|
1520
1181
|
if (!matLib[material.userData.code]) {
|
|
1521
1182
|
this.materials.push(material);
|
|
1522
1183
|
matLib[material.userData.code] = material;
|
|
1523
1184
|
}
|
|
1524
|
-
|
|
1525
1185
|
return this;
|
|
1526
1186
|
}
|
|
1527
|
-
|
|
1528
1187
|
getMaterial(colorCode) {
|
|
1529
|
-
if (colorCode.startsWith(
|
|
1530
|
-
// Special 'direct' material value (RGB color)
|
|
1188
|
+
if (colorCode.startsWith("0x2")) {
|
|
1531
1189
|
const color = colorCode.substring(3);
|
|
1532
|
-
return this.parseColorMetaDirective(
|
|
1190
|
+
return this.parseColorMetaDirective(
|
|
1191
|
+
new LineParser("Direct_Color_" + color + " CODE -1 VALUE #" + color + " EDGE #" + color)
|
|
1192
|
+
);
|
|
1533
1193
|
}
|
|
1534
|
-
|
|
1535
1194
|
return this.materialLibrary[colorCode] || null;
|
|
1536
|
-
}
|
|
1537
|
-
// in the material array if they need to be filled in.
|
|
1538
|
-
|
|
1539
|
-
|
|
1195
|
+
}
|
|
1540
1196
|
applyMaterialsToMesh(group, parentColorCode, materialHierarchy, finalMaterialPass = false) {
|
|
1541
|
-
// find any missing materials as indicated by a color code string and replace it with a material from the current material lib
|
|
1542
1197
|
const loader = this;
|
|
1543
1198
|
const parentIsPassthrough = parentColorCode === MAIN_COLOUR_CODE;
|
|
1544
|
-
group.traverse(c => {
|
|
1199
|
+
group.traverse((c) => {
|
|
1545
1200
|
if (c.isMesh || c.isLineSegments) {
|
|
1546
1201
|
if (Array.isArray(c.material)) {
|
|
1547
1202
|
for (let i = 0, l = c.material.length; i < l; i++) {
|
|
@@ -1553,259 +1208,177 @@ class LDrawLoader extends Loader {
|
|
|
1553
1208
|
c.material = getMaterial(c, c.material);
|
|
1554
1209
|
}
|
|
1555
1210
|
}
|
|
1556
|
-
});
|
|
1557
|
-
// (24 for lines, 16 for edges) then the pass through color code is used. If that is also pass through then it's
|
|
1558
|
-
// simply returned for the subsequent material application.
|
|
1559
|
-
|
|
1211
|
+
});
|
|
1560
1212
|
function getMaterial(c, colorCode) {
|
|
1561
|
-
// if our parent is a passthrough color code and we don't have the current material color available then
|
|
1562
|
-
// return early.
|
|
1563
1213
|
if (parentIsPassthrough && !(colorCode in materialHierarchy) && !finalMaterialPass) {
|
|
1564
1214
|
return colorCode;
|
|
1565
1215
|
}
|
|
1566
|
-
|
|
1567
1216
|
const forEdge = c.isLineSegments || c.isConditionalLine;
|
|
1568
1217
|
const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;
|
|
1569
|
-
|
|
1570
1218
|
if (isPassthrough) {
|
|
1571
1219
|
colorCode = parentColorCode;
|
|
1572
1220
|
}
|
|
1573
|
-
|
|
1574
1221
|
let material = null;
|
|
1575
|
-
|
|
1576
1222
|
if (colorCode in materialHierarchy) {
|
|
1577
1223
|
material = materialHierarchy[colorCode];
|
|
1578
1224
|
} else if (finalMaterialPass) {
|
|
1579
|
-
// see if we can get the final material from from the "getMaterial" function which will attempt to
|
|
1580
|
-
// parse the "direct" colors
|
|
1581
1225
|
material = loader.getMaterial(colorCode);
|
|
1582
|
-
|
|
1583
1226
|
if (material === null) {
|
|
1584
|
-
// otherwise throw an error if this is final opportunity to set the material
|
|
1585
1227
|
throw new Error(`LDrawLoader: Material properties for code ${colorCode} not available.`);
|
|
1586
1228
|
}
|
|
1587
1229
|
} else {
|
|
1588
1230
|
return colorCode;
|
|
1589
1231
|
}
|
|
1590
|
-
|
|
1591
1232
|
if (c.isLineSegments) {
|
|
1592
1233
|
material = material.userData.edgeMaterial;
|
|
1593
|
-
|
|
1594
1234
|
if (c.isConditionalLine) {
|
|
1595
1235
|
material = material.userData.conditionalEdgeMaterial;
|
|
1596
1236
|
}
|
|
1597
1237
|
}
|
|
1598
|
-
|
|
1599
1238
|
return material;
|
|
1600
1239
|
}
|
|
1601
1240
|
}
|
|
1602
|
-
|
|
1603
1241
|
getMainMaterial() {
|
|
1604
1242
|
return this.getMaterial(MAIN_COLOUR_CODE);
|
|
1605
1243
|
}
|
|
1606
|
-
|
|
1607
1244
|
getMainEdgeMaterial() {
|
|
1608
1245
|
return this.getMaterial(MAIN_EDGE_COLOUR_CODE);
|
|
1609
1246
|
}
|
|
1610
|
-
|
|
1611
1247
|
parseColorMetaDirective(lineParser) {
|
|
1612
|
-
|
|
1613
|
-
let
|
|
1614
|
-
|
|
1615
|
-
let color = 0xff00ff;
|
|
1616
|
-
let edgeColor = 0xff00ff; // Transparency
|
|
1617
|
-
|
|
1248
|
+
let code = null;
|
|
1249
|
+
let color = 16711935;
|
|
1250
|
+
let edgeColor = 16711935;
|
|
1618
1251
|
let alpha = 1;
|
|
1619
|
-
let isTransparent = false;
|
|
1620
|
-
|
|
1252
|
+
let isTransparent = false;
|
|
1621
1253
|
let luminance = 0;
|
|
1622
1254
|
let finishType = FINISH_TYPE_DEFAULT;
|
|
1623
1255
|
let edgeMaterial = null;
|
|
1624
1256
|
const name = lineParser.getToken();
|
|
1625
|
-
|
|
1626
1257
|
if (!name) {
|
|
1627
|
-
throw new Error(
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1258
|
+
throw new Error(
|
|
1259
|
+
'LDrawLoader: Material name was expected after "!COLOUR tag' + lineParser.getLineNumberString() + "."
|
|
1260
|
+
);
|
|
1261
|
+
}
|
|
1631
1262
|
let token = null;
|
|
1632
|
-
|
|
1633
1263
|
while (true) {
|
|
1634
1264
|
token = lineParser.getToken();
|
|
1635
|
-
|
|
1636
1265
|
if (!token) {
|
|
1637
1266
|
break;
|
|
1638
1267
|
}
|
|
1639
|
-
|
|
1640
1268
|
switch (token.toUpperCase()) {
|
|
1641
|
-
case
|
|
1269
|
+
case "CODE":
|
|
1642
1270
|
code = lineParser.getToken();
|
|
1643
1271
|
break;
|
|
1644
|
-
|
|
1645
|
-
case 'VALUE':
|
|
1272
|
+
case "VALUE":
|
|
1646
1273
|
color = lineParser.getToken();
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1274
|
+
if (color.startsWith("0x")) {
|
|
1275
|
+
color = "#" + color.substring(2);
|
|
1276
|
+
} else if (!color.startsWith("#")) {
|
|
1277
|
+
throw new Error(
|
|
1278
|
+
"LDrawLoader: Invalid color while parsing material" + lineParser.getLineNumberString() + "."
|
|
1279
|
+
);
|
|
1652
1280
|
}
|
|
1653
|
-
|
|
1654
1281
|
break;
|
|
1655
|
-
|
|
1656
|
-
case 'EDGE':
|
|
1282
|
+
case "EDGE":
|
|
1657
1283
|
edgeColor = lineParser.getToken();
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
} else if (!edgeColor.startsWith('#')) {
|
|
1662
|
-
// Try to see if edge color is a color code
|
|
1284
|
+
if (edgeColor.startsWith("0x")) {
|
|
1285
|
+
edgeColor = "#" + edgeColor.substring(2);
|
|
1286
|
+
} else if (!edgeColor.startsWith("#")) {
|
|
1663
1287
|
edgeMaterial = this.getMaterial(edgeColor);
|
|
1664
|
-
|
|
1665
1288
|
if (!edgeMaterial) {
|
|
1666
|
-
throw new Error(
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1289
|
+
throw new Error(
|
|
1290
|
+
"LDrawLoader: Invalid edge color while parsing material" + lineParser.getLineNumberString() + "."
|
|
1291
|
+
);
|
|
1292
|
+
}
|
|
1670
1293
|
edgeMaterial = edgeMaterial.userData.edgeMaterial;
|
|
1671
1294
|
}
|
|
1672
|
-
|
|
1673
1295
|
break;
|
|
1674
|
-
|
|
1675
|
-
case 'ALPHA':
|
|
1296
|
+
case "ALPHA":
|
|
1676
1297
|
alpha = parseInt(lineParser.getToken());
|
|
1677
|
-
|
|
1678
1298
|
if (isNaN(alpha)) {
|
|
1679
|
-
throw new Error(
|
|
1299
|
+
throw new Error(
|
|
1300
|
+
"LDrawLoader: Invalid alpha value in material definition" + lineParser.getLineNumberString() + "."
|
|
1301
|
+
);
|
|
1680
1302
|
}
|
|
1681
|
-
|
|
1682
1303
|
alpha = Math.max(0, Math.min(1, alpha / 255));
|
|
1683
|
-
|
|
1684
1304
|
if (alpha < 1) {
|
|
1685
1305
|
isTransparent = true;
|
|
1686
1306
|
}
|
|
1687
|
-
|
|
1688
1307
|
break;
|
|
1689
|
-
|
|
1690
|
-
case 'LUMINANCE':
|
|
1308
|
+
case "LUMINANCE":
|
|
1691
1309
|
luminance = parseInt(lineParser.getToken());
|
|
1692
|
-
|
|
1693
1310
|
if (isNaN(luminance)) {
|
|
1694
|
-
throw new Error(
|
|
1311
|
+
throw new Error(
|
|
1312
|
+
"LDrawLoader: Invalid luminance value in material definition" + LineParser.getLineNumberString() + "."
|
|
1313
|
+
);
|
|
1695
1314
|
}
|
|
1696
|
-
|
|
1697
1315
|
luminance = Math.max(0, Math.min(1, luminance / 255));
|
|
1698
1316
|
break;
|
|
1699
|
-
|
|
1700
|
-
case 'CHROME':
|
|
1317
|
+
case "CHROME":
|
|
1701
1318
|
finishType = FINISH_TYPE_CHROME;
|
|
1702
1319
|
break;
|
|
1703
|
-
|
|
1704
|
-
case 'PEARLESCENT':
|
|
1320
|
+
case "PEARLESCENT":
|
|
1705
1321
|
finishType = FINISH_TYPE_PEARLESCENT;
|
|
1706
1322
|
break;
|
|
1707
|
-
|
|
1708
|
-
case 'RUBBER':
|
|
1323
|
+
case "RUBBER":
|
|
1709
1324
|
finishType = FINISH_TYPE_RUBBER;
|
|
1710
1325
|
break;
|
|
1711
|
-
|
|
1712
|
-
case 'MATTE_METALLIC':
|
|
1326
|
+
case "MATTE_METALLIC":
|
|
1713
1327
|
finishType = FINISH_TYPE_MATTE_METALLIC;
|
|
1714
1328
|
break;
|
|
1715
|
-
|
|
1716
|
-
case 'METAL':
|
|
1329
|
+
case "METAL":
|
|
1717
1330
|
finishType = FINISH_TYPE_METAL;
|
|
1718
1331
|
break;
|
|
1719
|
-
|
|
1720
|
-
case 'MATERIAL':
|
|
1721
|
-
// Not implemented
|
|
1332
|
+
case "MATERIAL":
|
|
1722
1333
|
lineParser.setToEnd();
|
|
1723
1334
|
break;
|
|
1724
|
-
|
|
1725
1335
|
default:
|
|
1726
|
-
throw new Error(
|
|
1336
|
+
throw new Error(
|
|
1337
|
+
'LDrawLoader: Unknown token "' + token + '" while parsing material' + lineParser.getLineNumberString() + "."
|
|
1338
|
+
);
|
|
1727
1339
|
}
|
|
1728
1340
|
}
|
|
1729
|
-
|
|
1730
1341
|
let material = null;
|
|
1731
|
-
|
|
1732
1342
|
switch (finishType) {
|
|
1733
1343
|
case FINISH_TYPE_DEFAULT:
|
|
1734
|
-
material = new MeshStandardMaterial({
|
|
1735
|
-
color: color,
|
|
1736
|
-
roughness: 0.3,
|
|
1737
|
-
metalness: 0
|
|
1738
|
-
});
|
|
1344
|
+
material = new THREE.MeshStandardMaterial({ color, roughness: 0.3, metalness: 0 });
|
|
1739
1345
|
break;
|
|
1740
|
-
|
|
1741
1346
|
case FINISH_TYPE_PEARLESCENT:
|
|
1742
|
-
|
|
1743
|
-
material = new MeshStandardMaterial({
|
|
1744
|
-
color: color,
|
|
1745
|
-
roughness: 0.3,
|
|
1746
|
-
metalness: 0.25
|
|
1747
|
-
});
|
|
1347
|
+
material = new THREE.MeshStandardMaterial({ color, roughness: 0.3, metalness: 0.25 });
|
|
1748
1348
|
break;
|
|
1749
|
-
|
|
1750
1349
|
case FINISH_TYPE_CHROME:
|
|
1751
|
-
|
|
1752
|
-
material = new MeshStandardMaterial({
|
|
1753
|
-
color: color,
|
|
1754
|
-
roughness: 0,
|
|
1755
|
-
metalness: 1
|
|
1756
|
-
});
|
|
1350
|
+
material = new THREE.MeshStandardMaterial({ color, roughness: 0, metalness: 1 });
|
|
1757
1351
|
break;
|
|
1758
|
-
|
|
1759
1352
|
case FINISH_TYPE_RUBBER:
|
|
1760
|
-
|
|
1761
|
-
material = new MeshStandardMaterial({
|
|
1762
|
-
color: color,
|
|
1763
|
-
roughness: 0.9,
|
|
1764
|
-
metalness: 0
|
|
1765
|
-
});
|
|
1353
|
+
material = new THREE.MeshStandardMaterial({ color, roughness: 0.9, metalness: 0 });
|
|
1766
1354
|
break;
|
|
1767
|
-
|
|
1768
1355
|
case FINISH_TYPE_MATTE_METALLIC:
|
|
1769
|
-
|
|
1770
|
-
material = new MeshStandardMaterial({
|
|
1771
|
-
color: color,
|
|
1772
|
-
roughness: 0.8,
|
|
1773
|
-
metalness: 0.4
|
|
1774
|
-
});
|
|
1356
|
+
material = new THREE.MeshStandardMaterial({ color, roughness: 0.8, metalness: 0.4 });
|
|
1775
1357
|
break;
|
|
1776
|
-
|
|
1777
1358
|
case FINISH_TYPE_METAL:
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
roughness: 0.2,
|
|
1782
|
-
metalness: 0.85
|
|
1783
|
-
});
|
|
1359
|
+
material = new THREE.MeshStandardMaterial({ color, roughness: 0.2, metalness: 0.85 });
|
|
1360
|
+
break;
|
|
1361
|
+
default:
|
|
1784
1362
|
break;
|
|
1785
1363
|
}
|
|
1786
|
-
|
|
1787
1364
|
material.transparent = isTransparent;
|
|
1788
1365
|
material.premultipliedAlpha = true;
|
|
1789
1366
|
material.opacity = alpha;
|
|
1790
1367
|
material.depthWrite = !isTransparent;
|
|
1791
1368
|
material.polygonOffset = true;
|
|
1792
1369
|
material.polygonOffsetFactor = 1;
|
|
1793
|
-
|
|
1794
1370
|
if (luminance !== 0) {
|
|
1795
1371
|
material.emissive.set(material.color).multiplyScalar(luminance);
|
|
1796
1372
|
}
|
|
1797
|
-
|
|
1798
1373
|
if (!edgeMaterial) {
|
|
1799
|
-
|
|
1800
|
-
edgeMaterial = new LineBasicMaterial({
|
|
1374
|
+
edgeMaterial = new THREE.LineBasicMaterial({
|
|
1801
1375
|
color: edgeColor,
|
|
1802
1376
|
transparent: isTransparent,
|
|
1803
1377
|
opacity: alpha,
|
|
1804
1378
|
depthWrite: !isTransparent
|
|
1805
1379
|
});
|
|
1806
1380
|
edgeMaterial.userData.code = code;
|
|
1807
|
-
edgeMaterial.name = name +
|
|
1808
|
-
|
|
1381
|
+
edgeMaterial.name = name + " - Edge";
|
|
1809
1382
|
edgeMaterial.userData.conditionalEdgeMaterial = new LDrawConditionalLineMaterial({
|
|
1810
1383
|
fog: true,
|
|
1811
1384
|
transparent: isTransparent,
|
|
@@ -1814,29 +1387,23 @@ class LDrawLoader extends Loader {
|
|
|
1814
1387
|
opacity: alpha
|
|
1815
1388
|
});
|
|
1816
1389
|
}
|
|
1817
|
-
|
|
1818
1390
|
material.userData.code = code;
|
|
1819
1391
|
material.name = name;
|
|
1820
1392
|
material.userData.edgeMaterial = edgeMaterial;
|
|
1821
1393
|
this.addMaterial(material);
|
|
1822
1394
|
return material;
|
|
1823
1395
|
}
|
|
1824
|
-
|
|
1825
1396
|
computeConstructionSteps(model) {
|
|
1826
|
-
// Sets userdata.constructionStep number in Group objects and userData.numConstructionSteps number in the root Group object.
|
|
1827
1397
|
let stepNumber = 0;
|
|
1828
|
-
model.traverse(c => {
|
|
1398
|
+
model.traverse((c) => {
|
|
1829
1399
|
if (c.isGroup) {
|
|
1830
1400
|
if (c.userData.startingConstructionStep) {
|
|
1831
1401
|
stepNumber++;
|
|
1832
1402
|
}
|
|
1833
|
-
|
|
1834
1403
|
c.userData.constructionStep = stepNumber;
|
|
1835
1404
|
}
|
|
1836
1405
|
});
|
|
1837
1406
|
model.userData.numConstructionSteps = stepNumber + 1;
|
|
1838
1407
|
}
|
|
1839
|
-
|
|
1840
1408
|
}
|
|
1841
|
-
|
|
1842
|
-
export { LDrawLoader };
|
|
1409
|
+
exports.LDrawLoader = LDrawLoader;
|