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/VRMLLoader.js
CHANGED
|
@@ -1,884 +1,732 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const THREE = require("three");
|
|
4
|
+
const chevrotain = require("chevrotain");
|
|
5
|
+
class VRMLLoader extends THREE.Loader {
|
|
5
6
|
constructor(manager) {
|
|
6
7
|
super(manager);
|
|
7
8
|
}
|
|
8
|
-
|
|
9
9
|
load(url, onLoad, onProgress, onError) {
|
|
10
10
|
const scope = this;
|
|
11
|
-
const path = scope.path ===
|
|
12
|
-
const loader = new FileLoader(scope.manager);
|
|
11
|
+
const path = scope.path === "" ? THREE.LoaderUtils.extractUrlBase(url) : scope.path;
|
|
12
|
+
const loader = new THREE.FileLoader(scope.manager);
|
|
13
13
|
loader.setPath(scope.path);
|
|
14
14
|
loader.setRequestHeader(scope.requestHeader);
|
|
15
15
|
loader.setWithCredentials(scope.withCredentials);
|
|
16
|
-
loader.load(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
loader.load(
|
|
17
|
+
url,
|
|
18
|
+
function(text) {
|
|
19
|
+
try {
|
|
20
|
+
onLoad(scope.parse(text, path));
|
|
21
|
+
} catch (e) {
|
|
22
|
+
if (onError) {
|
|
23
|
+
onError(e);
|
|
24
|
+
} else {
|
|
25
|
+
console.error(e);
|
|
26
|
+
}
|
|
27
|
+
scope.manager.itemError(url);
|
|
24
28
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
},
|
|
30
|
+
onProgress,
|
|
31
|
+
onError
|
|
32
|
+
);
|
|
29
33
|
}
|
|
30
|
-
|
|
31
34
|
parse(data, path) {
|
|
32
35
|
const nodeMap = {};
|
|
33
|
-
|
|
34
|
-
function generateVRMLTree(data) {
|
|
35
|
-
// create lexer, parser and visitor
|
|
36
|
+
function generateVRMLTree(data2) {
|
|
36
37
|
const tokenData = createTokens();
|
|
37
38
|
const lexer = new VRMLLexer(tokenData.tokens);
|
|
38
39
|
const parser = new VRMLParser(tokenData.tokenVocabulary);
|
|
39
|
-
const visitor = createVisitor(parser.getBaseCstVisitorConstructor());
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
parser.input = lexingResult.tokens; // parsing
|
|
43
|
-
|
|
40
|
+
const visitor = createVisitor(parser.getBaseCstVisitorConstructor());
|
|
41
|
+
const lexingResult = lexer.lex(data2);
|
|
42
|
+
parser.input = lexingResult.tokens;
|
|
44
43
|
const cstOutput = parser.vrml();
|
|
45
|
-
|
|
46
44
|
if (parser.errors.length > 0) {
|
|
47
45
|
console.error(parser.errors);
|
|
48
|
-
throw Error(
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
throw Error("THREE.VRMLLoader: Parsing errors detected.");
|
|
47
|
+
}
|
|
52
48
|
const ast = visitor.visit(cstOutput);
|
|
53
49
|
return ast;
|
|
54
50
|
}
|
|
55
|
-
|
|
56
51
|
function createTokens() {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
name: 'RouteIdentifier',
|
|
52
|
+
const RouteIdentifier = chevrotain.createToken({
|
|
53
|
+
name: "RouteIdentifier",
|
|
60
54
|
pattern: /[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*[\.][^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/
|
|
61
55
|
});
|
|
62
|
-
const Identifier = createToken({
|
|
63
|
-
name:
|
|
56
|
+
const Identifier = chevrotain.createToken({
|
|
57
|
+
name: "Identifier",
|
|
64
58
|
pattern: /[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/,
|
|
65
59
|
longer_alt: RouteIdentifier
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
60
|
+
});
|
|
61
|
+
const nodeTypes = [
|
|
62
|
+
"Anchor",
|
|
63
|
+
"Billboard",
|
|
64
|
+
"Collision",
|
|
65
|
+
"Group",
|
|
66
|
+
"Transform",
|
|
67
|
+
"Inline",
|
|
68
|
+
"LOD",
|
|
69
|
+
"Switch",
|
|
70
|
+
"AudioClip",
|
|
71
|
+
"DirectionalLight",
|
|
72
|
+
"PointLight",
|
|
73
|
+
"Script",
|
|
74
|
+
"Shape",
|
|
75
|
+
"Sound",
|
|
76
|
+
"SpotLight",
|
|
77
|
+
"WorldInfo",
|
|
78
|
+
"CylinderSensor",
|
|
79
|
+
"PlaneSensor",
|
|
80
|
+
"ProximitySensor",
|
|
81
|
+
"SphereSensor",
|
|
82
|
+
"TimeSensor",
|
|
83
|
+
"TouchSensor",
|
|
84
|
+
"VisibilitySensor",
|
|
85
|
+
"Box",
|
|
86
|
+
"Cone",
|
|
87
|
+
"Cylinder",
|
|
88
|
+
"ElevationGrid",
|
|
89
|
+
"Extrusion",
|
|
90
|
+
"IndexedFaceSet",
|
|
91
|
+
"IndexedLineSet",
|
|
92
|
+
"PointSet",
|
|
93
|
+
"Sphere",
|
|
94
|
+
"Color",
|
|
95
|
+
"Coordinate",
|
|
96
|
+
"Normal",
|
|
97
|
+
"TextureCoordinate",
|
|
98
|
+
"Appearance",
|
|
99
|
+
"FontStyle",
|
|
100
|
+
"ImageTexture",
|
|
101
|
+
"Material",
|
|
102
|
+
"MovieTexture",
|
|
103
|
+
"PixelTexture",
|
|
104
|
+
"TextureTransform",
|
|
105
|
+
"ColorInterpolator",
|
|
106
|
+
"CoordinateInterpolator",
|
|
107
|
+
"NormalInterpolator",
|
|
108
|
+
"OrientationInterpolator",
|
|
109
|
+
"PositionInterpolator",
|
|
110
|
+
"ScalarInterpolator",
|
|
111
|
+
"Background",
|
|
112
|
+
"Fog",
|
|
113
|
+
"NavigationInfo",
|
|
114
|
+
"Viewpoint",
|
|
115
|
+
"Text"
|
|
116
|
+
];
|
|
117
|
+
const Version = chevrotain.createToken({
|
|
118
|
+
name: "Version",
|
|
82
119
|
pattern: /#VRML.*/,
|
|
83
120
|
longer_alt: Identifier
|
|
84
121
|
});
|
|
85
|
-
const NodeName = createToken({
|
|
86
|
-
name:
|
|
87
|
-
pattern: new RegExp(nodeTypes.join(
|
|
122
|
+
const NodeName = chevrotain.createToken({
|
|
123
|
+
name: "NodeName",
|
|
124
|
+
pattern: new RegExp(nodeTypes.join("|")),
|
|
88
125
|
longer_alt: Identifier
|
|
89
126
|
});
|
|
90
|
-
const DEF = createToken({
|
|
91
|
-
name:
|
|
127
|
+
const DEF = chevrotain.createToken({
|
|
128
|
+
name: "DEF",
|
|
92
129
|
pattern: /DEF/,
|
|
93
130
|
longer_alt: Identifier
|
|
94
131
|
});
|
|
95
|
-
const USE = createToken({
|
|
96
|
-
name:
|
|
132
|
+
const USE = chevrotain.createToken({
|
|
133
|
+
name: "USE",
|
|
97
134
|
pattern: /USE/,
|
|
98
135
|
longer_alt: Identifier
|
|
99
136
|
});
|
|
100
|
-
const ROUTE = createToken({
|
|
101
|
-
name:
|
|
137
|
+
const ROUTE = chevrotain.createToken({
|
|
138
|
+
name: "ROUTE",
|
|
102
139
|
pattern: /ROUTE/,
|
|
103
140
|
longer_alt: Identifier
|
|
104
141
|
});
|
|
105
|
-
const TO = createToken({
|
|
106
|
-
name:
|
|
142
|
+
const TO = chevrotain.createToken({
|
|
143
|
+
name: "TO",
|
|
107
144
|
pattern: /TO/,
|
|
108
145
|
longer_alt: Identifier
|
|
109
|
-
}); //
|
|
110
|
-
|
|
111
|
-
const StringLiteral = createToken({
|
|
112
|
-
name: 'StringLiteral',
|
|
113
|
-
pattern: /"(?:[^\\"\n\r]|\\[bfnrtv"\\/]|\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*"/
|
|
114
|
-
});
|
|
115
|
-
const HexLiteral = createToken({
|
|
116
|
-
name: 'HexLiteral',
|
|
117
|
-
pattern: /0[xX][0-9a-fA-F]+/
|
|
118
|
-
});
|
|
119
|
-
const NumberLiteral = createToken({
|
|
120
|
-
name: 'NumberLiteral',
|
|
121
|
-
pattern: /[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/
|
|
122
|
-
});
|
|
123
|
-
const TrueLiteral = createToken({
|
|
124
|
-
name: 'TrueLiteral',
|
|
125
|
-
pattern: /TRUE/
|
|
126
|
-
});
|
|
127
|
-
const FalseLiteral = createToken({
|
|
128
|
-
name: 'FalseLiteral',
|
|
129
|
-
pattern: /FALSE/
|
|
130
|
-
});
|
|
131
|
-
const NullLiteral = createToken({
|
|
132
|
-
name: 'NullLiteral',
|
|
133
|
-
pattern: /NULL/
|
|
134
146
|
});
|
|
135
|
-
const
|
|
136
|
-
name:
|
|
137
|
-
pattern:
|
|
138
|
-
});
|
|
139
|
-
const RSquare = createToken({
|
|
140
|
-
name: 'RSquare',
|
|
141
|
-
pattern: /]/
|
|
142
|
-
});
|
|
143
|
-
const LCurly = createToken({
|
|
144
|
-
name: 'LCurly',
|
|
145
|
-
pattern: /{/
|
|
146
|
-
});
|
|
147
|
-
const RCurly = createToken({
|
|
148
|
-
name: 'RCurly',
|
|
149
|
-
pattern: /}/
|
|
147
|
+
const StringLiteral = chevrotain.createToken({
|
|
148
|
+
name: "StringLiteral",
|
|
149
|
+
pattern: /"(?:[^\\"\n\r]|\\[bfnrtv"\\/]|\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*"/
|
|
150
150
|
});
|
|
151
|
-
const
|
|
152
|
-
|
|
151
|
+
const HexLiteral = chevrotain.createToken({ name: "HexLiteral", pattern: /0[xX][0-9a-fA-F]+/ });
|
|
152
|
+
const NumberLiteral = chevrotain.createToken({ name: "NumberLiteral", pattern: /[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/ });
|
|
153
|
+
const TrueLiteral = chevrotain.createToken({ name: "TrueLiteral", pattern: /TRUE/ });
|
|
154
|
+
const FalseLiteral = chevrotain.createToken({ name: "FalseLiteral", pattern: /FALSE/ });
|
|
155
|
+
const NullLiteral = chevrotain.createToken({ name: "NullLiteral", pattern: /NULL/ });
|
|
156
|
+
const LSquare = chevrotain.createToken({ name: "LSquare", pattern: /\[/ });
|
|
157
|
+
const RSquare = chevrotain.createToken({ name: "RSquare", pattern: /]/ });
|
|
158
|
+
const LCurly = chevrotain.createToken({ name: "LCurly", pattern: /{/ });
|
|
159
|
+
const RCurly = chevrotain.createToken({ name: "RCurly", pattern: /}/ });
|
|
160
|
+
const Comment = chevrotain.createToken({
|
|
161
|
+
name: "Comment",
|
|
153
162
|
pattern: /#.*/,
|
|
154
|
-
group: Lexer.SKIPPED
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
const WhiteSpace = createToken({
|
|
159
|
-
name: 'WhiteSpace',
|
|
163
|
+
group: chevrotain.Lexer.SKIPPED
|
|
164
|
+
});
|
|
165
|
+
const WhiteSpace = chevrotain.createToken({
|
|
166
|
+
name: "WhiteSpace",
|
|
160
167
|
pattern: /[ ,\s]/,
|
|
161
|
-
group: Lexer.SKIPPED
|
|
162
|
-
|
|
168
|
+
group: chevrotain.Lexer.SKIPPED
|
|
163
169
|
});
|
|
164
|
-
const tokens = [
|
|
165
|
-
|
|
166
|
-
|
|
170
|
+
const tokens = [
|
|
171
|
+
WhiteSpace,
|
|
172
|
+
NodeName,
|
|
173
|
+
DEF,
|
|
174
|
+
USE,
|
|
175
|
+
ROUTE,
|
|
176
|
+
TO,
|
|
177
|
+
TrueLiteral,
|
|
178
|
+
FalseLiteral,
|
|
179
|
+
NullLiteral,
|
|
180
|
+
Version,
|
|
181
|
+
Identifier,
|
|
182
|
+
RouteIdentifier,
|
|
183
|
+
StringLiteral,
|
|
184
|
+
HexLiteral,
|
|
185
|
+
NumberLiteral,
|
|
186
|
+
LSquare,
|
|
187
|
+
RSquare,
|
|
188
|
+
LCurly,
|
|
189
|
+
RCurly,
|
|
190
|
+
Comment
|
|
191
|
+
];
|
|
167
192
|
const tokenVocabulary = {};
|
|
168
|
-
|
|
169
193
|
for (let i = 0, l = tokens.length; i < l; i++) {
|
|
170
194
|
const token = tokens[i];
|
|
171
195
|
tokenVocabulary[token.name] = token;
|
|
172
196
|
}
|
|
173
|
-
|
|
174
|
-
return {
|
|
175
|
-
tokens: tokens,
|
|
176
|
-
tokenVocabulary: tokenVocabulary
|
|
177
|
-
};
|
|
197
|
+
return { tokens, tokenVocabulary };
|
|
178
198
|
}
|
|
179
|
-
|
|
180
199
|
function createVisitor(BaseVRMLVisitor) {
|
|
181
|
-
// the visitor is created dynmaically based on the given base class
|
|
182
200
|
function VRMLToASTVisitor() {
|
|
183
201
|
BaseVRMLVisitor.call(this);
|
|
184
202
|
this.validateVisitor();
|
|
185
203
|
}
|
|
186
|
-
|
|
187
204
|
VRMLToASTVisitor.prototype = Object.assign(Object.create(BaseVRMLVisitor.prototype), {
|
|
188
205
|
constructor: VRMLToASTVisitor,
|
|
189
|
-
vrml: function
|
|
190
|
-
const
|
|
206
|
+
vrml: function(ctx) {
|
|
207
|
+
const data2 = {
|
|
191
208
|
version: this.visit(ctx.version),
|
|
192
209
|
nodes: [],
|
|
193
210
|
routes: []
|
|
194
211
|
};
|
|
195
|
-
|
|
196
212
|
for (let i = 0, l = ctx.node.length; i < l; i++) {
|
|
197
213
|
const node = ctx.node[i];
|
|
198
|
-
|
|
214
|
+
data2.nodes.push(this.visit(node));
|
|
199
215
|
}
|
|
200
|
-
|
|
201
216
|
if (ctx.route) {
|
|
202
217
|
for (let i = 0, l = ctx.route.length; i < l; i++) {
|
|
203
218
|
const route = ctx.route[i];
|
|
204
|
-
|
|
219
|
+
data2.routes.push(this.visit(route));
|
|
205
220
|
}
|
|
206
221
|
}
|
|
207
|
-
|
|
208
|
-
return data;
|
|
222
|
+
return data2;
|
|
209
223
|
},
|
|
210
|
-
version: function
|
|
224
|
+
version: function(ctx) {
|
|
211
225
|
return ctx.Version[0].image;
|
|
212
226
|
},
|
|
213
|
-
node: function
|
|
214
|
-
const
|
|
227
|
+
node: function(ctx) {
|
|
228
|
+
const data2 = {
|
|
215
229
|
name: ctx.NodeName[0].image,
|
|
216
230
|
fields: []
|
|
217
231
|
};
|
|
218
|
-
|
|
219
232
|
if (ctx.field) {
|
|
220
233
|
for (let i = 0, l = ctx.field.length; i < l; i++) {
|
|
221
234
|
const field = ctx.field[i];
|
|
222
|
-
|
|
235
|
+
data2.fields.push(this.visit(field));
|
|
223
236
|
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
|
|
237
|
+
}
|
|
227
238
|
if (ctx.def) {
|
|
228
|
-
|
|
239
|
+
data2.DEF = this.visit(ctx.def[0]);
|
|
229
240
|
}
|
|
230
|
-
|
|
231
|
-
return data;
|
|
241
|
+
return data2;
|
|
232
242
|
},
|
|
233
|
-
field: function
|
|
234
|
-
const
|
|
243
|
+
field: function(ctx) {
|
|
244
|
+
const data2 = {
|
|
235
245
|
name: ctx.Identifier[0].image,
|
|
236
246
|
type: null,
|
|
237
247
|
values: null
|
|
238
248
|
};
|
|
239
|
-
let result;
|
|
240
|
-
|
|
249
|
+
let result;
|
|
241
250
|
if (ctx.singleFieldValue) {
|
|
242
251
|
result = this.visit(ctx.singleFieldValue[0]);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
|
|
252
|
+
}
|
|
246
253
|
if (ctx.multiFieldValue) {
|
|
247
254
|
result = this.visit(ctx.multiFieldValue[0]);
|
|
248
255
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
return data;
|
|
256
|
+
data2.type = result.type;
|
|
257
|
+
data2.values = result.values;
|
|
258
|
+
return data2;
|
|
253
259
|
},
|
|
254
|
-
def: function
|
|
260
|
+
def: function(ctx) {
|
|
255
261
|
return (ctx.Identifier || ctx.NodeName)[0].image;
|
|
256
262
|
},
|
|
257
|
-
use: function
|
|
258
|
-
return {
|
|
259
|
-
USE: (ctx.Identifier || ctx.NodeName)[0].image
|
|
260
|
-
};
|
|
263
|
+
use: function(ctx) {
|
|
264
|
+
return { USE: (ctx.Identifier || ctx.NodeName)[0].image };
|
|
261
265
|
},
|
|
262
|
-
singleFieldValue: function
|
|
266
|
+
singleFieldValue: function(ctx) {
|
|
263
267
|
return processField(this, ctx);
|
|
264
268
|
},
|
|
265
|
-
multiFieldValue: function
|
|
269
|
+
multiFieldValue: function(ctx) {
|
|
266
270
|
return processField(this, ctx);
|
|
267
271
|
},
|
|
268
|
-
route: function
|
|
269
|
-
const
|
|
272
|
+
route: function(ctx) {
|
|
273
|
+
const data2 = {
|
|
270
274
|
FROM: ctx.RouteIdentifier[0].image,
|
|
271
275
|
TO: ctx.RouteIdentifier[1].image
|
|
272
276
|
};
|
|
273
|
-
return
|
|
277
|
+
return data2;
|
|
274
278
|
}
|
|
275
279
|
});
|
|
276
|
-
|
|
277
280
|
function processField(scope, ctx) {
|
|
278
281
|
const field = {
|
|
279
282
|
type: null,
|
|
280
283
|
values: []
|
|
281
284
|
};
|
|
282
|
-
|
|
283
285
|
if (ctx.node) {
|
|
284
|
-
field.type =
|
|
285
|
-
|
|
286
|
+
field.type = "node";
|
|
286
287
|
for (let i = 0, l = ctx.node.length; i < l; i++) {
|
|
287
288
|
const node = ctx.node[i];
|
|
288
289
|
field.values.push(scope.visit(node));
|
|
289
290
|
}
|
|
290
291
|
}
|
|
291
|
-
|
|
292
292
|
if (ctx.use) {
|
|
293
|
-
field.type =
|
|
294
|
-
|
|
293
|
+
field.type = "use";
|
|
295
294
|
for (let i = 0, l = ctx.use.length; i < l; i++) {
|
|
296
295
|
const use = ctx.use[i];
|
|
297
296
|
field.values.push(scope.visit(use));
|
|
298
297
|
}
|
|
299
298
|
}
|
|
300
|
-
|
|
301
299
|
if (ctx.StringLiteral) {
|
|
302
|
-
field.type =
|
|
303
|
-
|
|
300
|
+
field.type = "string";
|
|
304
301
|
for (let i = 0, l = ctx.StringLiteral.length; i < l; i++) {
|
|
305
302
|
const stringLiteral = ctx.StringLiteral[i];
|
|
306
|
-
field.values.push(stringLiteral.image.replace(/'|"/g,
|
|
303
|
+
field.values.push(stringLiteral.image.replace(/'|"/g, ""));
|
|
307
304
|
}
|
|
308
305
|
}
|
|
309
|
-
|
|
310
306
|
if (ctx.NumberLiteral) {
|
|
311
|
-
field.type =
|
|
312
|
-
|
|
307
|
+
field.type = "number";
|
|
313
308
|
for (let i = 0, l = ctx.NumberLiteral.length; i < l; i++) {
|
|
314
309
|
const numberLiteral = ctx.NumberLiteral[i];
|
|
315
310
|
field.values.push(parseFloat(numberLiteral.image));
|
|
316
311
|
}
|
|
317
312
|
}
|
|
318
|
-
|
|
319
313
|
if (ctx.HexLiteral) {
|
|
320
|
-
field.type =
|
|
321
|
-
|
|
314
|
+
field.type = "hex";
|
|
322
315
|
for (let i = 0, l = ctx.HexLiteral.length; i < l; i++) {
|
|
323
316
|
const hexLiteral = ctx.HexLiteral[i];
|
|
324
317
|
field.values.push(hexLiteral.image);
|
|
325
318
|
}
|
|
326
319
|
}
|
|
327
|
-
|
|
328
320
|
if (ctx.TrueLiteral) {
|
|
329
|
-
field.type =
|
|
330
|
-
|
|
321
|
+
field.type = "boolean";
|
|
331
322
|
for (let i = 0, l = ctx.TrueLiteral.length; i < l; i++) {
|
|
332
323
|
const trueLiteral = ctx.TrueLiteral[i];
|
|
333
|
-
if (trueLiteral.image ===
|
|
324
|
+
if (trueLiteral.image === "TRUE")
|
|
325
|
+
field.values.push(true);
|
|
334
326
|
}
|
|
335
327
|
}
|
|
336
|
-
|
|
337
328
|
if (ctx.FalseLiteral) {
|
|
338
|
-
field.type =
|
|
339
|
-
|
|
329
|
+
field.type = "boolean";
|
|
340
330
|
for (let i = 0, l = ctx.FalseLiteral.length; i < l; i++) {
|
|
341
331
|
const falseLiteral = ctx.FalseLiteral[i];
|
|
342
|
-
if (falseLiteral.image ===
|
|
332
|
+
if (falseLiteral.image === "FALSE")
|
|
333
|
+
field.values.push(false);
|
|
343
334
|
}
|
|
344
335
|
}
|
|
345
|
-
|
|
346
336
|
if (ctx.NullLiteral) {
|
|
347
|
-
field.type =
|
|
348
|
-
ctx.NullLiteral.forEach(function
|
|
337
|
+
field.type = "null";
|
|
338
|
+
ctx.NullLiteral.forEach(function() {
|
|
349
339
|
field.values.push(null);
|
|
350
340
|
});
|
|
351
341
|
}
|
|
352
|
-
|
|
353
342
|
return field;
|
|
354
343
|
}
|
|
355
|
-
|
|
356
344
|
return new VRMLToASTVisitor();
|
|
357
345
|
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
const nodes = tree.nodes;
|
|
362
|
-
const scene = new Scene(); // first iteration: build nodemap based on DEF statements
|
|
363
|
-
|
|
346
|
+
function parseTree(tree2) {
|
|
347
|
+
const nodes = tree2.nodes;
|
|
348
|
+
const scene2 = new THREE.Scene();
|
|
364
349
|
for (let i = 0, l = nodes.length; i < l; i++) {
|
|
365
350
|
const node = nodes[i];
|
|
366
351
|
buildNodeMap(node);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
|
|
352
|
+
}
|
|
370
353
|
for (let i = 0, l = nodes.length; i < l; i++) {
|
|
371
354
|
const node = nodes[i];
|
|
372
355
|
const object = getNode(node);
|
|
373
|
-
if (object instanceof Object3D)
|
|
374
|
-
|
|
356
|
+
if (object instanceof THREE.Object3D)
|
|
357
|
+
scene2.add(object);
|
|
358
|
+
if (node.name === "WorldInfo")
|
|
359
|
+
scene2.userData.worldInfo = object;
|
|
375
360
|
}
|
|
376
|
-
|
|
377
|
-
return scene;
|
|
361
|
+
return scene2;
|
|
378
362
|
}
|
|
379
|
-
|
|
380
363
|
function buildNodeMap(node) {
|
|
381
364
|
if (node.DEF) {
|
|
382
365
|
nodeMap[node.DEF] = node;
|
|
383
366
|
}
|
|
384
|
-
|
|
385
367
|
const fields = node.fields;
|
|
386
|
-
|
|
387
368
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
388
369
|
const field = fields[i];
|
|
389
|
-
|
|
390
|
-
if (field.type === 'node') {
|
|
370
|
+
if (field.type === "node") {
|
|
391
371
|
const fieldValues = field.values;
|
|
392
|
-
|
|
393
372
|
for (let j = 0, jl = fieldValues.length; j < jl; j++) {
|
|
394
373
|
buildNodeMap(fieldValues[j]);
|
|
395
374
|
}
|
|
396
375
|
}
|
|
397
376
|
}
|
|
398
377
|
}
|
|
399
|
-
|
|
400
378
|
function getNode(node) {
|
|
401
|
-
// handle case where a node refers to a different one
|
|
402
379
|
if (node.USE) {
|
|
403
380
|
return resolveUSE(node.USE);
|
|
404
381
|
}
|
|
405
|
-
|
|
406
|
-
|
|
382
|
+
if (node.build !== void 0)
|
|
383
|
+
return node.build;
|
|
407
384
|
node.build = buildNode(node);
|
|
408
385
|
return node.build;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
|
|
386
|
+
}
|
|
412
387
|
function buildNode(node) {
|
|
413
388
|
const nodeName = node.name;
|
|
414
389
|
let build;
|
|
415
|
-
|
|
416
390
|
switch (nodeName) {
|
|
417
|
-
case
|
|
418
|
-
case
|
|
419
|
-
case
|
|
391
|
+
case "Group":
|
|
392
|
+
case "Transform":
|
|
393
|
+
case "Collision":
|
|
420
394
|
build = buildGroupingNode(node);
|
|
421
395
|
break;
|
|
422
|
-
|
|
423
|
-
case 'Background':
|
|
396
|
+
case "Background":
|
|
424
397
|
build = buildBackgroundNode(node);
|
|
425
398
|
break;
|
|
426
|
-
|
|
427
|
-
case 'Shape':
|
|
399
|
+
case "Shape":
|
|
428
400
|
build = buildShapeNode(node);
|
|
429
401
|
break;
|
|
430
|
-
|
|
431
|
-
case 'Appearance':
|
|
402
|
+
case "Appearance":
|
|
432
403
|
build = buildAppearanceNode(node);
|
|
433
404
|
break;
|
|
434
|
-
|
|
435
|
-
case 'Material':
|
|
405
|
+
case "Material":
|
|
436
406
|
build = buildMaterialNode(node);
|
|
437
407
|
break;
|
|
438
|
-
|
|
439
|
-
case 'ImageTexture':
|
|
408
|
+
case "ImageTexture":
|
|
440
409
|
build = buildImageTextureNode(node);
|
|
441
410
|
break;
|
|
442
|
-
|
|
443
|
-
case 'PixelTexture':
|
|
411
|
+
case "PixelTexture":
|
|
444
412
|
build = buildPixelTextureNode(node);
|
|
445
413
|
break;
|
|
446
|
-
|
|
447
|
-
case 'TextureTransform':
|
|
414
|
+
case "TextureTransform":
|
|
448
415
|
build = buildTextureTransformNode(node);
|
|
449
416
|
break;
|
|
450
|
-
|
|
451
|
-
case 'IndexedFaceSet':
|
|
417
|
+
case "IndexedFaceSet":
|
|
452
418
|
build = buildIndexedFaceSetNode(node);
|
|
453
419
|
break;
|
|
454
|
-
|
|
455
|
-
case 'IndexedLineSet':
|
|
420
|
+
case "IndexedLineSet":
|
|
456
421
|
build = buildIndexedLineSetNode(node);
|
|
457
422
|
break;
|
|
458
|
-
|
|
459
|
-
case 'PointSet':
|
|
423
|
+
case "PointSet":
|
|
460
424
|
build = buildPointSetNode(node);
|
|
461
425
|
break;
|
|
462
|
-
|
|
463
|
-
case 'Box':
|
|
426
|
+
case "Box":
|
|
464
427
|
build = buildBoxNode(node);
|
|
465
428
|
break;
|
|
466
|
-
|
|
467
|
-
case 'Cone':
|
|
429
|
+
case "Cone":
|
|
468
430
|
build = buildConeNode(node);
|
|
469
431
|
break;
|
|
470
|
-
|
|
471
|
-
case 'Cylinder':
|
|
432
|
+
case "Cylinder":
|
|
472
433
|
build = buildCylinderNode(node);
|
|
473
434
|
break;
|
|
474
|
-
|
|
475
|
-
case 'Sphere':
|
|
435
|
+
case "Sphere":
|
|
476
436
|
build = buildSphereNode(node);
|
|
477
437
|
break;
|
|
478
|
-
|
|
479
|
-
case 'ElevationGrid':
|
|
438
|
+
case "ElevationGrid":
|
|
480
439
|
build = buildElevationGridNode(node);
|
|
481
440
|
break;
|
|
482
|
-
|
|
483
|
-
case 'Extrusion':
|
|
441
|
+
case "Extrusion":
|
|
484
442
|
build = buildExtrusionNode(node);
|
|
485
443
|
break;
|
|
486
|
-
|
|
487
|
-
case
|
|
488
|
-
case
|
|
489
|
-
case
|
|
490
|
-
case 'TextureCoordinate':
|
|
444
|
+
case "Color":
|
|
445
|
+
case "Coordinate":
|
|
446
|
+
case "Normal":
|
|
447
|
+
case "TextureCoordinate":
|
|
491
448
|
build = buildGeometricNode(node);
|
|
492
449
|
break;
|
|
493
|
-
|
|
494
|
-
case 'WorldInfo':
|
|
450
|
+
case "WorldInfo":
|
|
495
451
|
build = buildWorldInfoNode(node);
|
|
496
452
|
break;
|
|
497
|
-
|
|
498
|
-
case
|
|
499
|
-
case
|
|
500
|
-
case
|
|
501
|
-
case
|
|
502
|
-
case
|
|
503
|
-
case
|
|
504
|
-
case
|
|
505
|
-
case
|
|
506
|
-
case
|
|
507
|
-
case
|
|
508
|
-
case
|
|
509
|
-
case
|
|
510
|
-
case
|
|
511
|
-
case
|
|
512
|
-
case
|
|
513
|
-
case
|
|
514
|
-
case
|
|
515
|
-
case
|
|
516
|
-
case
|
|
517
|
-
case
|
|
518
|
-
case
|
|
519
|
-
case
|
|
520
|
-
case
|
|
521
|
-
case
|
|
522
|
-
case
|
|
523
|
-
case
|
|
524
|
-
case
|
|
525
|
-
case
|
|
526
|
-
case
|
|
527
|
-
case 'Viewpoint':
|
|
528
|
-
// node not supported yet
|
|
453
|
+
case "Anchor":
|
|
454
|
+
case "Billboard":
|
|
455
|
+
case "Inline":
|
|
456
|
+
case "LOD":
|
|
457
|
+
case "Switch":
|
|
458
|
+
case "AudioClip":
|
|
459
|
+
case "DirectionalLight":
|
|
460
|
+
case "PointLight":
|
|
461
|
+
case "Script":
|
|
462
|
+
case "Sound":
|
|
463
|
+
case "SpotLight":
|
|
464
|
+
case "CylinderSensor":
|
|
465
|
+
case "PlaneSensor":
|
|
466
|
+
case "ProximitySensor":
|
|
467
|
+
case "SphereSensor":
|
|
468
|
+
case "TimeSensor":
|
|
469
|
+
case "TouchSensor":
|
|
470
|
+
case "VisibilitySensor":
|
|
471
|
+
case "Text":
|
|
472
|
+
case "FontStyle":
|
|
473
|
+
case "MovieTexture":
|
|
474
|
+
case "ColorInterpolator":
|
|
475
|
+
case "CoordinateInterpolator":
|
|
476
|
+
case "NormalInterpolator":
|
|
477
|
+
case "OrientationInterpolator":
|
|
478
|
+
case "PositionInterpolator":
|
|
479
|
+
case "ScalarInterpolator":
|
|
480
|
+
case "Fog":
|
|
481
|
+
case "NavigationInfo":
|
|
482
|
+
case "Viewpoint":
|
|
529
483
|
break;
|
|
530
|
-
|
|
531
484
|
default:
|
|
532
|
-
console.warn(
|
|
485
|
+
console.warn("THREE.VRMLLoader: Unknown node:", nodeName);
|
|
533
486
|
break;
|
|
534
487
|
}
|
|
535
|
-
|
|
536
|
-
if (build !== undefined && node.DEF !== undefined && build.hasOwnProperty('name') === true) {
|
|
488
|
+
if (build !== void 0 && node.DEF !== void 0 && build.hasOwnProperty("name") === true) {
|
|
537
489
|
build.name = node.DEF;
|
|
538
490
|
}
|
|
539
|
-
|
|
540
491
|
return build;
|
|
541
492
|
}
|
|
542
|
-
|
|
543
493
|
function buildGroupingNode(node) {
|
|
544
|
-
const object = new Group();
|
|
545
|
-
|
|
494
|
+
const object = new THREE.Group();
|
|
546
495
|
const fields = node.fields;
|
|
547
|
-
|
|
548
496
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
549
497
|
const field = fields[i];
|
|
550
498
|
const fieldName = field.name;
|
|
551
499
|
const fieldValues = field.values;
|
|
552
|
-
|
|
553
500
|
switch (fieldName) {
|
|
554
|
-
case
|
|
555
|
-
// field not supported
|
|
501
|
+
case "bboxCenter":
|
|
556
502
|
break;
|
|
557
|
-
|
|
558
|
-
case 'bboxSize':
|
|
559
|
-
// field not supported
|
|
503
|
+
case "bboxSize":
|
|
560
504
|
break;
|
|
561
|
-
|
|
562
|
-
case 'center':
|
|
563
|
-
// field not supported
|
|
505
|
+
case "center":
|
|
564
506
|
break;
|
|
565
|
-
|
|
566
|
-
case 'children':
|
|
507
|
+
case "children":
|
|
567
508
|
parseFieldChildren(fieldValues, object);
|
|
568
509
|
break;
|
|
569
|
-
|
|
570
|
-
case 'collide':
|
|
571
|
-
// field not supported
|
|
510
|
+
case "collide":
|
|
572
511
|
break;
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
const axis = new Vector3(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
512
|
+
case "rotation":
|
|
513
|
+
const axis = new THREE.Vector3(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
576
514
|
const angle = fieldValues[3];
|
|
577
515
|
object.quaternion.setFromAxisAngle(axis, angle);
|
|
578
516
|
break;
|
|
579
|
-
|
|
580
|
-
case 'scale':
|
|
517
|
+
case "scale":
|
|
581
518
|
object.scale.set(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
582
519
|
break;
|
|
583
|
-
|
|
584
|
-
case 'scaleOrientation':
|
|
585
|
-
// field not supported
|
|
520
|
+
case "scaleOrientation":
|
|
586
521
|
break;
|
|
587
|
-
|
|
588
|
-
case 'translation':
|
|
522
|
+
case "translation":
|
|
589
523
|
object.position.set(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
590
524
|
break;
|
|
591
|
-
|
|
592
|
-
case 'proxy':
|
|
593
|
-
// field not supported
|
|
525
|
+
case "proxy":
|
|
594
526
|
break;
|
|
595
|
-
|
|
596
527
|
default:
|
|
597
|
-
console.warn(
|
|
528
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
598
529
|
break;
|
|
599
530
|
}
|
|
600
531
|
}
|
|
601
|
-
|
|
602
532
|
return object;
|
|
603
533
|
}
|
|
604
|
-
|
|
605
534
|
function buildBackgroundNode(node) {
|
|
606
|
-
const group = new Group();
|
|
535
|
+
const group = new THREE.Group();
|
|
607
536
|
let groundAngle, groundColor;
|
|
608
537
|
let skyAngle, skyColor;
|
|
609
538
|
const fields = node.fields;
|
|
610
|
-
|
|
611
539
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
612
540
|
const field = fields[i];
|
|
613
541
|
const fieldName = field.name;
|
|
614
542
|
const fieldValues = field.values;
|
|
615
|
-
|
|
616
543
|
switch (fieldName) {
|
|
617
|
-
case
|
|
544
|
+
case "groundAngle":
|
|
618
545
|
groundAngle = fieldValues;
|
|
619
546
|
break;
|
|
620
|
-
|
|
621
|
-
case 'groundColor':
|
|
547
|
+
case "groundColor":
|
|
622
548
|
groundColor = fieldValues;
|
|
623
549
|
break;
|
|
624
|
-
|
|
625
|
-
case 'backUrl':
|
|
626
|
-
// field not supported
|
|
550
|
+
case "backUrl":
|
|
627
551
|
break;
|
|
628
|
-
|
|
629
|
-
case 'bottomUrl':
|
|
630
|
-
// field not supported
|
|
552
|
+
case "bottomUrl":
|
|
631
553
|
break;
|
|
632
|
-
|
|
633
|
-
case 'frontUrl':
|
|
634
|
-
// field not supported
|
|
554
|
+
case "frontUrl":
|
|
635
555
|
break;
|
|
636
|
-
|
|
637
|
-
case 'leftUrl':
|
|
638
|
-
// field not supported
|
|
556
|
+
case "leftUrl":
|
|
639
557
|
break;
|
|
640
|
-
|
|
641
|
-
case 'rightUrl':
|
|
642
|
-
// field not supported
|
|
558
|
+
case "rightUrl":
|
|
643
559
|
break;
|
|
644
|
-
|
|
645
|
-
case 'topUrl':
|
|
646
|
-
// field not supported
|
|
560
|
+
case "topUrl":
|
|
647
561
|
break;
|
|
648
|
-
|
|
649
|
-
case 'skyAngle':
|
|
562
|
+
case "skyAngle":
|
|
650
563
|
skyAngle = fieldValues;
|
|
651
564
|
break;
|
|
652
|
-
|
|
653
|
-
case 'skyColor':
|
|
565
|
+
case "skyColor":
|
|
654
566
|
skyColor = fieldValues;
|
|
655
567
|
break;
|
|
656
|
-
|
|
657
568
|
default:
|
|
658
|
-
console.warn(
|
|
569
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
659
570
|
break;
|
|
660
571
|
}
|
|
661
572
|
}
|
|
662
|
-
|
|
663
|
-
const radius = 10000; // sky
|
|
664
|
-
|
|
573
|
+
const radius = 1e4;
|
|
665
574
|
if (skyColor) {
|
|
666
|
-
const skyGeometry = new SphereGeometry(radius, 32, 16);
|
|
667
|
-
const skyMaterial = new MeshBasicMaterial({
|
|
668
|
-
fog: false,
|
|
669
|
-
side: BackSide,
|
|
670
|
-
depthWrite: false,
|
|
671
|
-
depthTest: false
|
|
672
|
-
});
|
|
673
|
-
|
|
575
|
+
const skyGeometry = new THREE.SphereGeometry(radius, 32, 16);
|
|
576
|
+
const skyMaterial = new THREE.MeshBasicMaterial({ fog: false, side: THREE.BackSide, depthWrite: false, depthTest: false });
|
|
674
577
|
if (skyColor.length > 3) {
|
|
675
578
|
paintFaces(skyGeometry, radius, skyAngle, toColorArray(skyColor), true);
|
|
676
579
|
skyMaterial.vertexColors = true;
|
|
677
580
|
} else {
|
|
678
581
|
skyMaterial.color.setRGB(skyColor[0], skyColor[1], skyColor[2]);
|
|
679
582
|
}
|
|
680
|
-
|
|
681
|
-
const sky = new Mesh(skyGeometry, skyMaterial);
|
|
583
|
+
const sky = new THREE.Mesh(skyGeometry, skyMaterial);
|
|
682
584
|
group.add(sky);
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
|
|
585
|
+
}
|
|
686
586
|
if (groundColor) {
|
|
687
587
|
if (groundColor.length > 0) {
|
|
688
|
-
const groundGeometry = new SphereGeometry(radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI);
|
|
689
|
-
const groundMaterial = new MeshBasicMaterial({
|
|
588
|
+
const groundGeometry = new THREE.SphereGeometry(radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI);
|
|
589
|
+
const groundMaterial = new THREE.MeshBasicMaterial({
|
|
690
590
|
fog: false,
|
|
691
|
-
side: BackSide,
|
|
591
|
+
side: THREE.BackSide,
|
|
692
592
|
vertexColors: true,
|
|
693
593
|
depthWrite: false,
|
|
694
594
|
depthTest: false
|
|
695
595
|
});
|
|
696
596
|
paintFaces(groundGeometry, radius, groundAngle, toColorArray(groundColor), false);
|
|
697
|
-
const ground = new Mesh(groundGeometry, groundMaterial);
|
|
597
|
+
const ground = new THREE.Mesh(groundGeometry, groundMaterial);
|
|
698
598
|
group.add(ground);
|
|
699
599
|
}
|
|
700
|
-
}
|
|
701
|
-
|
|
702
|
-
|
|
600
|
+
}
|
|
703
601
|
group.renderOrder = -Infinity;
|
|
704
602
|
return group;
|
|
705
603
|
}
|
|
706
|
-
|
|
707
604
|
function buildShapeNode(node) {
|
|
708
|
-
const fields = node.fields;
|
|
709
|
-
|
|
710
|
-
let material = new MeshBasicMaterial({
|
|
711
|
-
color: 0x000000
|
|
712
|
-
});
|
|
605
|
+
const fields = node.fields;
|
|
606
|
+
let material = new THREE.MeshBasicMaterial({ color: 0 });
|
|
713
607
|
let geometry;
|
|
714
|
-
|
|
715
608
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
716
609
|
const field = fields[i];
|
|
717
610
|
const fieldName = field.name;
|
|
718
611
|
const fieldValues = field.values;
|
|
719
|
-
|
|
720
612
|
switch (fieldName) {
|
|
721
|
-
case
|
|
613
|
+
case "appearance":
|
|
722
614
|
if (fieldValues[0] !== null) {
|
|
723
615
|
material = getNode(fieldValues[0]);
|
|
724
616
|
}
|
|
725
|
-
|
|
726
617
|
break;
|
|
727
|
-
|
|
728
|
-
case 'geometry':
|
|
618
|
+
case "geometry":
|
|
729
619
|
if (fieldValues[0] !== null) {
|
|
730
620
|
geometry = getNode(fieldValues[0]);
|
|
731
621
|
}
|
|
732
|
-
|
|
733
622
|
break;
|
|
734
|
-
|
|
735
623
|
default:
|
|
736
|
-
console.warn(
|
|
624
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
737
625
|
break;
|
|
738
626
|
}
|
|
739
|
-
}
|
|
740
|
-
|
|
741
|
-
|
|
627
|
+
}
|
|
742
628
|
let object;
|
|
743
|
-
|
|
744
629
|
if (geometry && geometry.attributes.position) {
|
|
745
630
|
const type = geometry._type;
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
const pointsMaterial = new PointsMaterial({
|
|
750
|
-
color: 0xffffff
|
|
751
|
-
});
|
|
752
|
-
|
|
753
|
-
if (geometry.attributes.color !== undefined) {
|
|
631
|
+
if (type === "points") {
|
|
632
|
+
const pointsMaterial = new THREE.PointsMaterial({ color: 16777215 });
|
|
633
|
+
if (geometry.attributes.color !== void 0) {
|
|
754
634
|
pointsMaterial.vertexColors = true;
|
|
755
635
|
} else {
|
|
756
|
-
// if the color field is NULL and there is a material defined for the appearance affecting this PointSet, then use the emissiveColor of the material to draw the points
|
|
757
636
|
if (material.isMeshPhongMaterial) {
|
|
758
637
|
pointsMaterial.color.copy(material.emissive);
|
|
759
638
|
}
|
|
760
639
|
}
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
const lineMaterial = new LineBasicMaterial({
|
|
766
|
-
color: 0xffffff
|
|
767
|
-
});
|
|
768
|
-
|
|
769
|
-
if (geometry.attributes.color !== undefined) {
|
|
640
|
+
object = new THREE.Points(geometry, pointsMaterial);
|
|
641
|
+
} else if (type === "line") {
|
|
642
|
+
const lineMaterial = new THREE.LineBasicMaterial({ color: 16777215 });
|
|
643
|
+
if (geometry.attributes.color !== void 0) {
|
|
770
644
|
lineMaterial.vertexColors = true;
|
|
771
645
|
} else {
|
|
772
|
-
// if the color field is NULL and there is a material defined for the appearance affecting this IndexedLineSet, then use the emissiveColor of the material to draw the lines
|
|
773
646
|
if (material.isMeshPhongMaterial) {
|
|
774
647
|
lineMaterial.color.copy(material.emissive);
|
|
775
648
|
}
|
|
776
649
|
}
|
|
777
|
-
|
|
778
|
-
object = new LineSegments(geometry, lineMaterial);
|
|
650
|
+
object = new THREE.LineSegments(geometry, lineMaterial);
|
|
779
651
|
} else {
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
} // check for vertex colors
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
if (geometry.attributes.color !== undefined) {
|
|
652
|
+
if (geometry._solid !== void 0) {
|
|
653
|
+
material.side = geometry._solid ? THREE.FrontSide : THREE.DoubleSide;
|
|
654
|
+
}
|
|
655
|
+
if (geometry.attributes.color !== void 0) {
|
|
788
656
|
material.vertexColors = true;
|
|
789
657
|
}
|
|
790
|
-
|
|
791
|
-
object = new Mesh(geometry, material);
|
|
658
|
+
object = new THREE.Mesh(geometry, material);
|
|
792
659
|
}
|
|
793
660
|
} else {
|
|
794
|
-
object = new Object3D();
|
|
795
|
-
|
|
661
|
+
object = new THREE.Object3D();
|
|
796
662
|
object.visible = false;
|
|
797
663
|
}
|
|
798
|
-
|
|
799
664
|
return object;
|
|
800
665
|
}
|
|
801
|
-
|
|
802
666
|
function buildAppearanceNode(node) {
|
|
803
|
-
let material = new MeshPhongMaterial();
|
|
667
|
+
let material = new THREE.MeshPhongMaterial();
|
|
804
668
|
let transformData;
|
|
805
669
|
const fields = node.fields;
|
|
806
|
-
|
|
807
670
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
808
671
|
const field = fields[i];
|
|
809
672
|
const fieldName = field.name;
|
|
810
673
|
const fieldValues = field.values;
|
|
811
|
-
|
|
812
674
|
switch (fieldName) {
|
|
813
|
-
case
|
|
675
|
+
case "material":
|
|
814
676
|
if (fieldValues[0] !== null) {
|
|
815
677
|
const materialData = getNode(fieldValues[0]);
|
|
816
|
-
if (materialData.diffuseColor)
|
|
817
|
-
|
|
818
|
-
if (materialData.
|
|
819
|
-
|
|
820
|
-
if (materialData.
|
|
821
|
-
|
|
678
|
+
if (materialData.diffuseColor)
|
|
679
|
+
material.color.copy(materialData.diffuseColor);
|
|
680
|
+
if (materialData.emissiveColor)
|
|
681
|
+
material.emissive.copy(materialData.emissiveColor);
|
|
682
|
+
if (materialData.shininess)
|
|
683
|
+
material.shininess = materialData.shininess;
|
|
684
|
+
if (materialData.specularColor)
|
|
685
|
+
material.specular.copy(materialData.specularColor);
|
|
686
|
+
if (materialData.transparency)
|
|
687
|
+
material.opacity = 1 - materialData.transparency;
|
|
688
|
+
if (materialData.transparency > 0)
|
|
689
|
+
material.transparent = true;
|
|
822
690
|
} else {
|
|
823
|
-
|
|
824
|
-
material = new MeshBasicMaterial({
|
|
825
|
-
color: 0x000000
|
|
826
|
-
});
|
|
691
|
+
material = new THREE.MeshBasicMaterial({ color: 0 });
|
|
827
692
|
}
|
|
828
|
-
|
|
829
693
|
break;
|
|
830
|
-
|
|
831
|
-
case 'texture':
|
|
694
|
+
case "texture":
|
|
832
695
|
const textureNode = fieldValues[0];
|
|
833
|
-
|
|
834
696
|
if (textureNode !== null) {
|
|
835
|
-
if (textureNode.name ===
|
|
697
|
+
if (textureNode.name === "ImageTexture" || textureNode.name === "PixelTexture") {
|
|
836
698
|
material.map = getNode(textureNode);
|
|
699
|
+
} else {
|
|
837
700
|
}
|
|
838
701
|
}
|
|
839
|
-
|
|
840
702
|
break;
|
|
841
|
-
|
|
842
|
-
case 'textureTransform':
|
|
703
|
+
case "textureTransform":
|
|
843
704
|
if (fieldValues[0] !== null) {
|
|
844
705
|
transformData = getNode(fieldValues[0]);
|
|
845
706
|
}
|
|
846
|
-
|
|
847
707
|
break;
|
|
848
|
-
|
|
849
708
|
default:
|
|
850
|
-
console.warn(
|
|
709
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
851
710
|
break;
|
|
852
711
|
}
|
|
853
|
-
}
|
|
854
|
-
|
|
855
|
-
|
|
712
|
+
}
|
|
856
713
|
if (material.map) {
|
|
857
|
-
// respect VRML lighting model
|
|
858
714
|
if (material.map.__type) {
|
|
859
715
|
switch (material.map.__type) {
|
|
860
716
|
case TEXTURE_TYPE.INTENSITY_ALPHA:
|
|
861
|
-
material.opacity = 1;
|
|
862
|
-
|
|
717
|
+
material.opacity = 1;
|
|
863
718
|
break;
|
|
864
|
-
|
|
865
719
|
case TEXTURE_TYPE.RGB:
|
|
866
|
-
material.color.set(
|
|
867
|
-
|
|
720
|
+
material.color.set(16777215);
|
|
868
721
|
break;
|
|
869
|
-
|
|
870
722
|
case TEXTURE_TYPE.RGBA:
|
|
871
|
-
material.color.set(
|
|
872
|
-
|
|
873
|
-
material.opacity = 1; // ignore transparency
|
|
874
|
-
|
|
723
|
+
material.color.set(16777215);
|
|
724
|
+
material.opacity = 1;
|
|
875
725
|
break;
|
|
726
|
+
default:
|
|
876
727
|
}
|
|
877
|
-
|
|
878
728
|
delete material.map.__type;
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
|
|
729
|
+
}
|
|
882
730
|
if (transformData) {
|
|
883
731
|
material.map.center.copy(transformData.center);
|
|
884
732
|
material.map.rotation = transformData.rotation;
|
|
@@ -886,734 +734,563 @@ class VRMLLoader extends Loader {
|
|
|
886
734
|
material.map.offset.copy(transformData.translation);
|
|
887
735
|
}
|
|
888
736
|
}
|
|
889
|
-
|
|
890
737
|
return material;
|
|
891
738
|
}
|
|
892
|
-
|
|
893
739
|
function buildMaterialNode(node) {
|
|
894
740
|
const materialData = {};
|
|
895
741
|
const fields = node.fields;
|
|
896
|
-
|
|
897
742
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
898
743
|
const field = fields[i];
|
|
899
744
|
const fieldName = field.name;
|
|
900
745
|
const fieldValues = field.values;
|
|
901
|
-
|
|
902
746
|
switch (fieldName) {
|
|
903
|
-
case
|
|
904
|
-
// field not supported
|
|
747
|
+
case "ambientIntensity":
|
|
905
748
|
break;
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
materialData.diffuseColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
749
|
+
case "diffuseColor":
|
|
750
|
+
materialData.diffuseColor = new THREE.Color(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
909
751
|
break;
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
materialData.emissiveColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
752
|
+
case "emissiveColor":
|
|
753
|
+
materialData.emissiveColor = new THREE.Color(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
913
754
|
break;
|
|
914
|
-
|
|
915
|
-
case 'shininess':
|
|
755
|
+
case "shininess":
|
|
916
756
|
materialData.shininess = fieldValues[0];
|
|
917
757
|
break;
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
materialData.emissiveColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
758
|
+
case "specularColor":
|
|
759
|
+
materialData.emissiveColor = new THREE.Color(fieldValues[0], fieldValues[1], fieldValues[2]);
|
|
921
760
|
break;
|
|
922
|
-
|
|
923
|
-
case 'transparency':
|
|
761
|
+
case "transparency":
|
|
924
762
|
materialData.transparency = fieldValues[0];
|
|
925
763
|
break;
|
|
926
|
-
|
|
927
764
|
default:
|
|
928
|
-
console.warn(
|
|
765
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
929
766
|
break;
|
|
930
767
|
}
|
|
931
768
|
}
|
|
932
|
-
|
|
933
769
|
return materialData;
|
|
934
770
|
}
|
|
935
|
-
|
|
936
771
|
function parseHexColor(hex, textureType, color) {
|
|
937
772
|
let value;
|
|
938
|
-
|
|
939
773
|
switch (textureType) {
|
|
940
774
|
case TEXTURE_TYPE.INTENSITY:
|
|
941
|
-
// Intensity texture: A one-component image specifies one-byte hexadecimal or integer values representing the intensity of the image
|
|
942
775
|
value = parseInt(hex);
|
|
943
776
|
color.r = value;
|
|
944
777
|
color.g = value;
|
|
945
778
|
color.b = value;
|
|
946
779
|
color.a = 1;
|
|
947
780
|
break;
|
|
948
|
-
|
|
949
781
|
case TEXTURE_TYPE.INTENSITY_ALPHA:
|
|
950
|
-
|
|
951
|
-
value = parseInt('0x' + hex.substring(2, 4));
|
|
782
|
+
value = parseInt("0x" + hex.substring(2, 4));
|
|
952
783
|
color.r = value;
|
|
953
784
|
color.g = value;
|
|
954
785
|
color.b = value;
|
|
955
|
-
color.a = parseInt(
|
|
786
|
+
color.a = parseInt("0x" + hex.substring(4, 6));
|
|
956
787
|
break;
|
|
957
|
-
|
|
958
788
|
case TEXTURE_TYPE.RGB:
|
|
959
|
-
|
|
960
|
-
color.
|
|
961
|
-
color.
|
|
962
|
-
color.b = parseInt('0x' + hex.substring(6, 8));
|
|
789
|
+
color.r = parseInt("0x" + hex.substring(2, 4));
|
|
790
|
+
color.g = parseInt("0x" + hex.substring(4, 6));
|
|
791
|
+
color.b = parseInt("0x" + hex.substring(6, 8));
|
|
963
792
|
color.a = 1;
|
|
964
793
|
break;
|
|
965
|
-
|
|
966
794
|
case TEXTURE_TYPE.RGBA:
|
|
967
|
-
|
|
968
|
-
color.
|
|
969
|
-
color.
|
|
970
|
-
color.
|
|
971
|
-
color.a = parseInt('0x' + hex.substring(8, 10));
|
|
795
|
+
color.r = parseInt("0x" + hex.substring(2, 4));
|
|
796
|
+
color.g = parseInt("0x" + hex.substring(4, 6));
|
|
797
|
+
color.b = parseInt("0x" + hex.substring(6, 8));
|
|
798
|
+
color.a = parseInt("0x" + hex.substring(8, 10));
|
|
972
799
|
break;
|
|
800
|
+
default:
|
|
973
801
|
}
|
|
974
802
|
}
|
|
975
|
-
|
|
976
803
|
function getTextureType(num_components) {
|
|
977
804
|
let type;
|
|
978
|
-
|
|
979
805
|
switch (num_components) {
|
|
980
806
|
case 1:
|
|
981
807
|
type = TEXTURE_TYPE.INTENSITY;
|
|
982
808
|
break;
|
|
983
|
-
|
|
984
809
|
case 2:
|
|
985
810
|
type = TEXTURE_TYPE.INTENSITY_ALPHA;
|
|
986
811
|
break;
|
|
987
|
-
|
|
988
812
|
case 3:
|
|
989
813
|
type = TEXTURE_TYPE.RGB;
|
|
990
814
|
break;
|
|
991
|
-
|
|
992
815
|
case 4:
|
|
993
816
|
type = TEXTURE_TYPE.RGBA;
|
|
994
817
|
break;
|
|
818
|
+
default:
|
|
995
819
|
}
|
|
996
|
-
|
|
997
820
|
return type;
|
|
998
821
|
}
|
|
999
|
-
|
|
1000
822
|
function buildPixelTextureNode(node) {
|
|
1001
823
|
let texture;
|
|
1002
|
-
let wrapS = RepeatWrapping;
|
|
1003
|
-
let wrapT = RepeatWrapping;
|
|
824
|
+
let wrapS = THREE.RepeatWrapping;
|
|
825
|
+
let wrapT = THREE.RepeatWrapping;
|
|
1004
826
|
const fields = node.fields;
|
|
1005
|
-
|
|
1006
827
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1007
828
|
const field = fields[i];
|
|
1008
829
|
const fieldName = field.name;
|
|
1009
830
|
const fieldValues = field.values;
|
|
1010
|
-
|
|
1011
831
|
switch (fieldName) {
|
|
1012
|
-
case
|
|
832
|
+
case "image":
|
|
1013
833
|
const width = fieldValues[0];
|
|
1014
834
|
const height = fieldValues[1];
|
|
1015
835
|
const num_components = fieldValues[2];
|
|
1016
836
|
const textureType = getTextureType(num_components);
|
|
1017
|
-
const
|
|
1018
|
-
const color = {
|
|
1019
|
-
r: 0,
|
|
1020
|
-
g: 0,
|
|
1021
|
-
b: 0,
|
|
1022
|
-
a: 0
|
|
1023
|
-
};
|
|
1024
|
-
|
|
837
|
+
const data2 = new Uint8Array(4 * width * height);
|
|
838
|
+
const color = { r: 0, g: 0, b: 0, a: 0 };
|
|
1025
839
|
for (let j = 3, k = 0, jl = fieldValues.length; j < jl; j++, k++) {
|
|
1026
840
|
parseHexColor(fieldValues[j], textureType, color);
|
|
1027
841
|
const stride = k * 4;
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
842
|
+
data2[stride + 0] = color.r;
|
|
843
|
+
data2[stride + 1] = color.g;
|
|
844
|
+
data2[stride + 2] = color.b;
|
|
845
|
+
data2[stride + 3] = color.a;
|
|
1032
846
|
}
|
|
1033
|
-
|
|
1034
|
-
texture = new DataTexture(data, width, height);
|
|
847
|
+
texture = new THREE.DataTexture(data2, width, height);
|
|
1035
848
|
texture.needsUpdate = true;
|
|
1036
|
-
texture.__type = textureType;
|
|
1037
|
-
|
|
849
|
+
texture.__type = textureType;
|
|
1038
850
|
break;
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
851
|
+
case "repeatS":
|
|
852
|
+
if (fieldValues[0] === false)
|
|
853
|
+
wrapS = THREE.ClampToEdgeWrapping;
|
|
1042
854
|
break;
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
855
|
+
case "repeatT":
|
|
856
|
+
if (fieldValues[0] === false)
|
|
857
|
+
wrapT = THREE.ClampToEdgeWrapping;
|
|
1046
858
|
break;
|
|
1047
|
-
|
|
1048
859
|
default:
|
|
1049
|
-
console.warn(
|
|
860
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1050
861
|
break;
|
|
1051
862
|
}
|
|
1052
863
|
}
|
|
1053
|
-
|
|
1054
864
|
if (texture) {
|
|
1055
865
|
texture.wrapS = wrapS;
|
|
1056
866
|
texture.wrapT = wrapT;
|
|
1057
867
|
}
|
|
1058
|
-
|
|
1059
868
|
return texture;
|
|
1060
869
|
}
|
|
1061
|
-
|
|
1062
870
|
function buildImageTextureNode(node) {
|
|
1063
871
|
let texture;
|
|
1064
|
-
let wrapS = RepeatWrapping;
|
|
1065
|
-
let wrapT = RepeatWrapping;
|
|
872
|
+
let wrapS = THREE.RepeatWrapping;
|
|
873
|
+
let wrapT = THREE.RepeatWrapping;
|
|
1066
874
|
const fields = node.fields;
|
|
1067
|
-
|
|
1068
875
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1069
876
|
const field = fields[i];
|
|
1070
877
|
const fieldName = field.name;
|
|
1071
878
|
const fieldValues = field.values;
|
|
1072
|
-
|
|
1073
879
|
switch (fieldName) {
|
|
1074
|
-
case
|
|
880
|
+
case "url":
|
|
1075
881
|
const url = fieldValues[0];
|
|
1076
|
-
if (url)
|
|
882
|
+
if (url)
|
|
883
|
+
texture = textureLoader.load(url);
|
|
1077
884
|
break;
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
885
|
+
case "repeatS":
|
|
886
|
+
if (fieldValues[0] === false)
|
|
887
|
+
wrapS = THREE.ClampToEdgeWrapping;
|
|
1081
888
|
break;
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
889
|
+
case "repeatT":
|
|
890
|
+
if (fieldValues[0] === false)
|
|
891
|
+
wrapT = THREE.ClampToEdgeWrapping;
|
|
1085
892
|
break;
|
|
1086
|
-
|
|
1087
893
|
default:
|
|
1088
|
-
console.warn(
|
|
894
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1089
895
|
break;
|
|
1090
896
|
}
|
|
1091
897
|
}
|
|
1092
|
-
|
|
1093
898
|
if (texture) {
|
|
1094
899
|
texture.wrapS = wrapS;
|
|
1095
900
|
texture.wrapT = wrapT;
|
|
1096
901
|
}
|
|
1097
|
-
|
|
1098
902
|
return texture;
|
|
1099
903
|
}
|
|
1100
|
-
|
|
1101
904
|
function buildTextureTransformNode(node) {
|
|
1102
905
|
const transformData = {
|
|
1103
|
-
center: new Vector2(),
|
|
1104
|
-
rotation: new Vector2(),
|
|
1105
|
-
scale: new Vector2(),
|
|
1106
|
-
translation: new Vector2()
|
|
906
|
+
center: new THREE.Vector2(),
|
|
907
|
+
rotation: new THREE.Vector2(),
|
|
908
|
+
scale: new THREE.Vector2(),
|
|
909
|
+
translation: new THREE.Vector2()
|
|
1107
910
|
};
|
|
1108
911
|
const fields = node.fields;
|
|
1109
|
-
|
|
1110
912
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1111
913
|
const field = fields[i];
|
|
1112
914
|
const fieldName = field.name;
|
|
1113
915
|
const fieldValues = field.values;
|
|
1114
|
-
|
|
1115
916
|
switch (fieldName) {
|
|
1116
|
-
case
|
|
917
|
+
case "center":
|
|
1117
918
|
transformData.center.set(fieldValues[0], fieldValues[1]);
|
|
1118
919
|
break;
|
|
1119
|
-
|
|
1120
|
-
case 'rotation':
|
|
920
|
+
case "rotation":
|
|
1121
921
|
transformData.rotation = fieldValues[0];
|
|
1122
922
|
break;
|
|
1123
|
-
|
|
1124
|
-
case 'scale':
|
|
923
|
+
case "scale":
|
|
1125
924
|
transformData.scale.set(fieldValues[0], fieldValues[1]);
|
|
1126
925
|
break;
|
|
1127
|
-
|
|
1128
|
-
case 'translation':
|
|
926
|
+
case "translation":
|
|
1129
927
|
transformData.translation.set(fieldValues[0], fieldValues[1]);
|
|
1130
928
|
break;
|
|
1131
|
-
|
|
1132
929
|
default:
|
|
1133
|
-
console.warn(
|
|
930
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1134
931
|
break;
|
|
1135
932
|
}
|
|
1136
933
|
}
|
|
1137
|
-
|
|
1138
934
|
return transformData;
|
|
1139
935
|
}
|
|
1140
|
-
|
|
1141
936
|
function buildGeometricNode(node) {
|
|
1142
937
|
return node.fields[0].values;
|
|
1143
938
|
}
|
|
1144
|
-
|
|
1145
939
|
function buildWorldInfoNode(node) {
|
|
1146
940
|
const worldInfo = {};
|
|
1147
941
|
const fields = node.fields;
|
|
1148
|
-
|
|
1149
942
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1150
943
|
const field = fields[i];
|
|
1151
944
|
const fieldName = field.name;
|
|
1152
945
|
const fieldValues = field.values;
|
|
1153
|
-
|
|
1154
946
|
switch (fieldName) {
|
|
1155
|
-
case
|
|
947
|
+
case "title":
|
|
1156
948
|
worldInfo.title = fieldValues[0];
|
|
1157
949
|
break;
|
|
1158
|
-
|
|
1159
|
-
case 'info':
|
|
950
|
+
case "info":
|
|
1160
951
|
worldInfo.info = fieldValues;
|
|
1161
952
|
break;
|
|
1162
|
-
|
|
1163
953
|
default:
|
|
1164
|
-
console.warn(
|
|
954
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1165
955
|
break;
|
|
1166
956
|
}
|
|
1167
957
|
}
|
|
1168
|
-
|
|
1169
958
|
return worldInfo;
|
|
1170
959
|
}
|
|
1171
|
-
|
|
1172
960
|
function buildIndexedFaceSetNode(node) {
|
|
1173
961
|
let color, coord, normal, texCoord;
|
|
1174
|
-
let ccw = true,
|
|
1175
|
-
solid = true,
|
|
1176
|
-
creaseAngle = 0;
|
|
962
|
+
let ccw = true, solid = true, creaseAngle = 0;
|
|
1177
963
|
let colorIndex, coordIndex, normalIndex, texCoordIndex;
|
|
1178
|
-
let colorPerVertex = true,
|
|
1179
|
-
normalPerVertex = true;
|
|
964
|
+
let colorPerVertex = true, normalPerVertex = true;
|
|
1180
965
|
const fields = node.fields;
|
|
1181
|
-
|
|
1182
966
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1183
967
|
const field = fields[i];
|
|
1184
968
|
const fieldName = field.name;
|
|
1185
969
|
const fieldValues = field.values;
|
|
1186
|
-
|
|
1187
970
|
switch (fieldName) {
|
|
1188
|
-
case
|
|
971
|
+
case "color":
|
|
1189
972
|
const colorNode = fieldValues[0];
|
|
1190
|
-
|
|
1191
973
|
if (colorNode !== null) {
|
|
1192
974
|
color = getNode(colorNode);
|
|
1193
975
|
}
|
|
1194
|
-
|
|
1195
976
|
break;
|
|
1196
|
-
|
|
1197
|
-
case 'coord':
|
|
977
|
+
case "coord":
|
|
1198
978
|
const coordNode = fieldValues[0];
|
|
1199
|
-
|
|
1200
979
|
if (coordNode !== null) {
|
|
1201
980
|
coord = getNode(coordNode);
|
|
1202
981
|
}
|
|
1203
|
-
|
|
1204
982
|
break;
|
|
1205
|
-
|
|
1206
|
-
case 'normal':
|
|
983
|
+
case "normal":
|
|
1207
984
|
const normalNode = fieldValues[0];
|
|
1208
|
-
|
|
1209
985
|
if (normalNode !== null) {
|
|
1210
986
|
normal = getNode(normalNode);
|
|
1211
987
|
}
|
|
1212
|
-
|
|
1213
988
|
break;
|
|
1214
|
-
|
|
1215
|
-
case 'texCoord':
|
|
989
|
+
case "texCoord":
|
|
1216
990
|
const texCoordNode = fieldValues[0];
|
|
1217
|
-
|
|
1218
991
|
if (texCoordNode !== null) {
|
|
1219
992
|
texCoord = getNode(texCoordNode);
|
|
1220
993
|
}
|
|
1221
|
-
|
|
1222
994
|
break;
|
|
1223
|
-
|
|
1224
|
-
case 'ccw':
|
|
995
|
+
case "ccw":
|
|
1225
996
|
ccw = fieldValues[0];
|
|
1226
997
|
break;
|
|
1227
|
-
|
|
1228
|
-
case 'colorIndex':
|
|
998
|
+
case "colorIndex":
|
|
1229
999
|
colorIndex = fieldValues;
|
|
1230
1000
|
break;
|
|
1231
|
-
|
|
1232
|
-
case 'colorPerVertex':
|
|
1001
|
+
case "colorPerVertex":
|
|
1233
1002
|
colorPerVertex = fieldValues[0];
|
|
1234
1003
|
break;
|
|
1235
|
-
|
|
1236
|
-
case 'convex':
|
|
1237
|
-
// field not supported
|
|
1004
|
+
case "convex":
|
|
1238
1005
|
break;
|
|
1239
|
-
|
|
1240
|
-
case 'coordIndex':
|
|
1006
|
+
case "coordIndex":
|
|
1241
1007
|
coordIndex = fieldValues;
|
|
1242
1008
|
break;
|
|
1243
|
-
|
|
1244
|
-
case 'creaseAngle':
|
|
1009
|
+
case "creaseAngle":
|
|
1245
1010
|
creaseAngle = fieldValues[0];
|
|
1246
1011
|
break;
|
|
1247
|
-
|
|
1248
|
-
case 'normalIndex':
|
|
1012
|
+
case "normalIndex":
|
|
1249
1013
|
normalIndex = fieldValues;
|
|
1250
1014
|
break;
|
|
1251
|
-
|
|
1252
|
-
case 'normalPerVertex':
|
|
1015
|
+
case "normalPerVertex":
|
|
1253
1016
|
normalPerVertex = fieldValues[0];
|
|
1254
1017
|
break;
|
|
1255
|
-
|
|
1256
|
-
case 'solid':
|
|
1018
|
+
case "solid":
|
|
1257
1019
|
solid = fieldValues[0];
|
|
1258
1020
|
break;
|
|
1259
|
-
|
|
1260
|
-
case 'texCoordIndex':
|
|
1021
|
+
case "texCoordIndex":
|
|
1261
1022
|
texCoordIndex = fieldValues;
|
|
1262
1023
|
break;
|
|
1263
|
-
|
|
1264
1024
|
default:
|
|
1265
|
-
console.warn(
|
|
1025
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1266
1026
|
break;
|
|
1267
1027
|
}
|
|
1268
1028
|
}
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
return new BufferGeometry(); // handle VRML files with incomplete geometry definition
|
|
1029
|
+
if (coordIndex === void 0) {
|
|
1030
|
+
console.warn("THREE.VRMLLoader: Missing coordIndex.");
|
|
1031
|
+
return new THREE.BufferGeometry();
|
|
1273
1032
|
}
|
|
1274
|
-
|
|
1275
1033
|
const triangulatedCoordIndex = triangulateFaceIndex(coordIndex, ccw);
|
|
1276
1034
|
let colorAttribute;
|
|
1277
1035
|
let normalAttribute;
|
|
1278
1036
|
let uvAttribute;
|
|
1279
|
-
|
|
1280
1037
|
if (color) {
|
|
1281
1038
|
if (colorPerVertex === true) {
|
|
1282
1039
|
if (colorIndex && colorIndex.length > 0) {
|
|
1283
|
-
// if the colorIndex field is not empty, then it is used to choose colors for each vertex of the IndexedFaceSet.
|
|
1284
1040
|
const triangulatedColorIndex = triangulateFaceIndex(colorIndex, ccw);
|
|
1285
1041
|
colorAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulatedColorIndex, color, 3);
|
|
1286
1042
|
} else {
|
|
1287
|
-
|
|
1288
|
-
colorAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(color, 3));
|
|
1043
|
+
colorAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new THREE.Float32BufferAttribute(color, 3));
|
|
1289
1044
|
}
|
|
1290
1045
|
} else {
|
|
1291
1046
|
if (colorIndex && colorIndex.length > 0) {
|
|
1292
|
-
// if the colorIndex field is not empty, then they are used to choose one color for each face of the IndexedFaceSet
|
|
1293
1047
|
const flattenFaceColors = flattenData(color, colorIndex);
|
|
1294
1048
|
const triangulatedFaceColors = triangulateFaceData(flattenFaceColors, coordIndex);
|
|
1295
1049
|
colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceColors);
|
|
1296
1050
|
} else {
|
|
1297
|
-
// if the colorIndex field is empty, then the color are applied to each face of the IndexedFaceSet in order
|
|
1298
1051
|
const triangulatedFaceColors = triangulateFaceData(color, coordIndex);
|
|
1299
1052
|
colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceColors);
|
|
1300
1053
|
}
|
|
1301
1054
|
}
|
|
1302
1055
|
}
|
|
1303
|
-
|
|
1304
1056
|
if (normal) {
|
|
1305
1057
|
if (normalPerVertex === true) {
|
|
1306
|
-
// consider vertex normals
|
|
1307
1058
|
if (normalIndex && normalIndex.length > 0) {
|
|
1308
|
-
// if the normalIndex field is not empty, then it is used to choose normals for each vertex of the IndexedFaceSet.
|
|
1309
1059
|
const triangulatedNormalIndex = triangulateFaceIndex(normalIndex, ccw);
|
|
1310
|
-
normalAttribute = computeAttributeFromIndexedData(
|
|
1060
|
+
normalAttribute = computeAttributeFromIndexedData(
|
|
1061
|
+
triangulatedCoordIndex,
|
|
1062
|
+
triangulatedNormalIndex,
|
|
1063
|
+
normal,
|
|
1064
|
+
3
|
|
1065
|
+
);
|
|
1311
1066
|
} else {
|
|
1312
|
-
|
|
1313
|
-
normalAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(normal, 3));
|
|
1067
|
+
normalAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new THREE.Float32BufferAttribute(normal, 3));
|
|
1314
1068
|
}
|
|
1315
1069
|
} else {
|
|
1316
|
-
// consider face normals
|
|
1317
1070
|
if (normalIndex && normalIndex.length > 0) {
|
|
1318
|
-
// if the normalIndex field is not empty, then they are used to choose one normal for each face of the IndexedFaceSet
|
|
1319
1071
|
const flattenFaceNormals = flattenData(normal, normalIndex);
|
|
1320
1072
|
const triangulatedFaceNormals = triangulateFaceData(flattenFaceNormals, coordIndex);
|
|
1321
1073
|
normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceNormals);
|
|
1322
1074
|
} else {
|
|
1323
|
-
// if the normalIndex field is empty, then the normals are applied to each face of the IndexedFaceSet in order
|
|
1324
1075
|
const triangulatedFaceNormals = triangulateFaceData(normal, coordIndex);
|
|
1325
1076
|
normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceNormals);
|
|
1326
1077
|
}
|
|
1327
1078
|
}
|
|
1328
1079
|
} else {
|
|
1329
|
-
// if the normal field is NULL, then the loader should automatically generate normals, using creaseAngle to determine if and how normals are smoothed across shared vertices
|
|
1330
1080
|
normalAttribute = computeNormalAttribute(triangulatedCoordIndex, coord, creaseAngle);
|
|
1331
1081
|
}
|
|
1332
|
-
|
|
1333
1082
|
if (texCoord) {
|
|
1334
|
-
// texture coordinates are always defined on vertex level
|
|
1335
1083
|
if (texCoordIndex && texCoordIndex.length > 0) {
|
|
1336
|
-
// if the texCoordIndex field is not empty, then it is used to choose texture coordinates for each vertex of the IndexedFaceSet.
|
|
1337
1084
|
const triangulatedTexCoordIndex = triangulateFaceIndex(texCoordIndex, ccw);
|
|
1338
1085
|
uvAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulatedTexCoordIndex, texCoord, 2);
|
|
1339
1086
|
} else {
|
|
1340
|
-
|
|
1341
|
-
uvAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(texCoord, 2));
|
|
1087
|
+
uvAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new THREE.Float32BufferAttribute(texCoord, 2));
|
|
1342
1088
|
}
|
|
1343
1089
|
}
|
|
1344
|
-
|
|
1345
|
-
const
|
|
1346
|
-
|
|
1347
|
-
geometry.setAttribute(
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
if (
|
|
1351
|
-
|
|
1352
|
-
|
|
1090
|
+
const geometry = new THREE.BufferGeometry();
|
|
1091
|
+
const positionAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new THREE.Float32BufferAttribute(coord, 3));
|
|
1092
|
+
geometry.setAttribute("position", positionAttribute);
|
|
1093
|
+
geometry.setAttribute("normal", normalAttribute);
|
|
1094
|
+
if (colorAttribute)
|
|
1095
|
+
geometry.setAttribute("color", colorAttribute);
|
|
1096
|
+
if (uvAttribute)
|
|
1097
|
+
geometry.setAttribute("uv", uvAttribute);
|
|
1353
1098
|
geometry._solid = solid;
|
|
1354
|
-
geometry._type =
|
|
1099
|
+
geometry._type = "mesh";
|
|
1355
1100
|
return geometry;
|
|
1356
1101
|
}
|
|
1357
|
-
|
|
1358
1102
|
function buildIndexedLineSetNode(node) {
|
|
1359
1103
|
let color, coord;
|
|
1360
1104
|
let colorIndex, coordIndex;
|
|
1361
1105
|
let colorPerVertex = true;
|
|
1362
1106
|
const fields = node.fields;
|
|
1363
|
-
|
|
1364
1107
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1365
1108
|
const field = fields[i];
|
|
1366
1109
|
const fieldName = field.name;
|
|
1367
1110
|
const fieldValues = field.values;
|
|
1368
|
-
|
|
1369
1111
|
switch (fieldName) {
|
|
1370
|
-
case
|
|
1112
|
+
case "color":
|
|
1371
1113
|
const colorNode = fieldValues[0];
|
|
1372
|
-
|
|
1373
1114
|
if (colorNode !== null) {
|
|
1374
1115
|
color = getNode(colorNode);
|
|
1375
1116
|
}
|
|
1376
|
-
|
|
1377
1117
|
break;
|
|
1378
|
-
|
|
1379
|
-
case 'coord':
|
|
1118
|
+
case "coord":
|
|
1380
1119
|
const coordNode = fieldValues[0];
|
|
1381
|
-
|
|
1382
1120
|
if (coordNode !== null) {
|
|
1383
1121
|
coord = getNode(coordNode);
|
|
1384
1122
|
}
|
|
1385
|
-
|
|
1386
1123
|
break;
|
|
1387
|
-
|
|
1388
|
-
case 'colorIndex':
|
|
1124
|
+
case "colorIndex":
|
|
1389
1125
|
colorIndex = fieldValues;
|
|
1390
1126
|
break;
|
|
1391
|
-
|
|
1392
|
-
case 'colorPerVertex':
|
|
1127
|
+
case "colorPerVertex":
|
|
1393
1128
|
colorPerVertex = fieldValues[0];
|
|
1394
1129
|
break;
|
|
1395
|
-
|
|
1396
|
-
case 'coordIndex':
|
|
1130
|
+
case "coordIndex":
|
|
1397
1131
|
coordIndex = fieldValues;
|
|
1398
1132
|
break;
|
|
1399
|
-
|
|
1400
1133
|
default:
|
|
1401
|
-
console.warn(
|
|
1134
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1402
1135
|
break;
|
|
1403
1136
|
}
|
|
1404
|
-
}
|
|
1405
|
-
|
|
1406
|
-
|
|
1137
|
+
}
|
|
1407
1138
|
let colorAttribute;
|
|
1408
|
-
const expandedLineIndex = expandLineIndex(coordIndex);
|
|
1409
|
-
|
|
1139
|
+
const expandedLineIndex = expandLineIndex(coordIndex);
|
|
1410
1140
|
if (color) {
|
|
1411
1141
|
if (colorPerVertex === true) {
|
|
1412
1142
|
if (colorIndex.length > 0) {
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
colorAttribute = computeAttributeFromIndexedData(expandedLineIndex, expandedColorIndex, color, 3); // compute data on vertex level
|
|
1143
|
+
const expandedColorIndex = expandLineIndex(colorIndex);
|
|
1144
|
+
colorAttribute = computeAttributeFromIndexedData(expandedLineIndex, expandedColorIndex, color, 3);
|
|
1417
1145
|
} else {
|
|
1418
|
-
|
|
1419
|
-
colorAttribute = toNonIndexedAttribute(expandedLineIndex, new Float32BufferAttribute(color, 3));
|
|
1146
|
+
colorAttribute = toNonIndexedAttribute(expandedLineIndex, new THREE.Float32BufferAttribute(color, 3));
|
|
1420
1147
|
}
|
|
1421
1148
|
} else {
|
|
1422
1149
|
if (colorIndex.length > 0) {
|
|
1423
|
-
|
|
1424
|
-
const
|
|
1425
|
-
|
|
1426
|
-
const expandedLineColors = expandLineData(flattenLineColors, coordIndex); // compute colors for each line segment (rendering primitve)
|
|
1427
|
-
|
|
1428
|
-
colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors); // compute data on vertex level
|
|
1150
|
+
const flattenLineColors = flattenData(color, colorIndex);
|
|
1151
|
+
const expandedLineColors = expandLineData(flattenLineColors, coordIndex);
|
|
1152
|
+
colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors);
|
|
1429
1153
|
} else {
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors); // compute data on vertex level
|
|
1154
|
+
const expandedLineColors = expandLineData(color, coordIndex);
|
|
1155
|
+
colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors);
|
|
1434
1156
|
}
|
|
1435
1157
|
}
|
|
1436
|
-
}
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
geometry._type = 'line';
|
|
1158
|
+
}
|
|
1159
|
+
const geometry = new THREE.BufferGeometry();
|
|
1160
|
+
const positionAttribute = toNonIndexedAttribute(expandedLineIndex, new THREE.Float32BufferAttribute(coord, 3));
|
|
1161
|
+
geometry.setAttribute("position", positionAttribute);
|
|
1162
|
+
if (colorAttribute)
|
|
1163
|
+
geometry.setAttribute("color", colorAttribute);
|
|
1164
|
+
geometry._type = "line";
|
|
1444
1165
|
return geometry;
|
|
1445
1166
|
}
|
|
1446
|
-
|
|
1447
1167
|
function buildPointSetNode(node) {
|
|
1448
1168
|
let color, coord;
|
|
1449
1169
|
const fields = node.fields;
|
|
1450
|
-
|
|
1451
1170
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1452
1171
|
const field = fields[i];
|
|
1453
1172
|
const fieldName = field.name;
|
|
1454
1173
|
const fieldValues = field.values;
|
|
1455
|
-
|
|
1456
1174
|
switch (fieldName) {
|
|
1457
|
-
case
|
|
1175
|
+
case "color":
|
|
1458
1176
|
const colorNode = fieldValues[0];
|
|
1459
|
-
|
|
1460
1177
|
if (colorNode !== null) {
|
|
1461
1178
|
color = getNode(colorNode);
|
|
1462
1179
|
}
|
|
1463
|
-
|
|
1464
1180
|
break;
|
|
1465
|
-
|
|
1466
|
-
case 'coord':
|
|
1181
|
+
case "coord":
|
|
1467
1182
|
const coordNode = fieldValues[0];
|
|
1468
|
-
|
|
1469
1183
|
if (coordNode !== null) {
|
|
1470
1184
|
coord = getNode(coordNode);
|
|
1471
1185
|
}
|
|
1472
|
-
|
|
1473
1186
|
break;
|
|
1474
|
-
|
|
1475
1187
|
default:
|
|
1476
|
-
console.warn(
|
|
1188
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1477
1189
|
break;
|
|
1478
1190
|
}
|
|
1479
1191
|
}
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
geometry._type =
|
|
1192
|
+
const geometry = new THREE.BufferGeometry();
|
|
1193
|
+
geometry.setAttribute("position", new THREE.Float32BufferAttribute(coord, 3));
|
|
1194
|
+
if (color)
|
|
1195
|
+
geometry.setAttribute("color", new THREE.Float32BufferAttribute(color, 3));
|
|
1196
|
+
geometry._type = "points";
|
|
1485
1197
|
return geometry;
|
|
1486
1198
|
}
|
|
1487
|
-
|
|
1488
1199
|
function buildBoxNode(node) {
|
|
1489
|
-
const size = new Vector3(2, 2, 2);
|
|
1200
|
+
const size = new THREE.Vector3(2, 2, 2);
|
|
1490
1201
|
const fields = node.fields;
|
|
1491
|
-
|
|
1492
1202
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1493
1203
|
const field = fields[i];
|
|
1494
1204
|
const fieldName = field.name;
|
|
1495
1205
|
const fieldValues = field.values;
|
|
1496
|
-
|
|
1497
1206
|
switch (fieldName) {
|
|
1498
|
-
case
|
|
1207
|
+
case "size":
|
|
1499
1208
|
size.x = fieldValues[0];
|
|
1500
1209
|
size.y = fieldValues[1];
|
|
1501
1210
|
size.z = fieldValues[2];
|
|
1502
1211
|
break;
|
|
1503
|
-
|
|
1504
1212
|
default:
|
|
1505
|
-
console.warn(
|
|
1213
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1506
1214
|
break;
|
|
1507
1215
|
}
|
|
1508
1216
|
}
|
|
1509
|
-
|
|
1510
|
-
const geometry = new BoxGeometry(size.x, size.y, size.z);
|
|
1217
|
+
const geometry = new THREE.BoxGeometry(size.x, size.y, size.z);
|
|
1511
1218
|
return geometry;
|
|
1512
1219
|
}
|
|
1513
|
-
|
|
1514
1220
|
function buildConeNode(node) {
|
|
1515
|
-
let radius = 1,
|
|
1516
|
-
height = 2,
|
|
1517
|
-
openEnded = false;
|
|
1221
|
+
let radius = 1, height = 2, openEnded = false;
|
|
1518
1222
|
const fields = node.fields;
|
|
1519
|
-
|
|
1520
1223
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1521
1224
|
const field = fields[i];
|
|
1522
1225
|
const fieldName = field.name;
|
|
1523
1226
|
const fieldValues = field.values;
|
|
1524
|
-
|
|
1525
1227
|
switch (fieldName) {
|
|
1526
|
-
case
|
|
1228
|
+
case "bottom":
|
|
1527
1229
|
openEnded = !fieldValues[0];
|
|
1528
1230
|
break;
|
|
1529
|
-
|
|
1530
|
-
case 'bottomRadius':
|
|
1231
|
+
case "bottomRadius":
|
|
1531
1232
|
radius = fieldValues[0];
|
|
1532
1233
|
break;
|
|
1533
|
-
|
|
1534
|
-
case 'height':
|
|
1234
|
+
case "height":
|
|
1535
1235
|
height = fieldValues[0];
|
|
1536
1236
|
break;
|
|
1537
|
-
|
|
1538
|
-
case 'side':
|
|
1539
|
-
// field not supported
|
|
1237
|
+
case "side":
|
|
1540
1238
|
break;
|
|
1541
|
-
|
|
1542
1239
|
default:
|
|
1543
|
-
console.warn(
|
|
1240
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1544
1241
|
break;
|
|
1545
1242
|
}
|
|
1546
1243
|
}
|
|
1547
|
-
|
|
1548
|
-
const geometry = new ConeGeometry(radius, height, 16, 1, openEnded);
|
|
1244
|
+
const geometry = new THREE.ConeGeometry(radius, height, 16, 1, openEnded);
|
|
1549
1245
|
return geometry;
|
|
1550
1246
|
}
|
|
1551
|
-
|
|
1552
1247
|
function buildCylinderNode(node) {
|
|
1553
|
-
let radius = 1,
|
|
1554
|
-
height = 2;
|
|
1248
|
+
let radius = 1, height = 2;
|
|
1555
1249
|
const fields = node.fields;
|
|
1556
|
-
|
|
1557
1250
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1558
1251
|
const field = fields[i];
|
|
1559
1252
|
const fieldName = field.name;
|
|
1560
1253
|
const fieldValues = field.values;
|
|
1561
|
-
|
|
1562
1254
|
switch (fieldName) {
|
|
1563
|
-
case
|
|
1564
|
-
// field not supported
|
|
1255
|
+
case "bottom":
|
|
1565
1256
|
break;
|
|
1566
|
-
|
|
1567
|
-
case 'radius':
|
|
1257
|
+
case "radius":
|
|
1568
1258
|
radius = fieldValues[0];
|
|
1569
1259
|
break;
|
|
1570
|
-
|
|
1571
|
-
case 'height':
|
|
1260
|
+
case "height":
|
|
1572
1261
|
height = fieldValues[0];
|
|
1573
1262
|
break;
|
|
1574
|
-
|
|
1575
|
-
case 'side':
|
|
1576
|
-
// field not supported
|
|
1263
|
+
case "side":
|
|
1577
1264
|
break;
|
|
1578
|
-
|
|
1579
|
-
case 'top':
|
|
1580
|
-
// field not supported
|
|
1265
|
+
case "top":
|
|
1581
1266
|
break;
|
|
1582
|
-
|
|
1583
1267
|
default:
|
|
1584
|
-
console.warn(
|
|
1268
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1585
1269
|
break;
|
|
1586
1270
|
}
|
|
1587
1271
|
}
|
|
1588
|
-
|
|
1589
|
-
const geometry = new CylinderGeometry(radius, radius, height, 16, 1);
|
|
1272
|
+
const geometry = new THREE.CylinderGeometry(radius, radius, height, 16, 1);
|
|
1590
1273
|
return geometry;
|
|
1591
1274
|
}
|
|
1592
|
-
|
|
1593
1275
|
function buildSphereNode(node) {
|
|
1594
1276
|
let radius = 1;
|
|
1595
1277
|
const fields = node.fields;
|
|
1596
|
-
|
|
1597
1278
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1598
1279
|
const field = fields[i];
|
|
1599
1280
|
const fieldName = field.name;
|
|
1600
1281
|
const fieldValues = field.values;
|
|
1601
|
-
|
|
1602
1282
|
switch (fieldName) {
|
|
1603
|
-
case
|
|
1283
|
+
case "radius":
|
|
1604
1284
|
radius = fieldValues[0];
|
|
1605
1285
|
break;
|
|
1606
|
-
|
|
1607
1286
|
default:
|
|
1608
|
-
console.warn(
|
|
1287
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1609
1288
|
break;
|
|
1610
1289
|
}
|
|
1611
1290
|
}
|
|
1612
|
-
|
|
1613
|
-
const geometry = new SphereGeometry(radius, 16, 16);
|
|
1291
|
+
const geometry = new THREE.SphereGeometry(radius, 16, 16);
|
|
1614
1292
|
return geometry;
|
|
1615
1293
|
}
|
|
1616
|
-
|
|
1617
1294
|
function buildElevationGridNode(node) {
|
|
1618
1295
|
let color;
|
|
1619
1296
|
let normal;
|
|
@@ -1629,118 +1306,87 @@ class VRMLLoader extends Loader {
|
|
|
1629
1306
|
let xSpacing = 1;
|
|
1630
1307
|
let zSpacing = 1;
|
|
1631
1308
|
const fields = node.fields;
|
|
1632
|
-
|
|
1633
1309
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1634
1310
|
const field = fields[i];
|
|
1635
1311
|
const fieldName = field.name;
|
|
1636
1312
|
const fieldValues = field.values;
|
|
1637
|
-
|
|
1638
1313
|
switch (fieldName) {
|
|
1639
|
-
case
|
|
1314
|
+
case "color":
|
|
1640
1315
|
const colorNode = fieldValues[0];
|
|
1641
|
-
|
|
1642
1316
|
if (colorNode !== null) {
|
|
1643
1317
|
color = getNode(colorNode);
|
|
1644
1318
|
}
|
|
1645
|
-
|
|
1646
1319
|
break;
|
|
1647
|
-
|
|
1648
|
-
case 'normal':
|
|
1320
|
+
case "normal":
|
|
1649
1321
|
const normalNode = fieldValues[0];
|
|
1650
|
-
|
|
1651
1322
|
if (normalNode !== null) {
|
|
1652
1323
|
normal = getNode(normalNode);
|
|
1653
1324
|
}
|
|
1654
|
-
|
|
1655
1325
|
break;
|
|
1656
|
-
|
|
1657
|
-
case 'texCoord':
|
|
1326
|
+
case "texCoord":
|
|
1658
1327
|
const texCoordNode = fieldValues[0];
|
|
1659
|
-
|
|
1660
1328
|
if (texCoordNode !== null) {
|
|
1661
1329
|
texCoord = getNode(texCoordNode);
|
|
1662
1330
|
}
|
|
1663
|
-
|
|
1664
1331
|
break;
|
|
1665
|
-
|
|
1666
|
-
case 'height':
|
|
1332
|
+
case "height":
|
|
1667
1333
|
height = fieldValues;
|
|
1668
1334
|
break;
|
|
1669
|
-
|
|
1670
|
-
case 'ccw':
|
|
1335
|
+
case "ccw":
|
|
1671
1336
|
ccw = fieldValues[0];
|
|
1672
1337
|
break;
|
|
1673
|
-
|
|
1674
|
-
case 'colorPerVertex':
|
|
1338
|
+
case "colorPerVertex":
|
|
1675
1339
|
colorPerVertex = fieldValues[0];
|
|
1676
1340
|
break;
|
|
1677
|
-
|
|
1678
|
-
case 'creaseAngle':
|
|
1341
|
+
case "creaseAngle":
|
|
1679
1342
|
creaseAngle = fieldValues[0];
|
|
1680
1343
|
break;
|
|
1681
|
-
|
|
1682
|
-
case 'normalPerVertex':
|
|
1344
|
+
case "normalPerVertex":
|
|
1683
1345
|
normalPerVertex = fieldValues[0];
|
|
1684
1346
|
break;
|
|
1685
|
-
|
|
1686
|
-
case 'solid':
|
|
1347
|
+
case "solid":
|
|
1687
1348
|
solid = fieldValues[0];
|
|
1688
1349
|
break;
|
|
1689
|
-
|
|
1690
|
-
case 'xDimension':
|
|
1350
|
+
case "xDimension":
|
|
1691
1351
|
xDimension = fieldValues[0];
|
|
1692
1352
|
break;
|
|
1693
|
-
|
|
1694
|
-
case 'xSpacing':
|
|
1353
|
+
case "xSpacing":
|
|
1695
1354
|
xSpacing = fieldValues[0];
|
|
1696
1355
|
break;
|
|
1697
|
-
|
|
1698
|
-
case 'zDimension':
|
|
1356
|
+
case "zDimension":
|
|
1699
1357
|
zDimension = fieldValues[0];
|
|
1700
1358
|
break;
|
|
1701
|
-
|
|
1702
|
-
case 'zSpacing':
|
|
1359
|
+
case "zSpacing":
|
|
1703
1360
|
zSpacing = fieldValues[0];
|
|
1704
1361
|
break;
|
|
1705
|
-
|
|
1706
1362
|
default:
|
|
1707
|
-
console.warn(
|
|
1363
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1708
1364
|
break;
|
|
1709
1365
|
}
|
|
1710
|
-
}
|
|
1711
|
-
|
|
1712
|
-
|
|
1366
|
+
}
|
|
1713
1367
|
const vertices = [];
|
|
1714
1368
|
const normals = [];
|
|
1715
1369
|
const colors = [];
|
|
1716
1370
|
const uvs = [];
|
|
1717
|
-
|
|
1718
1371
|
for (let i = 0; i < zDimension; i++) {
|
|
1719
1372
|
for (let j = 0; j < xDimension; j++) {
|
|
1720
|
-
|
|
1721
|
-
const index = i * xDimension + j; // vertices
|
|
1722
|
-
|
|
1373
|
+
const index = i * xDimension + j;
|
|
1723
1374
|
const x = xSpacing * i;
|
|
1724
1375
|
const y = height[index];
|
|
1725
1376
|
const z = zSpacing * j;
|
|
1726
|
-
vertices.push(x, y, z);
|
|
1727
|
-
|
|
1377
|
+
vertices.push(x, y, z);
|
|
1728
1378
|
if (color && colorPerVertex === true) {
|
|
1729
1379
|
const r = color[index * 3 + 0];
|
|
1730
1380
|
const g = color[index * 3 + 1];
|
|
1731
1381
|
const b = color[index * 3 + 2];
|
|
1732
1382
|
colors.push(r, g, b);
|
|
1733
|
-
}
|
|
1734
|
-
|
|
1735
|
-
|
|
1383
|
+
}
|
|
1736
1384
|
if (normal && normalPerVertex === true) {
|
|
1737
1385
|
const xn = normal[index * 3 + 0];
|
|
1738
1386
|
const yn = normal[index * 3 + 1];
|
|
1739
1387
|
const zn = normal[index * 3 + 2];
|
|
1740
1388
|
normals.push(xn, yn, zn);
|
|
1741
|
-
}
|
|
1742
|
-
|
|
1743
|
-
|
|
1389
|
+
}
|
|
1744
1390
|
if (texCoord) {
|
|
1745
1391
|
const s = texCoord[index * 2 + 0];
|
|
1746
1392
|
const t = texCoord[index * 2 + 1];
|
|
@@ -1749,19 +1395,14 @@ class VRMLLoader extends Loader {
|
|
|
1749
1395
|
uvs.push(i / (xDimension - 1), j / (zDimension - 1));
|
|
1750
1396
|
}
|
|
1751
1397
|
}
|
|
1752
|
-
}
|
|
1753
|
-
|
|
1754
|
-
|
|
1398
|
+
}
|
|
1755
1399
|
const indices = [];
|
|
1756
|
-
|
|
1757
1400
|
for (let i = 0; i < xDimension - 1; i++) {
|
|
1758
1401
|
for (let j = 0; j < zDimension - 1; j++) {
|
|
1759
|
-
// from https://tecfa.unige.ch/guides/vrml/vrml97/spec/part1/nodesRef.html#ElevationGrid
|
|
1760
1402
|
const a = i + j * xDimension;
|
|
1761
1403
|
const b = i + (j + 1) * xDimension;
|
|
1762
1404
|
const c = i + 1 + (j + 1) * xDimension;
|
|
1763
|
-
const d = i + 1 + j * xDimension;
|
|
1764
|
-
|
|
1405
|
+
const d = i + 1 + j * xDimension;
|
|
1765
1406
|
if (ccw === true) {
|
|
1766
1407
|
indices.push(a, c, b);
|
|
1767
1408
|
indices.push(c, a, d);
|
|
@@ -1770,14 +1411,11 @@ class VRMLLoader extends Loader {
|
|
|
1770
1411
|
indices.push(c, d, a);
|
|
1771
1412
|
}
|
|
1772
1413
|
}
|
|
1773
|
-
}
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
const positionAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(vertices, 3));
|
|
1777
|
-
const uvAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(uvs, 2));
|
|
1414
|
+
}
|
|
1415
|
+
const positionAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(vertices, 3));
|
|
1416
|
+
const uvAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(uvs, 2));
|
|
1778
1417
|
let colorAttribute;
|
|
1779
|
-
let normalAttribute;
|
|
1780
|
-
|
|
1418
|
+
let normalAttribute;
|
|
1781
1419
|
if (color) {
|
|
1782
1420
|
if (colorPerVertex === false) {
|
|
1783
1421
|
for (let i = 0; i < xDimension - 1; i++) {
|
|
@@ -1785,8 +1423,7 @@ class VRMLLoader extends Loader {
|
|
|
1785
1423
|
const index = i + j * (xDimension - 1);
|
|
1786
1424
|
const r = color[index * 3 + 0];
|
|
1787
1425
|
const g = color[index * 3 + 1];
|
|
1788
|
-
const b = color[index * 3 + 2];
|
|
1789
|
-
|
|
1426
|
+
const b = color[index * 3 + 2];
|
|
1790
1427
|
colors.push(r, g, b);
|
|
1791
1428
|
colors.push(r, g, b);
|
|
1792
1429
|
colors.push(r, g, b);
|
|
@@ -1795,14 +1432,11 @@ class VRMLLoader extends Loader {
|
|
|
1795
1432
|
colors.push(r, g, b);
|
|
1796
1433
|
}
|
|
1797
1434
|
}
|
|
1798
|
-
|
|
1799
|
-
colorAttribute = new Float32BufferAttribute(colors, 3);
|
|
1435
|
+
colorAttribute = new THREE.Float32BufferAttribute(colors, 3);
|
|
1800
1436
|
} else {
|
|
1801
|
-
colorAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(colors, 3));
|
|
1437
|
+
colorAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(colors, 3));
|
|
1802
1438
|
}
|
|
1803
|
-
}
|
|
1804
|
-
|
|
1805
|
-
|
|
1439
|
+
}
|
|
1806
1440
|
if (normal) {
|
|
1807
1441
|
if (normalPerVertex === false) {
|
|
1808
1442
|
for (let i = 0; i < xDimension - 1; i++) {
|
|
@@ -1810,8 +1444,7 @@ class VRMLLoader extends Loader {
|
|
|
1810
1444
|
const index = i + j * (xDimension - 1);
|
|
1811
1445
|
const xn = normal[index * 3 + 0];
|
|
1812
1446
|
const yn = normal[index * 3 + 1];
|
|
1813
|
-
const zn = normal[index * 3 + 2];
|
|
1814
|
-
|
|
1447
|
+
const zn = normal[index * 3 + 2];
|
|
1815
1448
|
normals.push(xn, yn, zn);
|
|
1816
1449
|
normals.push(xn, yn, zn);
|
|
1817
1450
|
normals.push(xn, yn, zn);
|
|
@@ -1820,27 +1453,23 @@ class VRMLLoader extends Loader {
|
|
|
1820
1453
|
normals.push(xn, yn, zn);
|
|
1821
1454
|
}
|
|
1822
1455
|
}
|
|
1823
|
-
|
|
1824
|
-
normalAttribute = new Float32BufferAttribute(normals, 3);
|
|
1456
|
+
normalAttribute = new THREE.Float32BufferAttribute(normals, 3);
|
|
1825
1457
|
} else {
|
|
1826
|
-
normalAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(normals, 3));
|
|
1458
|
+
normalAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(normals, 3));
|
|
1827
1459
|
}
|
|
1828
1460
|
} else {
|
|
1829
1461
|
normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle);
|
|
1830
|
-
}
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
geometry.setAttribute(
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
if (colorAttribute) geometry.setAttribute('color', colorAttribute); // "solid" influences the material so let's store it for later use
|
|
1838
|
-
|
|
1462
|
+
}
|
|
1463
|
+
const geometry = new THREE.BufferGeometry();
|
|
1464
|
+
geometry.setAttribute("position", positionAttribute);
|
|
1465
|
+
geometry.setAttribute("normal", normalAttribute);
|
|
1466
|
+
geometry.setAttribute("uv", uvAttribute);
|
|
1467
|
+
if (colorAttribute)
|
|
1468
|
+
geometry.setAttribute("color", colorAttribute);
|
|
1839
1469
|
geometry._solid = solid;
|
|
1840
|
-
geometry._type =
|
|
1470
|
+
geometry._type = "mesh";
|
|
1841
1471
|
return geometry;
|
|
1842
1472
|
}
|
|
1843
|
-
|
|
1844
1473
|
function buildExtrusionNode(node) {
|
|
1845
1474
|
let crossSection = [1, 1, 1, -1, -1, -1, -1, 1, 1, 1];
|
|
1846
1475
|
let spine = [0, 0, 0, 0, 1, 0];
|
|
@@ -1852,69 +1481,52 @@ class VRMLLoader extends Loader {
|
|
|
1852
1481
|
let endCap = true;
|
|
1853
1482
|
let solid = true;
|
|
1854
1483
|
const fields = node.fields;
|
|
1855
|
-
|
|
1856
1484
|
for (let i = 0, l = fields.length; i < l; i++) {
|
|
1857
1485
|
const field = fields[i];
|
|
1858
1486
|
const fieldName = field.name;
|
|
1859
1487
|
const fieldValues = field.values;
|
|
1860
|
-
|
|
1861
1488
|
switch (fieldName) {
|
|
1862
|
-
case
|
|
1489
|
+
case "beginCap":
|
|
1863
1490
|
beginCap = fieldValues[0];
|
|
1864
1491
|
break;
|
|
1865
|
-
|
|
1866
|
-
case 'ccw':
|
|
1492
|
+
case "ccw":
|
|
1867
1493
|
ccw = fieldValues[0];
|
|
1868
1494
|
break;
|
|
1869
|
-
|
|
1870
|
-
case 'convex':
|
|
1871
|
-
// field not supported
|
|
1495
|
+
case "convex":
|
|
1872
1496
|
break;
|
|
1873
|
-
|
|
1874
|
-
case 'creaseAngle':
|
|
1497
|
+
case "creaseAngle":
|
|
1875
1498
|
creaseAngle = fieldValues[0];
|
|
1876
1499
|
break;
|
|
1877
|
-
|
|
1878
|
-
case 'crossSection':
|
|
1500
|
+
case "crossSection":
|
|
1879
1501
|
crossSection = fieldValues;
|
|
1880
1502
|
break;
|
|
1881
|
-
|
|
1882
|
-
case 'endCap':
|
|
1503
|
+
case "endCap":
|
|
1883
1504
|
endCap = fieldValues[0];
|
|
1884
1505
|
break;
|
|
1885
|
-
|
|
1886
|
-
case 'orientation':
|
|
1506
|
+
case "orientation":
|
|
1887
1507
|
orientation = fieldValues;
|
|
1888
1508
|
break;
|
|
1889
|
-
|
|
1890
|
-
case 'scale':
|
|
1509
|
+
case "scale":
|
|
1891
1510
|
scale = fieldValues;
|
|
1892
1511
|
break;
|
|
1893
|
-
|
|
1894
|
-
case 'solid':
|
|
1512
|
+
case "solid":
|
|
1895
1513
|
solid = fieldValues[0];
|
|
1896
1514
|
break;
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
spine = fieldValues; // only extrusion along the Y-axis are supported so far
|
|
1900
|
-
|
|
1515
|
+
case "spine":
|
|
1516
|
+
spine = fieldValues;
|
|
1901
1517
|
break;
|
|
1902
|
-
|
|
1903
1518
|
default:
|
|
1904
|
-
console.warn(
|
|
1519
|
+
console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
|
|
1905
1520
|
break;
|
|
1906
1521
|
}
|
|
1907
1522
|
}
|
|
1908
|
-
|
|
1909
|
-
const crossSectionClosed = crossSection[0] === crossSection[crossSection.length - 2] && crossSection[1] === crossSection[crossSection.length - 1]; // vertices
|
|
1910
|
-
|
|
1523
|
+
const crossSectionClosed = crossSection[0] === crossSection[crossSection.length - 2] && crossSection[1] === crossSection[crossSection.length - 1];
|
|
1911
1524
|
const vertices = [];
|
|
1912
|
-
const spineVector = new Vector3();
|
|
1913
|
-
const scaling = new Vector3();
|
|
1914
|
-
const axis = new Vector3();
|
|
1915
|
-
const vertex = new Vector3();
|
|
1916
|
-
const quaternion = new Quaternion();
|
|
1917
|
-
|
|
1525
|
+
const spineVector = new THREE.Vector3();
|
|
1526
|
+
const scaling = new THREE.Vector3();
|
|
1527
|
+
const axis = new THREE.Vector3();
|
|
1528
|
+
const vertex = new THREE.Vector3();
|
|
1529
|
+
const quaternion = new THREE.Quaternion();
|
|
1918
1530
|
for (let i = 0, j = 0, o = 0, il = spine.length; i < il; i += 3, j += 2, o += 4) {
|
|
1919
1531
|
spineVector.fromArray(spine, i);
|
|
1920
1532
|
scaling.x = scale ? scale[j + 0] : 1;
|
|
@@ -1924,39 +1536,30 @@ class VRMLLoader extends Loader {
|
|
|
1924
1536
|
axis.y = orientation ? orientation[o + 1] : 0;
|
|
1925
1537
|
axis.z = orientation ? orientation[o + 2] : 1;
|
|
1926
1538
|
const angle = orientation ? orientation[o + 3] : 0;
|
|
1927
|
-
|
|
1928
1539
|
for (let k = 0, kl = crossSection.length; k < kl; k += 2) {
|
|
1929
1540
|
vertex.x = crossSection[k + 0];
|
|
1930
1541
|
vertex.y = 0;
|
|
1931
|
-
vertex.z = crossSection[k + 1];
|
|
1932
|
-
|
|
1933
|
-
vertex.multiply(scaling); // rotate
|
|
1934
|
-
|
|
1542
|
+
vertex.z = crossSection[k + 1];
|
|
1543
|
+
vertex.multiply(scaling);
|
|
1935
1544
|
quaternion.setFromAxisAngle(axis, angle);
|
|
1936
|
-
vertex.applyQuaternion(quaternion);
|
|
1937
|
-
|
|
1545
|
+
vertex.applyQuaternion(quaternion);
|
|
1938
1546
|
vertex.add(spineVector);
|
|
1939
1547
|
vertices.push(vertex.x, vertex.y, vertex.z);
|
|
1940
1548
|
}
|
|
1941
|
-
}
|
|
1942
|
-
|
|
1943
|
-
|
|
1549
|
+
}
|
|
1944
1550
|
const indices = [];
|
|
1945
1551
|
const spineCount = spine.length / 3;
|
|
1946
1552
|
const crossSectionCount = crossSection.length / 2;
|
|
1947
|
-
|
|
1948
1553
|
for (let i = 0; i < spineCount - 1; i++) {
|
|
1949
1554
|
for (let j = 0; j < crossSectionCount - 1; j++) {
|
|
1950
1555
|
const a = j + i * crossSectionCount;
|
|
1951
1556
|
let b = j + 1 + i * crossSectionCount;
|
|
1952
1557
|
const c = j + (i + 1) * crossSectionCount;
|
|
1953
1558
|
let d = j + 1 + (i + 1) * crossSectionCount;
|
|
1954
|
-
|
|
1955
1559
|
if (j === crossSectionCount - 2 && crossSectionClosed === true) {
|
|
1956
1560
|
b = i * crossSectionCount;
|
|
1957
1561
|
d = (i + 1) * crossSectionCount;
|
|
1958
1562
|
}
|
|
1959
|
-
|
|
1960
1563
|
if (ccw === true) {
|
|
1961
1564
|
indices.push(a, b, c);
|
|
1962
1565
|
indices.push(c, b, d);
|
|
@@ -1965,25 +1568,18 @@ class VRMLLoader extends Loader {
|
|
|
1965
1568
|
indices.push(c, d, b);
|
|
1966
1569
|
}
|
|
1967
1570
|
}
|
|
1968
|
-
}
|
|
1969
|
-
|
|
1970
|
-
|
|
1571
|
+
}
|
|
1971
1572
|
if (beginCap === true || endCap === true) {
|
|
1972
1573
|
const contour = [];
|
|
1973
|
-
|
|
1974
1574
|
for (let i = 0, l = crossSection.length; i < l; i += 2) {
|
|
1975
|
-
contour.push(new Vector2(crossSection[i], crossSection[i + 1]));
|
|
1575
|
+
contour.push(new THREE.Vector2(crossSection[i], crossSection[i + 1]));
|
|
1976
1576
|
}
|
|
1977
|
-
|
|
1978
|
-
const faces = ShapeUtils.triangulateShape(contour, []);
|
|
1577
|
+
const faces = THREE.ShapeUtils.triangulateShape(contour, []);
|
|
1979
1578
|
const capIndices = [];
|
|
1980
|
-
|
|
1981
1579
|
for (let i = 0, l = faces.length; i < l; i++) {
|
|
1982
1580
|
const face = faces[i];
|
|
1983
1581
|
capIndices.push(face[0], face[1], face[2]);
|
|
1984
|
-
}
|
|
1985
|
-
|
|
1986
|
-
|
|
1582
|
+
}
|
|
1987
1583
|
if (beginCap === true) {
|
|
1988
1584
|
for (let i = 0, l = capIndices.length; i < l; i += 3) {
|
|
1989
1585
|
if (ccw === true) {
|
|
@@ -1992,228 +1588,185 @@ class VRMLLoader extends Loader {
|
|
|
1992
1588
|
indices.push(capIndices[i + 0], capIndices[i + 2], capIndices[i + 1]);
|
|
1993
1589
|
}
|
|
1994
1590
|
}
|
|
1995
|
-
}
|
|
1996
|
-
|
|
1997
|
-
|
|
1591
|
+
}
|
|
1998
1592
|
if (endCap === true) {
|
|
1999
|
-
const indexOffset = crossSectionCount * (spineCount - 1);
|
|
2000
|
-
|
|
1593
|
+
const indexOffset = crossSectionCount * (spineCount - 1);
|
|
2001
1594
|
for (let i = 0, l = capIndices.length; i < l; i += 3) {
|
|
2002
1595
|
if (ccw === true) {
|
|
2003
|
-
indices.push(
|
|
1596
|
+
indices.push(
|
|
1597
|
+
indexOffset + capIndices[i + 0],
|
|
1598
|
+
indexOffset + capIndices[i + 2],
|
|
1599
|
+
indexOffset + capIndices[i + 1]
|
|
1600
|
+
);
|
|
2004
1601
|
} else {
|
|
2005
|
-
indices.push(
|
|
1602
|
+
indices.push(
|
|
1603
|
+
indexOffset + capIndices[i + 0],
|
|
1604
|
+
indexOffset + capIndices[i + 1],
|
|
1605
|
+
indexOffset + capIndices[i + 2]
|
|
1606
|
+
);
|
|
2006
1607
|
}
|
|
2007
1608
|
}
|
|
2008
1609
|
}
|
|
2009
1610
|
}
|
|
2010
|
-
|
|
2011
|
-
const positionAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(vertices, 3));
|
|
1611
|
+
const positionAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(vertices, 3));
|
|
2012
1612
|
const normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle);
|
|
2013
|
-
const geometry = new BufferGeometry();
|
|
2014
|
-
geometry.setAttribute(
|
|
2015
|
-
geometry.setAttribute(
|
|
2016
|
-
// "solid" influences the material so let's store it for later use
|
|
2017
|
-
|
|
1613
|
+
const geometry = new THREE.BufferGeometry();
|
|
1614
|
+
geometry.setAttribute("position", positionAttribute);
|
|
1615
|
+
geometry.setAttribute("normal", normalAttribute);
|
|
2018
1616
|
geometry._solid = solid;
|
|
2019
|
-
geometry._type =
|
|
1617
|
+
geometry._type = "mesh";
|
|
2020
1618
|
return geometry;
|
|
2021
|
-
}
|
|
2022
|
-
|
|
2023
|
-
|
|
1619
|
+
}
|
|
2024
1620
|
function resolveUSE(identifier) {
|
|
2025
1621
|
const node = nodeMap[identifier];
|
|
2026
|
-
const build = getNode(node);
|
|
2027
|
-
// materials can be influenced by the geometry (e.g. vertex normals). cloning is necessary to avoid
|
|
2028
|
-
// any side effects
|
|
2029
|
-
|
|
1622
|
+
const build = getNode(node);
|
|
2030
1623
|
return build.isObject3D || build.isMaterial ? build.clone() : build;
|
|
2031
1624
|
}
|
|
2032
|
-
|
|
2033
1625
|
function parseFieldChildren(children, owner) {
|
|
2034
1626
|
for (let i = 0, l = children.length; i < l; i++) {
|
|
2035
1627
|
const object = getNode(children[i]);
|
|
2036
|
-
if (object instanceof Object3D)
|
|
1628
|
+
if (object instanceof THREE.Object3D)
|
|
1629
|
+
owner.add(object);
|
|
2037
1630
|
}
|
|
2038
1631
|
}
|
|
2039
|
-
|
|
2040
1632
|
function triangulateFaceIndex(index, ccw) {
|
|
2041
|
-
const indices = [];
|
|
2042
|
-
// perform a simple triangulation
|
|
2043
|
-
|
|
1633
|
+
const indices = [];
|
|
2044
1634
|
let start = 0;
|
|
2045
|
-
|
|
2046
1635
|
for (let i = 0, l = index.length; i < l; i++) {
|
|
2047
1636
|
const i1 = index[start];
|
|
2048
1637
|
const i2 = index[i + (ccw ? 1 : 2)];
|
|
2049
1638
|
const i3 = index[i + (ccw ? 2 : 1)];
|
|
2050
|
-
indices.push(i1, i2, i3);
|
|
2051
|
-
|
|
1639
|
+
indices.push(i1, i2, i3);
|
|
2052
1640
|
if (index[i + 3] === -1 || i + 3 >= l) {
|
|
2053
1641
|
i += 3;
|
|
2054
1642
|
start = i + 1;
|
|
2055
1643
|
}
|
|
2056
1644
|
}
|
|
2057
|
-
|
|
2058
1645
|
return indices;
|
|
2059
1646
|
}
|
|
2060
|
-
|
|
2061
|
-
function triangulateFaceData(data, index) {
|
|
1647
|
+
function triangulateFaceData(data2, index) {
|
|
2062
1648
|
const triangulatedData = [];
|
|
2063
1649
|
let start = 0;
|
|
2064
|
-
|
|
2065
1650
|
for (let i = 0, l = index.length; i < l; i++) {
|
|
2066
1651
|
const stride = start * 3;
|
|
2067
|
-
const x =
|
|
2068
|
-
const y =
|
|
2069
|
-
const z =
|
|
2070
|
-
triangulatedData.push(x, y, z);
|
|
2071
|
-
|
|
1652
|
+
const x = data2[stride];
|
|
1653
|
+
const y = data2[stride + 1];
|
|
1654
|
+
const z = data2[stride + 2];
|
|
1655
|
+
triangulatedData.push(x, y, z);
|
|
2072
1656
|
if (index[i + 3] === -1 || i + 3 >= l) {
|
|
2073
1657
|
i += 3;
|
|
2074
1658
|
start++;
|
|
2075
1659
|
}
|
|
2076
1660
|
}
|
|
2077
|
-
|
|
2078
1661
|
return triangulatedData;
|
|
2079
1662
|
}
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
const flattenData = [];
|
|
2083
|
-
|
|
1663
|
+
function flattenData(data2, index) {
|
|
1664
|
+
const flattenData2 = [];
|
|
2084
1665
|
for (let i = 0, l = index.length; i < l; i++) {
|
|
2085
1666
|
const i1 = index[i];
|
|
2086
1667
|
const stride = i1 * 3;
|
|
2087
|
-
const x =
|
|
2088
|
-
const y =
|
|
2089
|
-
const z =
|
|
2090
|
-
|
|
1668
|
+
const x = data2[stride];
|
|
1669
|
+
const y = data2[stride + 1];
|
|
1670
|
+
const z = data2[stride + 2];
|
|
1671
|
+
flattenData2.push(x, y, z);
|
|
2091
1672
|
}
|
|
2092
|
-
|
|
2093
|
-
return flattenData;
|
|
1673
|
+
return flattenData2;
|
|
2094
1674
|
}
|
|
2095
|
-
|
|
2096
1675
|
function expandLineIndex(index) {
|
|
2097
1676
|
const indices = [];
|
|
2098
|
-
|
|
2099
1677
|
for (let i = 0, l = index.length; i < l; i++) {
|
|
2100
1678
|
const i1 = index[i];
|
|
2101
1679
|
const i2 = index[i + 1];
|
|
2102
|
-
indices.push(i1, i2);
|
|
2103
|
-
|
|
1680
|
+
indices.push(i1, i2);
|
|
2104
1681
|
if (index[i + 2] === -1 || i + 2 >= l) {
|
|
2105
1682
|
i += 2;
|
|
2106
1683
|
}
|
|
2107
1684
|
}
|
|
2108
|
-
|
|
2109
1685
|
return indices;
|
|
2110
1686
|
}
|
|
2111
|
-
|
|
2112
|
-
function expandLineData(data, index) {
|
|
1687
|
+
function expandLineData(data2, index) {
|
|
2113
1688
|
const triangulatedData = [];
|
|
2114
1689
|
let start = 0;
|
|
2115
|
-
|
|
2116
1690
|
for (let i = 0, l = index.length; i < l; i++) {
|
|
2117
1691
|
const stride = start * 3;
|
|
2118
|
-
const x =
|
|
2119
|
-
const y =
|
|
2120
|
-
const z =
|
|
2121
|
-
triangulatedData.push(x, y, z);
|
|
2122
|
-
|
|
1692
|
+
const x = data2[stride];
|
|
1693
|
+
const y = data2[stride + 1];
|
|
1694
|
+
const z = data2[stride + 2];
|
|
1695
|
+
triangulatedData.push(x, y, z);
|
|
2123
1696
|
if (index[i + 2] === -1 || i + 2 >= l) {
|
|
2124
1697
|
i += 2;
|
|
2125
1698
|
start++;
|
|
2126
1699
|
}
|
|
2127
1700
|
}
|
|
2128
|
-
|
|
2129
1701
|
return triangulatedData;
|
|
2130
1702
|
}
|
|
2131
|
-
|
|
2132
|
-
const
|
|
2133
|
-
const
|
|
2134
|
-
const
|
|
2135
|
-
const
|
|
2136
|
-
const
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
function computeAttributeFromIndexedData(coordIndex, index, data, itemSize) {
|
|
2140
|
-
const array = []; // we use the coordIndex.length as delimiter since normalIndex must contain at least as many indices
|
|
2141
|
-
|
|
1703
|
+
const vA = new THREE.Vector3();
|
|
1704
|
+
const vB = new THREE.Vector3();
|
|
1705
|
+
const vC = new THREE.Vector3();
|
|
1706
|
+
const uvA = new THREE.Vector2();
|
|
1707
|
+
const uvB = new THREE.Vector2();
|
|
1708
|
+
const uvC = new THREE.Vector2();
|
|
1709
|
+
function computeAttributeFromIndexedData(coordIndex, index, data2, itemSize) {
|
|
1710
|
+
const array = [];
|
|
2142
1711
|
for (let i = 0, l = coordIndex.length; i < l; i += 3) {
|
|
2143
1712
|
const a = index[i];
|
|
2144
1713
|
const b = index[i + 1];
|
|
2145
1714
|
const c = index[i + 2];
|
|
2146
|
-
|
|
2147
1715
|
if (itemSize === 2) {
|
|
2148
|
-
uvA.fromArray(
|
|
2149
|
-
uvB.fromArray(
|
|
2150
|
-
uvC.fromArray(
|
|
1716
|
+
uvA.fromArray(data2, a * itemSize);
|
|
1717
|
+
uvB.fromArray(data2, b * itemSize);
|
|
1718
|
+
uvC.fromArray(data2, c * itemSize);
|
|
2151
1719
|
array.push(uvA.x, uvA.y);
|
|
2152
1720
|
array.push(uvB.x, uvB.y);
|
|
2153
1721
|
array.push(uvC.x, uvC.y);
|
|
2154
1722
|
} else {
|
|
2155
|
-
vA.fromArray(
|
|
2156
|
-
vB.fromArray(
|
|
2157
|
-
vC.fromArray(
|
|
1723
|
+
vA.fromArray(data2, a * itemSize);
|
|
1724
|
+
vB.fromArray(data2, b * itemSize);
|
|
1725
|
+
vC.fromArray(data2, c * itemSize);
|
|
2158
1726
|
array.push(vA.x, vA.y, vA.z);
|
|
2159
1727
|
array.push(vB.x, vB.y, vB.z);
|
|
2160
1728
|
array.push(vC.x, vC.y, vC.z);
|
|
2161
1729
|
}
|
|
2162
1730
|
}
|
|
2163
|
-
|
|
2164
|
-
return new Float32BufferAttribute(array, itemSize);
|
|
1731
|
+
return new THREE.Float32BufferAttribute(array, itemSize);
|
|
2165
1732
|
}
|
|
2166
|
-
|
|
2167
1733
|
function computeAttributeFromFaceData(index, faceData) {
|
|
2168
1734
|
const array = [];
|
|
2169
|
-
|
|
2170
1735
|
for (let i = 0, j = 0, l = index.length; i < l; i += 3, j++) {
|
|
2171
1736
|
vA.fromArray(faceData, j * 3);
|
|
2172
1737
|
array.push(vA.x, vA.y, vA.z);
|
|
2173
1738
|
array.push(vA.x, vA.y, vA.z);
|
|
2174
1739
|
array.push(vA.x, vA.y, vA.z);
|
|
2175
1740
|
}
|
|
2176
|
-
|
|
2177
|
-
return new Float32BufferAttribute(array, 3);
|
|
1741
|
+
return new THREE.Float32BufferAttribute(array, 3);
|
|
2178
1742
|
}
|
|
2179
|
-
|
|
2180
1743
|
function computeAttributeFromLineData(index, lineData) {
|
|
2181
1744
|
const array = [];
|
|
2182
|
-
|
|
2183
1745
|
for (let i = 0, j = 0, l = index.length; i < l; i += 2, j++) {
|
|
2184
1746
|
vA.fromArray(lineData, j * 3);
|
|
2185
1747
|
array.push(vA.x, vA.y, vA.z);
|
|
2186
1748
|
array.push(vA.x, vA.y, vA.z);
|
|
2187
1749
|
}
|
|
2188
|
-
|
|
2189
|
-
return new Float32BufferAttribute(array, 3);
|
|
1750
|
+
return new THREE.Float32BufferAttribute(array, 3);
|
|
2190
1751
|
}
|
|
2191
|
-
|
|
2192
1752
|
function toNonIndexedAttribute(indices, attribute) {
|
|
2193
1753
|
const array = attribute.array;
|
|
2194
1754
|
const itemSize = attribute.itemSize;
|
|
2195
1755
|
const array2 = new array.constructor(indices.length * itemSize);
|
|
2196
|
-
let index = 0,
|
|
2197
|
-
index2 = 0;
|
|
2198
|
-
|
|
1756
|
+
let index = 0, index2 = 0;
|
|
2199
1757
|
for (let i = 0, l = indices.length; i < l; i++) {
|
|
2200
1758
|
index = indices[i] * itemSize;
|
|
2201
|
-
|
|
2202
1759
|
for (let j = 0; j < itemSize; j++) {
|
|
2203
1760
|
array2[index2++] = array[index++];
|
|
2204
1761
|
}
|
|
2205
1762
|
}
|
|
2206
|
-
|
|
2207
|
-
return new Float32BufferAttribute(array2, itemSize);
|
|
1763
|
+
return new THREE.Float32BufferAttribute(array2, itemSize);
|
|
2208
1764
|
}
|
|
2209
|
-
|
|
2210
|
-
const
|
|
2211
|
-
const cb = new Vector3();
|
|
2212
|
-
|
|
1765
|
+
const ab = new THREE.Vector3();
|
|
1766
|
+
const cb = new THREE.Vector3();
|
|
2213
1767
|
function computeNormalAttribute(index, coord, creaseAngle) {
|
|
2214
1768
|
const faces = [];
|
|
2215
|
-
const vertexNormals = {};
|
|
2216
|
-
|
|
1769
|
+
const vertexNormals = {};
|
|
2217
1770
|
for (let i = 0, l = index.length; i < l; i += 3) {
|
|
2218
1771
|
const a = index[i];
|
|
2219
1772
|
const b = index[i + 1];
|
|
@@ -2227,18 +1780,18 @@ class VRMLLoader extends Loader {
|
|
|
2227
1780
|
cb.cross(ab);
|
|
2228
1781
|
cb.normalize();
|
|
2229
1782
|
face.normal.copy(cb);
|
|
2230
|
-
if (vertexNormals[a] ===
|
|
2231
|
-
|
|
2232
|
-
if (vertexNormals[
|
|
1783
|
+
if (vertexNormals[a] === void 0)
|
|
1784
|
+
vertexNormals[a] = [];
|
|
1785
|
+
if (vertexNormals[b] === void 0)
|
|
1786
|
+
vertexNormals[b] = [];
|
|
1787
|
+
if (vertexNormals[c] === void 0)
|
|
1788
|
+
vertexNormals[c] = [];
|
|
2233
1789
|
vertexNormals[a].push(face.normal);
|
|
2234
1790
|
vertexNormals[b].push(face.normal);
|
|
2235
1791
|
vertexNormals[c].push(face.normal);
|
|
2236
1792
|
faces.push(face);
|
|
2237
|
-
}
|
|
2238
|
-
|
|
2239
|
-
|
|
1793
|
+
}
|
|
2240
1794
|
const normals = [];
|
|
2241
|
-
|
|
2242
1795
|
for (let i = 0, l = faces.length; i < l; i++) {
|
|
2243
1796
|
const face = faces[i];
|
|
2244
1797
|
const nA = weightedNormal(vertexNormals[face.a], face.normal, creaseAngle);
|
|
@@ -2251,13 +1804,10 @@ class VRMLLoader extends Loader {
|
|
|
2251
1804
|
normals.push(nB.x, nB.y, nB.z);
|
|
2252
1805
|
normals.push(nC.x, nC.y, nC.z);
|
|
2253
1806
|
}
|
|
2254
|
-
|
|
2255
|
-
return new Float32BufferAttribute(normals, 3);
|
|
1807
|
+
return new THREE.Float32BufferAttribute(normals, 3);
|
|
2256
1808
|
}
|
|
2257
|
-
|
|
2258
1809
|
function weightedNormal(normals, vector, creaseAngle) {
|
|
2259
|
-
const normal = new Vector3();
|
|
2260
|
-
|
|
1810
|
+
const normal = new THREE.Vector3();
|
|
2261
1811
|
if (creaseAngle === 0) {
|
|
2262
1812
|
normal.copy(vector);
|
|
2263
1813
|
} else {
|
|
@@ -2267,284 +1817,257 @@ class VRMLLoader extends Loader {
|
|
|
2267
1817
|
}
|
|
2268
1818
|
}
|
|
2269
1819
|
}
|
|
2270
|
-
|
|
2271
1820
|
return normal.normalize();
|
|
2272
1821
|
}
|
|
2273
|
-
|
|
2274
1822
|
function toColorArray(colors) {
|
|
2275
1823
|
const array = [];
|
|
2276
|
-
|
|
2277
1824
|
for (let i = 0, l = colors.length; i < l; i += 3) {
|
|
2278
|
-
array.push(new Color(colors[i], colors[i + 1], colors[i + 2]));
|
|
1825
|
+
array.push(new THREE.Color(colors[i], colors[i + 1], colors[i + 2]));
|
|
2279
1826
|
}
|
|
2280
|
-
|
|
2281
1827
|
return array;
|
|
2282
1828
|
}
|
|
2283
|
-
/**
|
|
2284
|
-
* Vertically paints the faces interpolating between the
|
|
2285
|
-
* specified colors at the specified angels. This is used for the Background
|
|
2286
|
-
* node, but could be applied to other nodes with multiple faces as well.
|
|
2287
|
-
*
|
|
2288
|
-
* When used with the Background node, default is directionIsDown is true if
|
|
2289
|
-
* interpolating the skyColor down from the Zenith. When interpolationg up from
|
|
2290
|
-
* the Nadir i.e. interpolating the groundColor, the directionIsDown is false.
|
|
2291
|
-
*
|
|
2292
|
-
* The first angle is never specified, it is the Zenith (0 rad). Angles are specified
|
|
2293
|
-
* in radians. The geometry is thought a sphere, but could be anything. The color interpolation
|
|
2294
|
-
* is linear along the Y axis in any case.
|
|
2295
|
-
*
|
|
2296
|
-
* You must specify one more color than you have angles at the beginning of the colors array.
|
|
2297
|
-
* This is the color of the Zenith (the top of the shape).
|
|
2298
|
-
*
|
|
2299
|
-
* @param {BufferGeometry} geometry
|
|
2300
|
-
* @param {number} radius
|
|
2301
|
-
* @param {array} angles
|
|
2302
|
-
* @param {array} colors
|
|
2303
|
-
* @param {boolean} topDown - Whether to work top down or bottom up.
|
|
2304
|
-
*/
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
1829
|
function paintFaces(geometry, radius, angles, colors, topDown) {
|
|
2308
|
-
// compute threshold values
|
|
2309
1830
|
const thresholds = [];
|
|
2310
1831
|
const startAngle = topDown === true ? 0 : Math.PI;
|
|
2311
|
-
|
|
2312
1832
|
for (let i = 0, l = colors.length; i < l; i++) {
|
|
2313
1833
|
let angle = i === 0 ? 0 : angles[i - 1];
|
|
2314
1834
|
angle = topDown === true ? angle : startAngle - angle;
|
|
2315
|
-
const point = new Vector3();
|
|
1835
|
+
const point = new THREE.Vector3();
|
|
2316
1836
|
point.setFromSphericalCoords(radius, angle, 0);
|
|
2317
1837
|
thresholds.push(point);
|
|
2318
|
-
}
|
|
2319
|
-
|
|
2320
|
-
|
|
1838
|
+
}
|
|
2321
1839
|
const indices = geometry.index;
|
|
2322
1840
|
const positionAttribute = geometry.attributes.position;
|
|
2323
|
-
const colorAttribute = new BufferAttribute(new Float32Array(geometry.attributes.position.count * 3), 3);
|
|
2324
|
-
const position = new Vector3();
|
|
2325
|
-
const color = new Color();
|
|
2326
|
-
|
|
1841
|
+
const colorAttribute = new THREE.BufferAttribute(new Float32Array(geometry.attributes.position.count * 3), 3);
|
|
1842
|
+
const position = new THREE.Vector3();
|
|
1843
|
+
const color = new THREE.Color();
|
|
2327
1844
|
for (let i = 0; i < indices.count; i++) {
|
|
2328
1845
|
const index = indices.getX(i);
|
|
2329
1846
|
position.fromBufferAttribute(positionAttribute, index);
|
|
2330
1847
|
let thresholdIndexA, thresholdIndexB;
|
|
2331
1848
|
let t = 1;
|
|
2332
|
-
|
|
2333
1849
|
for (let j = 1; j < thresholds.length; j++) {
|
|
2334
1850
|
thresholdIndexA = j - 1;
|
|
2335
1851
|
thresholdIndexB = j;
|
|
2336
1852
|
const thresholdA = thresholds[thresholdIndexA];
|
|
2337
1853
|
const thresholdB = thresholds[thresholdIndexB];
|
|
2338
|
-
|
|
2339
1854
|
if (topDown === true) {
|
|
2340
|
-
// interpolation for sky color
|
|
2341
1855
|
if (position.y <= thresholdA.y && position.y > thresholdB.y) {
|
|
2342
1856
|
t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y);
|
|
2343
1857
|
break;
|
|
2344
1858
|
}
|
|
2345
1859
|
} else {
|
|
2346
|
-
// interpolation for ground color
|
|
2347
1860
|
if (position.y >= thresholdA.y && position.y < thresholdB.y) {
|
|
2348
1861
|
t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y);
|
|
2349
1862
|
break;
|
|
2350
1863
|
}
|
|
2351
1864
|
}
|
|
2352
1865
|
}
|
|
2353
|
-
|
|
2354
1866
|
const colorA = colors[thresholdIndexA];
|
|
2355
1867
|
const colorB = colors[thresholdIndexB];
|
|
2356
1868
|
color.copy(colorA).lerp(colorB, t);
|
|
2357
1869
|
colorAttribute.setXYZ(index, color.r, color.g, color.b);
|
|
2358
1870
|
}
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
if (data.indexOf('#VRML V2.0') === -1) {
|
|
2368
|
-
throw Error('THREE.VRMLLexer: Version of VRML asset not supported.');
|
|
2369
|
-
} // create JSON representing the tree structure of the VRML asset
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
const tree = generateVRMLTree(data); // parse the tree structure to a three.js scene
|
|
2373
|
-
|
|
1871
|
+
geometry.setAttribute("color", colorAttribute);
|
|
1872
|
+
}
|
|
1873
|
+
const textureLoader = new THREE.TextureLoader(this.manager);
|
|
1874
|
+
textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
|
|
1875
|
+
if (data.indexOf("#VRML V2.0") === -1) {
|
|
1876
|
+
throw Error("THREE.VRMLLexer: Version of VRML asset not supported.");
|
|
1877
|
+
}
|
|
1878
|
+
const tree = generateVRMLTree(data);
|
|
2374
1879
|
const scene = parseTree(tree);
|
|
2375
1880
|
return scene;
|
|
2376
1881
|
}
|
|
2377
|
-
|
|
2378
1882
|
}
|
|
2379
|
-
|
|
2380
1883
|
class VRMLLexer {
|
|
2381
1884
|
constructor(tokens) {
|
|
2382
|
-
this.lexer = new Lexer(tokens);
|
|
1885
|
+
this.lexer = new chevrotain.Lexer(tokens);
|
|
2383
1886
|
}
|
|
2384
|
-
|
|
2385
1887
|
lex(inputText) {
|
|
2386
1888
|
const lexingResult = this.lexer.tokenize(inputText);
|
|
2387
|
-
|
|
2388
1889
|
if (lexingResult.errors.length > 0) {
|
|
2389
1890
|
console.error(lexingResult.errors);
|
|
2390
|
-
throw Error(
|
|
1891
|
+
throw Error("THREE.VRMLLexer: Lexing errors detected.");
|
|
2391
1892
|
}
|
|
2392
|
-
|
|
2393
1893
|
return lexingResult;
|
|
2394
1894
|
}
|
|
2395
|
-
|
|
2396
1895
|
}
|
|
2397
|
-
|
|
2398
|
-
class VRMLParser extends CstParser {
|
|
1896
|
+
class VRMLParser extends chevrotain.CstParser {
|
|
2399
1897
|
constructor(tokenVocabulary) {
|
|
2400
1898
|
super(tokenVocabulary);
|
|
2401
1899
|
const $ = this;
|
|
2402
|
-
const Version = tokenVocabulary[
|
|
2403
|
-
const LCurly = tokenVocabulary[
|
|
2404
|
-
const RCurly = tokenVocabulary[
|
|
2405
|
-
const LSquare = tokenVocabulary[
|
|
2406
|
-
const RSquare = tokenVocabulary[
|
|
2407
|
-
const Identifier = tokenVocabulary[
|
|
2408
|
-
const RouteIdentifier = tokenVocabulary[
|
|
2409
|
-
const StringLiteral = tokenVocabulary[
|
|
2410
|
-
const HexLiteral = tokenVocabulary[
|
|
2411
|
-
const NumberLiteral = tokenVocabulary[
|
|
2412
|
-
const TrueLiteral = tokenVocabulary[
|
|
2413
|
-
const FalseLiteral = tokenVocabulary[
|
|
2414
|
-
const NullLiteral = tokenVocabulary[
|
|
2415
|
-
const DEF = tokenVocabulary[
|
|
2416
|
-
const USE = tokenVocabulary[
|
|
2417
|
-
const ROUTE = tokenVocabulary[
|
|
2418
|
-
const TO = tokenVocabulary[
|
|
2419
|
-
const NodeName = tokenVocabulary[
|
|
2420
|
-
$.RULE(
|
|
1900
|
+
const Version = tokenVocabulary["Version"];
|
|
1901
|
+
const LCurly = tokenVocabulary["LCurly"];
|
|
1902
|
+
const RCurly = tokenVocabulary["RCurly"];
|
|
1903
|
+
const LSquare = tokenVocabulary["LSquare"];
|
|
1904
|
+
const RSquare = tokenVocabulary["RSquare"];
|
|
1905
|
+
const Identifier = tokenVocabulary["Identifier"];
|
|
1906
|
+
const RouteIdentifier = tokenVocabulary["RouteIdentifier"];
|
|
1907
|
+
const StringLiteral = tokenVocabulary["StringLiteral"];
|
|
1908
|
+
const HexLiteral = tokenVocabulary["HexLiteral"];
|
|
1909
|
+
const NumberLiteral = tokenVocabulary["NumberLiteral"];
|
|
1910
|
+
const TrueLiteral = tokenVocabulary["TrueLiteral"];
|
|
1911
|
+
const FalseLiteral = tokenVocabulary["FalseLiteral"];
|
|
1912
|
+
const NullLiteral = tokenVocabulary["NullLiteral"];
|
|
1913
|
+
const DEF = tokenVocabulary["DEF"];
|
|
1914
|
+
const USE = tokenVocabulary["USE"];
|
|
1915
|
+
const ROUTE = tokenVocabulary["ROUTE"];
|
|
1916
|
+
const TO = tokenVocabulary["TO"];
|
|
1917
|
+
const NodeName = tokenVocabulary["NodeName"];
|
|
1918
|
+
$.RULE("vrml", function() {
|
|
2421
1919
|
$.SUBRULE($.version);
|
|
2422
|
-
$.AT_LEAST_ONE(function
|
|
1920
|
+
$.AT_LEAST_ONE(function() {
|
|
2423
1921
|
$.SUBRULE($.node);
|
|
2424
1922
|
});
|
|
2425
|
-
$.MANY(function
|
|
1923
|
+
$.MANY(function() {
|
|
2426
1924
|
$.SUBRULE($.route);
|
|
2427
1925
|
});
|
|
2428
1926
|
});
|
|
2429
|
-
$.RULE(
|
|
1927
|
+
$.RULE("version", function() {
|
|
2430
1928
|
$.CONSUME(Version);
|
|
2431
1929
|
});
|
|
2432
|
-
$.RULE(
|
|
2433
|
-
$.OPTION(function
|
|
1930
|
+
$.RULE("node", function() {
|
|
1931
|
+
$.OPTION(function() {
|
|
2434
1932
|
$.SUBRULE($.def);
|
|
2435
1933
|
});
|
|
2436
1934
|
$.CONSUME(NodeName);
|
|
2437
1935
|
$.CONSUME(LCurly);
|
|
2438
|
-
$.MANY(function
|
|
1936
|
+
$.MANY(function() {
|
|
2439
1937
|
$.SUBRULE($.field);
|
|
2440
1938
|
});
|
|
2441
1939
|
$.CONSUME(RCurly);
|
|
2442
1940
|
});
|
|
2443
|
-
$.RULE(
|
|
1941
|
+
$.RULE("field", function() {
|
|
2444
1942
|
$.CONSUME(Identifier);
|
|
2445
|
-
$.OR2([
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
|
|
2451
|
-
|
|
1943
|
+
$.OR2([
|
|
1944
|
+
{
|
|
1945
|
+
ALT: function() {
|
|
1946
|
+
$.SUBRULE($.singleFieldValue);
|
|
1947
|
+
}
|
|
1948
|
+
},
|
|
1949
|
+
{
|
|
1950
|
+
ALT: function() {
|
|
1951
|
+
$.SUBRULE($.multiFieldValue);
|
|
1952
|
+
}
|
|
2452
1953
|
}
|
|
2453
|
-
|
|
1954
|
+
]);
|
|
2454
1955
|
});
|
|
2455
|
-
$.RULE(
|
|
1956
|
+
$.RULE("def", function() {
|
|
2456
1957
|
$.CONSUME(DEF);
|
|
2457
|
-
$.OR([
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
1958
|
+
$.OR([
|
|
1959
|
+
{
|
|
1960
|
+
ALT: function() {
|
|
1961
|
+
$.CONSUME(Identifier);
|
|
1962
|
+
}
|
|
1963
|
+
},
|
|
1964
|
+
{
|
|
1965
|
+
ALT: function() {
|
|
1966
|
+
$.CONSUME(NodeName);
|
|
1967
|
+
}
|
|
2464
1968
|
}
|
|
2465
|
-
|
|
1969
|
+
]);
|
|
2466
1970
|
});
|
|
2467
|
-
$.RULE(
|
|
1971
|
+
$.RULE("use", function() {
|
|
2468
1972
|
$.CONSUME(USE);
|
|
2469
|
-
$.OR([
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
}, {
|
|
2474
|
-
ALT: function () {
|
|
2475
|
-
$.CONSUME(NodeName);
|
|
2476
|
-
}
|
|
2477
|
-
}]);
|
|
2478
|
-
});
|
|
2479
|
-
$.RULE('singleFieldValue', function () {
|
|
2480
|
-
$.AT_LEAST_ONE(function () {
|
|
2481
|
-
$.OR([{
|
|
2482
|
-
ALT: function () {
|
|
2483
|
-
$.SUBRULE($.node);
|
|
2484
|
-
}
|
|
2485
|
-
}, {
|
|
2486
|
-
ALT: function () {
|
|
2487
|
-
$.SUBRULE($.use);
|
|
2488
|
-
}
|
|
2489
|
-
}, {
|
|
2490
|
-
ALT: function () {
|
|
2491
|
-
$.CONSUME(StringLiteral);
|
|
2492
|
-
}
|
|
2493
|
-
}, {
|
|
2494
|
-
ALT: function () {
|
|
2495
|
-
$.CONSUME(HexLiteral);
|
|
2496
|
-
}
|
|
2497
|
-
}, {
|
|
2498
|
-
ALT: function () {
|
|
2499
|
-
$.CONSUME(NumberLiteral);
|
|
1973
|
+
$.OR([
|
|
1974
|
+
{
|
|
1975
|
+
ALT: function() {
|
|
1976
|
+
$.CONSUME(Identifier);
|
|
2500
1977
|
}
|
|
2501
|
-
},
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
}, {
|
|
2506
|
-
ALT: function () {
|
|
2507
|
-
$.CONSUME(FalseLiteral);
|
|
1978
|
+
},
|
|
1979
|
+
{
|
|
1980
|
+
ALT: function() {
|
|
1981
|
+
$.CONSUME(NodeName);
|
|
2508
1982
|
}
|
|
2509
|
-
}
|
|
2510
|
-
|
|
2511
|
-
|
|
1983
|
+
}
|
|
1984
|
+
]);
|
|
1985
|
+
});
|
|
1986
|
+
$.RULE("singleFieldValue", function() {
|
|
1987
|
+
$.AT_LEAST_ONE(function() {
|
|
1988
|
+
$.OR([
|
|
1989
|
+
{
|
|
1990
|
+
ALT: function() {
|
|
1991
|
+
$.SUBRULE($.node);
|
|
1992
|
+
}
|
|
1993
|
+
},
|
|
1994
|
+
{
|
|
1995
|
+
ALT: function() {
|
|
1996
|
+
$.SUBRULE($.use);
|
|
1997
|
+
}
|
|
1998
|
+
},
|
|
1999
|
+
{
|
|
2000
|
+
ALT: function() {
|
|
2001
|
+
$.CONSUME(StringLiteral);
|
|
2002
|
+
}
|
|
2003
|
+
},
|
|
2004
|
+
{
|
|
2005
|
+
ALT: function() {
|
|
2006
|
+
$.CONSUME(HexLiteral);
|
|
2007
|
+
}
|
|
2008
|
+
},
|
|
2009
|
+
{
|
|
2010
|
+
ALT: function() {
|
|
2011
|
+
$.CONSUME(NumberLiteral);
|
|
2012
|
+
}
|
|
2013
|
+
},
|
|
2014
|
+
{
|
|
2015
|
+
ALT: function() {
|
|
2016
|
+
$.CONSUME(TrueLiteral);
|
|
2017
|
+
}
|
|
2018
|
+
},
|
|
2019
|
+
{
|
|
2020
|
+
ALT: function() {
|
|
2021
|
+
$.CONSUME(FalseLiteral);
|
|
2022
|
+
}
|
|
2023
|
+
},
|
|
2024
|
+
{
|
|
2025
|
+
ALT: function() {
|
|
2026
|
+
$.CONSUME(NullLiteral);
|
|
2027
|
+
}
|
|
2512
2028
|
}
|
|
2513
|
-
|
|
2029
|
+
]);
|
|
2514
2030
|
});
|
|
2515
2031
|
});
|
|
2516
|
-
$.RULE(
|
|
2032
|
+
$.RULE("multiFieldValue", function() {
|
|
2517
2033
|
$.CONSUME(LSquare);
|
|
2518
|
-
$.MANY(function
|
|
2519
|
-
$.OR([
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
}
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2034
|
+
$.MANY(function() {
|
|
2035
|
+
$.OR([
|
|
2036
|
+
{
|
|
2037
|
+
ALT: function() {
|
|
2038
|
+
$.SUBRULE($.node);
|
|
2039
|
+
}
|
|
2040
|
+
},
|
|
2041
|
+
{
|
|
2042
|
+
ALT: function() {
|
|
2043
|
+
$.SUBRULE($.use);
|
|
2044
|
+
}
|
|
2045
|
+
},
|
|
2046
|
+
{
|
|
2047
|
+
ALT: function() {
|
|
2048
|
+
$.CONSUME(StringLiteral);
|
|
2049
|
+
}
|
|
2050
|
+
},
|
|
2051
|
+
{
|
|
2052
|
+
ALT: function() {
|
|
2053
|
+
$.CONSUME(HexLiteral);
|
|
2054
|
+
}
|
|
2055
|
+
},
|
|
2056
|
+
{
|
|
2057
|
+
ALT: function() {
|
|
2058
|
+
$.CONSUME(NumberLiteral);
|
|
2059
|
+
}
|
|
2060
|
+
},
|
|
2061
|
+
{
|
|
2062
|
+
ALT: function() {
|
|
2063
|
+
$.CONSUME(NullLiteral);
|
|
2064
|
+
}
|
|
2542
2065
|
}
|
|
2543
|
-
|
|
2066
|
+
]);
|
|
2544
2067
|
});
|
|
2545
2068
|
$.CONSUME(RSquare);
|
|
2546
2069
|
});
|
|
2547
|
-
$.RULE(
|
|
2070
|
+
$.RULE("route", function() {
|
|
2548
2071
|
$.CONSUME(ROUTE);
|
|
2549
2072
|
$.CONSUME(RouteIdentifier);
|
|
2550
2073
|
$.CONSUME(TO);
|
|
@@ -2552,24 +2075,19 @@ class VRMLParser extends CstParser {
|
|
|
2552
2075
|
});
|
|
2553
2076
|
this.performSelfAnalysis();
|
|
2554
2077
|
}
|
|
2555
|
-
|
|
2556
2078
|
}
|
|
2557
|
-
|
|
2558
2079
|
class Face {
|
|
2559
2080
|
constructor(a, b, c) {
|
|
2560
2081
|
this.a = a;
|
|
2561
2082
|
this.b = b;
|
|
2562
2083
|
this.c = c;
|
|
2563
|
-
this.normal = new Vector3();
|
|
2084
|
+
this.normal = new THREE.Vector3();
|
|
2564
2085
|
}
|
|
2565
|
-
|
|
2566
2086
|
}
|
|
2567
|
-
|
|
2568
2087
|
const TEXTURE_TYPE = {
|
|
2569
2088
|
INTENSITY: 1,
|
|
2570
2089
|
INTENSITY_ALPHA: 2,
|
|
2571
2090
|
RGB: 3,
|
|
2572
2091
|
RGBA: 4
|
|
2573
2092
|
};
|
|
2574
|
-
|
|
2575
|
-
export { VRMLLoader };
|
|
2093
|
+
exports.VRMLLoader = VRMLLoader;
|