x_ite 8.9.6 → 8.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/tests.pl +1 -1
- package/dist/assets/components/Annotation.js +13 -13
- package/dist/assets/components/Annotation.min.js +1 -1
- package/dist/assets/components/CADGeometry.js +13 -13
- package/dist/assets/components/CADGeometry.min.js +1 -1
- package/dist/assets/components/CubeMapTexturing.js +26 -26
- package/dist/assets/components/CubeMapTexturing.min.js +1 -1
- package/dist/assets/components/DIS.js +13 -13
- package/dist/assets/components/DIS.min.js +1 -1
- package/dist/assets/components/EventUtilities.js +9 -9
- package/dist/assets/components/EventUtilities.min.js +1 -1
- package/dist/assets/components/Geometry2D.js +35 -34
- package/dist/assets/components/Geometry2D.min.js +1 -1
- package/dist/assets/components/Geospatial.js +37 -37
- package/dist/assets/components/Geospatial.min.js +1 -1
- package/dist/assets/components/HAnim.js +370 -208
- package/dist/assets/components/HAnim.min.js +1 -1
- package/dist/assets/components/KeyDeviceSensor.js +8 -8
- package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
- package/dist/assets/components/Layout.js +27 -30
- package/dist/assets/components/Layout.min.js +1 -1
- package/dist/assets/components/NURBS.js +26 -26
- package/dist/assets/components/NURBS.min.js +1 -1
- package/dist/assets/components/ParticleSystems.js +23 -23
- package/dist/assets/components/ParticleSystems.min.js +1 -1
- package/dist/assets/components/Picking.js +18 -18
- package/dist/assets/components/Picking.min.js +1 -1
- package/dist/assets/components/RigidBodyPhysics.js +23 -23
- package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
- package/dist/assets/components/Scripting.js +37 -37
- package/dist/assets/components/Scripting.min.js +1 -1
- package/dist/assets/components/Text.js +31 -31
- package/dist/assets/components/Text.min.js +1 -1
- package/dist/assets/components/TextureProjector.js +14 -14
- package/dist/assets/components/TextureProjector.min.js +1 -1
- package/dist/assets/components/Texturing3D.js +33 -33
- package/dist/assets/components/Texturing3D.min.js +1 -1
- package/dist/assets/components/VolumeRendering.js +18 -18
- package/dist/assets/components/VolumeRendering.min.js +1 -1
- package/dist/assets/components/X_ITE.js +9 -9
- package/dist/assets/components/X_ITE.min.js +1 -1
- package/dist/x_ite.css +1 -1
- package/dist/x_ite.js +9157 -8799
- package/dist/x_ite.min.js +1 -1
- package/dist/x_ite.zip +0 -0
- package/docs/_config.yml +5 -5
- package/docs/_posts/components/Core/MetadataBoolean.md +1 -1
- package/docs/_posts/components/Core/MetadataDouble.md +1 -1
- package/docs/_posts/components/Core/MetadataFloat.md +1 -1
- package/docs/_posts/components/Core/MetadataInteger.md +1 -1
- package/docs/_posts/components/Core/MetadataSet.md +1 -1
- package/docs/_posts/components/Core/MetadataString.md +1 -1
- package/docs/_posts/components/Core/WorldInfo.md +1 -1
- package/docs/_posts/components/EventUtilities/BooleanFilter.md +2 -2
- package/docs/_posts/components/EventUtilities/BooleanSequencer.md +2 -2
- package/docs/_posts/components/EventUtilities/BooleanToggle.md +2 -2
- package/docs/_posts/components/EventUtilities/BooleanTrigger.md +2 -2
- package/docs/_posts/components/EventUtilities/IntegerSequencer.md +2 -2
- package/docs/_posts/components/EventUtilities/IntegerTrigger.md +2 -2
- package/docs/_posts/components/EventUtilities/TimeTrigger.md +2 -2
- package/docs/_posts/components/Geometry2D/Arc2D.md +1 -1
- package/docs/_posts/components/Geometry2D/ArcClose2D.md +1 -1
- package/docs/_posts/components/Geometry2D/Circle2D.md +1 -1
- package/docs/_posts/components/Geometry2D/Disk2D.md +1 -1
- package/docs/_posts/components/Geometry2D/Polyline2D.md +1 -1
- package/docs/_posts/components/Geometry2D/Polypoint2D.md +1 -1
- package/docs/_posts/components/Geometry2D/Rectangle2D.md +1 -1
- package/docs/_posts/components/HAnim/HAnimHumanoid.md +17 -17
- package/docs/_posts/components/Interpolation/ColorInterpolator.md +1 -1
- package/docs/_posts/components/Interpolation/CoordinateInterpolator.md +1 -1
- package/docs/_posts/components/Interpolation/CoordinateInterpolator2D.md +1 -1
- package/docs/_posts/components/Interpolation/NormalInterpolator.md +1 -1
- package/docs/_posts/components/Interpolation/OrientationInterpolator.md +1 -1
- package/docs/_posts/components/Interpolation/PositionInterpolator.md +1 -1
- package/docs/_posts/components/Interpolation/PositionInterpolator2D.md +1 -1
- package/docs/_posts/components/Interpolation/ScalarInterpolator.md +1 -1
- package/docs/_posts/components/KeyDeviceSensor/KeySensor.md +1 -1
- package/docs/_posts/components/KeyDeviceSensor/StringSensor.md +1 -1
- package/docs/_posts/components/Networking/LoadSensor.md +1 -1
- package/docs/_posts/components/PointingDeviceSensor/CylinderSensor.md +1 -1
- package/docs/_posts/components/PointingDeviceSensor/PlaneSensor.md +1 -1
- package/docs/_posts/components/PointingDeviceSensor/TouchSensor.md +1 -1
- package/docs/_posts/components/Text/Text.md +1 -1
- package/docs/_posts/components/Time/TimeSensor.md +1 -1
- package/docs/_posts/reference/browser-services.md +6 -6
- package/docs/_posts/what's-new.md +23 -0
- package/docs/laboratory/gltf-sample-viewer.html +17 -8
- package/package.json +1 -1
- package/src/assets/shaders/webgl1/Depth.vs.js +4 -4
- package/src/assets/shaders/webgl1/Pointing.fs.js +1 -1
- package/src/assets/shaders/webgl2/Depth.vs.js +7 -4
- package/src/assets/shaders/webgl2/LineTransform.vs.js +24 -12
- package/src/assets/shaders/webgl2/Pointing.fs.js +1 -1
- package/src/assets/shaders/webgl2/Pointing.vs.js +12 -9
- package/src/assets/shaders/webgl2/include/Particle.glsl.js +5 -15
- package/src/assets/shaders/webgl2/include/Skin.glsl.js +88 -0
- package/src/assets/shaders/webgl2/include/Utils.glsl.js +13 -0
- package/src/assets/shaders/webgl2/include/Vertex.glsl.js +17 -8
- package/src/bookmarks.js +54 -2
- package/src/tests.js +0 -360
- package/src/x_ite/Base/X3DArrayField.js +18 -3
- package/src/x_ite/Base/X3DBaseNode.js +73 -56
- package/src/x_ite/Base/X3DObjectArrayField.js +6 -4
- package/src/x_ite/Browser/Core/Context.js +14 -4
- package/src/x_ite/Browser/Core/Notification.js +4 -3
- package/src/x_ite/Browser/Core/X3DCoreContext.js +8 -8
- package/src/x_ite/Browser/Geometry2D/Arc2DOptions.js +4 -3
- package/src/x_ite/Browser/Geometry2D/ArcClose2DOptions.js +4 -3
- package/src/x_ite/Browser/Geometry2D/Circle2DOptions.js +6 -6
- package/src/x_ite/Browser/Geometry2D/Disk2DOptions.js +9 -10
- package/src/x_ite/Browser/Geometry3D/ConeOptions.js +5 -4
- package/src/x_ite/Browser/Geometry3D/CylinderOptions.js +5 -4
- package/src/x_ite/Browser/Geometry3D/IcoSphereOptions.js +3 -2
- package/src/x_ite/Browser/Geometry3D/QuadSphereOptions.js +3 -2
- package/src/x_ite/Browser/Layout/ScreenText.js +2 -2
- package/src/x_ite/Browser/Navigation/ExamineViewer.js +4 -4
- package/src/x_ite/Browser/Navigation/LookAtViewer.js +4 -4
- package/src/x_ite/Browser/Navigation/PlaneViewer.js +3 -3
- package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +3 -3
- package/src/x_ite/Browser/Navigation/X3DNavigationContext.js +6 -5
- package/src/x_ite/Browser/Navigation/X3DViewer.js +2 -13
- package/src/x_ite/Browser/Networking/X3DNetworkingContext.js +5 -4
- package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +8 -18
- package/src/x_ite/Browser/PointingDeviceSensor/X3DPointingDeviceSensorContext.js +17 -5
- package/src/x_ite/Browser/Rendering/X3DRenderingContext.js +6 -5
- package/src/x_ite/Browser/Shaders/Shaders.js +4 -0
- package/src/x_ite/Browser/Shape/X3DShapeContext.js +3 -3
- package/src/x_ite/Browser/Sound/X3DSoundContext.js +4 -3
- package/src/x_ite/Browser/Text/PolygonText.js +2 -2
- package/src/x_ite/Browser/Texturing/X3DTexturingContext.js +1 -1
- package/src/x_ite/Browser/VERSION.js +1 -1
- package/src/x_ite/Browser/X3DBrowser.js +49 -17
- package/src/x_ite/Browser/X3DBrowserContext.js +8 -7
- package/src/x_ite/Components/Core/X3DChildNode.js +2 -5
- package/src/x_ite/Components/Core/X3DPrototypeInstance.js +14 -14
- package/src/x_ite/Components/CubeMapTexturing/ComposedCubeMapTexture.js +1 -1
- package/src/x_ite/Components/EnvironmentalSensor/X3DEnvironmentalSensorNode.js +1 -1
- package/src/x_ite/Components/Geometry3D/ElevationGrid.js +5 -2
- package/src/x_ite/Components/Geometry3D/Extrusion.js +24 -13
- package/src/x_ite/Components/Geometry3D/IndexedFaceSet.js +5 -2
- package/src/x_ite/Components/Geospatial/GeoElevationGrid.js +2 -2
- package/src/x_ite/Components/Geospatial/GeoViewpoint.js +2 -2
- package/src/x_ite/Components/Grouping/X3DBoundedObject.js +1 -2
- package/src/x_ite/Components/HAnim/HAnimHumanoid.js +314 -161
- package/src/x_ite/Components/HAnim/HAnimJoint.js +37 -25
- package/src/x_ite/Components/Layering/X3DLayerNode.js +2 -2
- package/src/x_ite/Components/NURBS/NurbsOrientationInterpolator.js +1 -1
- package/src/x_ite/Components/NURBS/NurbsPositionInterpolator.js +1 -1
- package/src/x_ite/Components/Navigation/NavigationInfo.js +4 -4
- package/src/x_ite/Components/Navigation/OrthoViewpoint.js +1 -1
- package/src/x_ite/Components/Navigation/X3DViewpointNode.js +12 -12
- package/src/x_ite/Components/Networking/X3DUrlObject.js +18 -11
- package/src/x_ite/Components/Rendering/IndexedLineSet.js +17 -14
- package/src/x_ite/Components/Rendering/LineSet.js +16 -13
- package/src/x_ite/Components/Rendering/PointSet.js +16 -12
- package/src/x_ite/Components/Rendering/X3DColorNode.js +1 -3
- package/src/x_ite/Components/Rendering/X3DComposedGeometryNode.js +3 -0
- package/src/x_ite/Components/Rendering/X3DGeometryNode.js +48 -77
- package/src/x_ite/Components/Rendering/X3DLineGeometryNode.js +31 -12
- package/src/x_ite/Components/Rendering/X3DPointGeometryNode.js +3 -0
- package/src/x_ite/Components/RigidBodyPhysics/RigidBody.js +3 -3
- package/src/x_ite/Components/RigidBodyPhysics/X3DNBodyCollidableNode.js +2 -2
- package/src/x_ite/Components/RigidBodyPhysics/X3DRigidJointNode.js +1 -1
- package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +24 -7
- package/src/x_ite/Components/Shaders/X3DVertexAttributeNode.js +1 -1
- package/src/x_ite/Components/Shape/FillProperties.js +1 -3
- package/src/x_ite/Components/Shape/X3DAppearanceNode.js +1 -3
- package/src/x_ite/Components/Shape/X3DMaterialNode.js +8 -6
- package/src/x_ite/Components/Shape/X3DOneSidedMaterialNode.js +0 -2
- package/src/x_ite/Components/Sound/AudioClip.js +1 -1
- package/src/x_ite/Components/Sound/BufferAudioSource.js +1 -1
- package/src/x_ite/Components/Sound/ListenerPointSource.js +2 -2
- package/src/x_ite/Components/Sound/MicrophoneSource.js +2 -2
- package/src/x_ite/Components/Sound/OscillatorSource.js +2 -2
- package/src/x_ite/Components/Sound/Sound.js +1 -1
- package/src/x_ite/Components/Sound/StreamAudioSource.js +2 -2
- package/src/x_ite/Components/Sound/X3DSoundProcessingNode.js +1 -1
- package/src/x_ite/Components/Text/X3DFontStyleNode.js +4 -4
- package/src/x_ite/Components/Texturing/MultiTexture.js +1 -1
- package/src/x_ite/Components/Texturing/PixelTexture.js +1 -1
- package/src/x_ite/Components/Texturing/X3DSingleTextureCoordinateNode.js +2 -2
- package/src/x_ite/Components/Texturing/X3DTextureNode.js +1 -3
- package/src/x_ite/Components/Texturing3D/ComposedTexture3D.js +2 -2
- package/src/x_ite/Components/Texturing3D/PixelTexture3D.js +1 -1
- package/src/x_ite/Components/Time/TimeSensor.js +1 -1
- package/src/x_ite/Components/Time/X3DTimeDependentNode.js +2 -2
- package/src/x_ite/Execution/X3DExecutionContext.js +3 -4
- package/src/x_ite/Execution/X3DScene.js +4 -4
- package/src/x_ite/Execution/X3DWorld.js +1 -1
- package/src/x_ite/Parser/GLTF2Parser.js +196 -116
- package/src/x_ite/Parser/X3DOptimizer.js +47 -18
- package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +4 -4
- package/src/x_ite/Prototype/X3DProtoDeclarationNode.js +1 -1
- package/src/x_ite/Rendering/X3DRenderObject.js +20 -12
- package/src/x_ite.html +36 -10
- package/x_ite.min.html +36 -10
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
import X3DParser from "./X3DParser.js";
|
|
49
49
|
import X3DOptimizer from "./X3DOptimizer.js";
|
|
50
50
|
import URLs from "../Browser/Networking/URLs.js";
|
|
51
|
+
import Algorithm from "../../standard/Math/Algorithm.js";
|
|
51
52
|
import Vector2 from "../../standard/Math/Numbers/Vector2.js";
|
|
52
53
|
import Vector3 from "../../standard/Math/Numbers/Vector3.js";
|
|
53
54
|
import Quaternion from "../../standard/Math/Numbers/Quaternion.js";
|
|
@@ -55,8 +56,7 @@ import Rotation4 from "../../standard/Math/Numbers/Rotation4.js";
|
|
|
55
56
|
import Matrix4 from "../../standard/Math/Numbers/Matrix4.js";
|
|
56
57
|
import Color3 from "../../standard/Math/Numbers/Color3.js";
|
|
57
58
|
import Color4 from "../../standard/Math/Numbers/Color4.js";
|
|
58
|
-
import
|
|
59
|
-
import DEVELOPMENT from "../DEVELOPMENT.js"
|
|
59
|
+
import Box3 from "../../standard/Math/Geometry/Box3.js";
|
|
60
60
|
|
|
61
61
|
// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html
|
|
62
62
|
// https://github.com/KhronosGroup/glTF-Sample-Models
|
|
@@ -91,7 +91,6 @@ function GLTF2Parser (scene)
|
|
|
91
91
|
this .nodes = [ ];
|
|
92
92
|
this .skins = [ ];
|
|
93
93
|
this .joints = new Set ();
|
|
94
|
-
this .skeletons = new Set ();
|
|
95
94
|
this .animations = 0;
|
|
96
95
|
}
|
|
97
96
|
|
|
@@ -133,8 +132,8 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
133
132
|
"materials",
|
|
134
133
|
"meshes",
|
|
135
134
|
"cameras",
|
|
136
|
-
"nodes",
|
|
137
135
|
"skins",
|
|
136
|
+
"nodes",
|
|
138
137
|
"scenes",
|
|
139
138
|
"scene",
|
|
140
139
|
"animations",
|
|
@@ -206,12 +205,19 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
206
205
|
this .materialsArray (glTF .materials);
|
|
207
206
|
this .meshesArray (glTF .meshes);
|
|
208
207
|
this .camerasArray (glTF .cameras);
|
|
209
|
-
this .nodesArray (glTF .nodes);
|
|
210
208
|
this .skinsArray (glTF .skins);
|
|
209
|
+
this .nodesArray (glTF .nodes);
|
|
211
210
|
this .scenesArray (glTF .scenes, glTF .scene);
|
|
212
211
|
this .animationsArray (glTF .animations);
|
|
213
212
|
|
|
214
|
-
|
|
213
|
+
try
|
|
214
|
+
{
|
|
215
|
+
this .optimizeSceneGraph (this .getExecutionContext () .getRootNodes ());
|
|
216
|
+
}
|
|
217
|
+
catch (error)
|
|
218
|
+
{
|
|
219
|
+
console .error (error)
|
|
220
|
+
}
|
|
215
221
|
|
|
216
222
|
return this .getScene ();
|
|
217
223
|
},
|
|
@@ -611,19 +617,19 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
611
617
|
|
|
612
618
|
// minFilter
|
|
613
619
|
|
|
614
|
-
const minificationFilter = MinificationFilters .get (sampler .minFilter)
|
|
620
|
+
const minificationFilter = MinificationFilters .get (sampler .minFilter) ?? ["AVG_PIXEL", false];
|
|
615
621
|
|
|
616
622
|
texturePropertiesNode ._minificationFilter = minificationFilter [0];
|
|
617
623
|
texturePropertiesNode ._generateMipMaps = minificationFilter [1];
|
|
618
624
|
|
|
619
625
|
// magFilter
|
|
620
626
|
|
|
621
|
-
texturePropertiesNode ._magnificationFilter = MagnificationFilters .get (sampler .magFilter)
|
|
627
|
+
texturePropertiesNode ._magnificationFilter = MagnificationFilters .get (sampler .magFilter) ?? "AVG_PIXEL";
|
|
622
628
|
|
|
623
629
|
// boundaryMode
|
|
624
630
|
|
|
625
|
-
texturePropertiesNode ._boundaryModeS = BoundaryModes .get (sampler .wrapS)
|
|
626
|
-
texturePropertiesNode ._boundaryModeT = BoundaryModes .get (sampler .wrapT)
|
|
631
|
+
texturePropertiesNode ._boundaryModeS = BoundaryModes .get (sampler .wrapS) ?? "REPEAT";
|
|
632
|
+
texturePropertiesNode ._boundaryModeT = BoundaryModes .get (sampler .wrapT) ?? "REPEAT";
|
|
627
633
|
|
|
628
634
|
// setup
|
|
629
635
|
|
|
@@ -1040,15 +1046,16 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1040
1046
|
return;
|
|
1041
1047
|
|
|
1042
1048
|
if (mesh .shapeNodes)
|
|
1043
|
-
return mesh .shapeNodes;
|
|
1044
|
-
|
|
1045
|
-
if (skin instanceof Object)
|
|
1046
1049
|
{
|
|
1047
|
-
const
|
|
1050
|
+
const primitives = mesh .primitives;
|
|
1051
|
+
|
|
1052
|
+
if (!(primitives instanceof Array))
|
|
1053
|
+
return mesh .shapeNodes;
|
|
1054
|
+
|
|
1055
|
+
for (const primitive of primitives)
|
|
1056
|
+
this .attributesJointsArray (skin, primitive .attributes ?.JOINTS, primitive .attributes ?.WEIGHTS);
|
|
1048
1057
|
|
|
1049
|
-
|
|
1050
|
-
skin .normalNode = scene .createNode ("Normal", false);
|
|
1051
|
-
skin .coordinateNode = scene .createNode ("Coordinate", false);
|
|
1058
|
+
return mesh .shapeNodes;
|
|
1052
1059
|
}
|
|
1053
1060
|
|
|
1054
1061
|
const shapeNodes = this .primitivesArray (mesh .primitives, skin);
|
|
@@ -1068,13 +1075,6 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1068
1075
|
}
|
|
1069
1076
|
}
|
|
1070
1077
|
|
|
1071
|
-
if (skin instanceof Object)
|
|
1072
|
-
{
|
|
1073
|
-
skin .textureCoordinateNode .setup ();
|
|
1074
|
-
skin .normalNode .setup ();
|
|
1075
|
-
skin .coordinateNode .setup ();
|
|
1076
|
-
}
|
|
1077
|
-
|
|
1078
1078
|
return mesh .shapeNodes = shapeNodes;
|
|
1079
1079
|
},
|
|
1080
1080
|
primitivesArray (primitives, skin)
|
|
@@ -1311,11 +1311,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1311
1311
|
scene .addExportedNode (scene .getUniqueExportName (name), viewpointNode);
|
|
1312
1312
|
}
|
|
1313
1313
|
|
|
1314
|
-
|
|
1315
|
-
viewpointNode ._description = camera .name;
|
|
1316
|
-
else
|
|
1317
|
-
viewpointNode ._description = `Viewpoint ${++ this .viewpoints}`;
|
|
1318
|
-
|
|
1314
|
+
viewpointNode ._description = camera .name ? this .description (camera .name) : `Viewpoint ${++ this .viewpoints}`;
|
|
1319
1315
|
viewpointNode ._position = Vector3 .Zero;
|
|
1320
1316
|
viewpointNode ._centerOfRotation = new Vector3 (0, 0, -10);
|
|
1321
1317
|
|
|
@@ -1385,22 +1381,71 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1385
1381
|
if (!(nodes instanceof Array))
|
|
1386
1382
|
return;
|
|
1387
1383
|
|
|
1388
|
-
this .nodes = nodes;
|
|
1384
|
+
this .nodes = nodes .map ((node, index) => this .nodeObject (node, index));
|
|
1385
|
+
|
|
1386
|
+
// 1. Replace skeleton nodes with humanoid.
|
|
1387
|
+
// 2. Add children.
|
|
1388
|
+
|
|
1389
|
+
this .nodes .forEach (node => this .nodeSkeleton (node));
|
|
1390
|
+
this .nodes .forEach (node => this .nodeChildren (node));
|
|
1389
1391
|
},
|
|
1390
1392
|
nodeObject (node, index)
|
|
1391
1393
|
{
|
|
1392
1394
|
if (!(node instanceof Object))
|
|
1393
|
-
return;
|
|
1395
|
+
return { };
|
|
1394
1396
|
|
|
1395
|
-
if (node .
|
|
1396
|
-
return node
|
|
1397
|
+
if (node .transformNode)
|
|
1398
|
+
return node;
|
|
1397
1399
|
|
|
1398
1400
|
// Create Transform or HAnimJoint.
|
|
1399
1401
|
|
|
1400
1402
|
const
|
|
1401
1403
|
scene = this .getExecutionContext (),
|
|
1402
1404
|
typeName = this .joints .has (index) ? "HAnimJoint" : "Transform",
|
|
1403
|
-
transformNode = scene .createNode (typeName, false)
|
|
1405
|
+
transformNode = scene .createNode (typeName, false);
|
|
1406
|
+
|
|
1407
|
+
node .transformNode = transformNode;
|
|
1408
|
+
|
|
1409
|
+
// Create humanoid.
|
|
1410
|
+
|
|
1411
|
+
const skin = this .skins [node .skin];
|
|
1412
|
+
|
|
1413
|
+
if (skin)
|
|
1414
|
+
{
|
|
1415
|
+
// Skins can be cloned.
|
|
1416
|
+
|
|
1417
|
+
if (!skin .humanoidNode)
|
|
1418
|
+
skin .humanoidNode = scene .createNode ("HAnimHumanoid", false);
|
|
1419
|
+
|
|
1420
|
+
node .humanoidNode = skin .humanoidNode;
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
node .childNode = node .humanoidNode ?? node .transformNode;
|
|
1424
|
+
|
|
1425
|
+
return node;
|
|
1426
|
+
},
|
|
1427
|
+
nodeSkeleton (node)
|
|
1428
|
+
{
|
|
1429
|
+
const skin = this .skins [node .skin];
|
|
1430
|
+
|
|
1431
|
+
if (!skin)
|
|
1432
|
+
return;
|
|
1433
|
+
|
|
1434
|
+
const
|
|
1435
|
+
skeleton = this .nodes [skin .skeleton],
|
|
1436
|
+
humanoidNode = skin .humanoidNode;
|
|
1437
|
+
|
|
1438
|
+
if (!skeleton)
|
|
1439
|
+
return;
|
|
1440
|
+
|
|
1441
|
+
skeleton .humanoidNode = humanoidNode;
|
|
1442
|
+
skeleton .childNode = humanoidNode;
|
|
1443
|
+
},
|
|
1444
|
+
nodeChildren (node)
|
|
1445
|
+
{
|
|
1446
|
+
const
|
|
1447
|
+
scene = this .getExecutionContext (),
|
|
1448
|
+
transformNode = node .transformNode,
|
|
1404
1449
|
name = this .sanitizeName (node .name);
|
|
1405
1450
|
|
|
1406
1451
|
// Name
|
|
@@ -1410,7 +1455,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1410
1455
|
scene .addNamedNode (scene .getUniqueName (name), transformNode);
|
|
1411
1456
|
scene .addExportedNode (scene .getUniqueExportName (name), transformNode);
|
|
1412
1457
|
|
|
1413
|
-
if (
|
|
1458
|
+
if (transformNode .getTypeName () === "HAnimJoint")
|
|
1414
1459
|
transformNode ._name = node .name;
|
|
1415
1460
|
}
|
|
1416
1461
|
|
|
@@ -1418,10 +1463,10 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1418
1463
|
|
|
1419
1464
|
const
|
|
1420
1465
|
translation = new Vector3 (0, 0, 0),
|
|
1421
|
-
quaternion = new Quaternion (0, 0, 0, 1),
|
|
1422
1466
|
rotation = new Rotation4 (),
|
|
1423
1467
|
scale = new Vector3 (1, 1, 1),
|
|
1424
1468
|
scaleOrientation = new Rotation4 (),
|
|
1469
|
+
quaternion = new Quaternion (0, 0, 0, 1),
|
|
1425
1470
|
matrix = new Matrix4 ();
|
|
1426
1471
|
|
|
1427
1472
|
if (this .vectorValue (node .matrix, matrix))
|
|
@@ -1445,6 +1490,12 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1445
1490
|
transformNode ._scale = scale;
|
|
1446
1491
|
}
|
|
1447
1492
|
|
|
1493
|
+
// Add mesh.
|
|
1494
|
+
|
|
1495
|
+
const
|
|
1496
|
+
skin = this .skins [node .skin],
|
|
1497
|
+
shapeNodes = this .meshObject (this .meshes [node .mesh], skin);
|
|
1498
|
+
|
|
1448
1499
|
// Add camera.
|
|
1449
1500
|
|
|
1450
1501
|
const viewpointNode = this .cameraObject (this .cameras [node .camera]);
|
|
@@ -1456,73 +1507,70 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1456
1507
|
|
|
1457
1508
|
this .nodeExtensions (node .extensions, transformNode);
|
|
1458
1509
|
|
|
1459
|
-
// Add
|
|
1510
|
+
// Add children.
|
|
1460
1511
|
|
|
1461
|
-
|
|
1512
|
+
transformNode ._children .push (... this .nodeChildrenArray (node .children));
|
|
1462
1513
|
|
|
1463
|
-
|
|
1464
|
-
{
|
|
1465
|
-
const
|
|
1466
|
-
skin = this .skins [node .skin],
|
|
1467
|
-
shapeNodes = this .meshObject (mesh, skin);
|
|
1514
|
+
// Add Shape nodes.
|
|
1468
1515
|
|
|
1516
|
+
if (shapeNodes)
|
|
1469
1517
|
transformNode ._children .push (... shapeNodes);
|
|
1470
1518
|
|
|
1471
|
-
|
|
1472
|
-
{
|
|
1473
|
-
var humanoidNode = scene .createNode ("HAnimHumanoid", false);
|
|
1474
|
-
|
|
1475
|
-
const name = this .sanitizeName (skin .name);
|
|
1519
|
+
transformNode .setup ();
|
|
1476
1520
|
|
|
1477
|
-
|
|
1478
|
-
scene .addNamedNode (scene .getUniqueName (name), humanoidNode);
|
|
1521
|
+
// Skin
|
|
1479
1522
|
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
humanoidNode ._skeletalConfiguration = "NONE";
|
|
1523
|
+
if (!skin)
|
|
1524
|
+
return;
|
|
1483
1525
|
|
|
1484
|
-
|
|
1526
|
+
const humanoidNode = skin .humanoidNode;
|
|
1485
1527
|
|
|
1486
|
-
|
|
1487
|
-
|
|
1528
|
+
if (!humanoidNode .isInitialized ())
|
|
1529
|
+
{
|
|
1530
|
+
const name = this .sanitizeName (skin .name) || transformNode .getName ();
|
|
1488
1531
|
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1532
|
+
if (name)
|
|
1533
|
+
{
|
|
1534
|
+
scene .addNamedNode (scene .getUniqueName (name), humanoidNode);
|
|
1535
|
+
scene .addExportedNode (scene .getUniqueExportName (name), humanoidNode);
|
|
1536
|
+
}
|
|
1492
1537
|
|
|
1493
|
-
|
|
1538
|
+
humanoidNode ._name = skin .name ?? node .name ?? "";
|
|
1539
|
+
humanoidNode ._version = "2.0";
|
|
1540
|
+
humanoidNode ._skeletalConfiguration = "GLTF";
|
|
1494
1541
|
|
|
1495
|
-
|
|
1496
|
-
humanoidNode ._jointBindingPositions .push (translation);
|
|
1497
|
-
humanoidNode ._jointBindingRotations .push (rotation);
|
|
1498
|
-
humanoidNode ._jointBindingScales .push (scale);
|
|
1499
|
-
}
|
|
1542
|
+
const skeletonNode = this .nodes [skin .skeleton] ?.transformNode;
|
|
1500
1543
|
|
|
1501
|
-
|
|
1502
|
-
humanoidNode .
|
|
1503
|
-
humanoidNode ._skinNormal = shapeNodes [0] ._geometry .normal;
|
|
1504
|
-
humanoidNode ._skinCoord = shapeNodes [0] ._geometry .coord;
|
|
1505
|
-
humanoidNode ._skin .push (transformNode);
|
|
1544
|
+
if (skeletonNode)
|
|
1545
|
+
humanoidNode ._skeleton .push (skeletonNode);
|
|
1506
1546
|
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1547
|
+
for (const [i, joint] of skin .joints .entries ())
|
|
1548
|
+
{
|
|
1549
|
+
const
|
|
1550
|
+
jointNode = this .nodes [joint] ?.transformNode,
|
|
1551
|
+
inverseBindMatrix = skin .inverseBindMatrices [i] ?? Matrix4 .Identity;
|
|
1510
1552
|
|
|
1511
|
-
|
|
1553
|
+
if (!jointNode)
|
|
1554
|
+
continue;
|
|
1512
1555
|
|
|
1513
|
-
|
|
1556
|
+
inverseBindMatrix .get (translation, rotation, scale);
|
|
1514
1557
|
|
|
1515
|
-
|
|
1558
|
+
humanoidNode ._joints .push (jointNode);
|
|
1559
|
+
humanoidNode ._jointBindingPositions .push (translation);
|
|
1560
|
+
humanoidNode ._jointBindingRotations .push (rotation);
|
|
1561
|
+
humanoidNode ._jointBindingScales .push (scale);
|
|
1562
|
+
}
|
|
1516
1563
|
|
|
1517
|
-
|
|
1564
|
+
humanoidNode .setup ();
|
|
1565
|
+
}
|
|
1518
1566
|
|
|
1519
|
-
if (
|
|
1567
|
+
if (shapeNodes ?.length)
|
|
1520
1568
|
{
|
|
1521
|
-
|
|
1522
|
-
|
|
1569
|
+
humanoidNode ._skinNormal = shapeNodes [0] ._geometry .normal;
|
|
1570
|
+
humanoidNode ._skinCoord = shapeNodes [0] ._geometry .coord;
|
|
1523
1571
|
}
|
|
1524
1572
|
|
|
1525
|
-
|
|
1573
|
+
humanoidNode ._skin .push (transformNode);
|
|
1526
1574
|
},
|
|
1527
1575
|
nodeExtensions (extensions, transformNode)
|
|
1528
1576
|
{
|
|
@@ -1550,10 +1598,13 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1550
1598
|
if (!(children instanceof Array))
|
|
1551
1599
|
return [ ];
|
|
1552
1600
|
|
|
1553
|
-
|
|
1554
|
-
.
|
|
1555
|
-
.
|
|
1556
|
-
.filter (node => node)
|
|
1601
|
+
const nodes = [... new Set (children
|
|
1602
|
+
.map (index => this .nodes [index] ?.childNode)
|
|
1603
|
+
.filter (node => node)
|
|
1604
|
+
.filter (node => node .getTypeName () !== "HAnimHumanoid" || !node .getCloneCount ())
|
|
1605
|
+
)];
|
|
1606
|
+
|
|
1607
|
+
return nodes;
|
|
1557
1608
|
},
|
|
1558
1609
|
skinsArray (skins)
|
|
1559
1610
|
{
|
|
@@ -1570,14 +1621,19 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1570
1621
|
if (!(skin instanceof Object))
|
|
1571
1622
|
return;
|
|
1572
1623
|
|
|
1573
|
-
|
|
1624
|
+
const scene = this .getScene ();
|
|
1574
1625
|
|
|
1575
|
-
|
|
1576
|
-
|
|
1626
|
+
skin .joints = this .jointsArray (skin .joints);
|
|
1627
|
+
skin .skeleton = skin .skeleton ?? this .skeleton (skin .joints);
|
|
1628
|
+
skin .inverseBindMatrices = this .inverseBindMatricesAccessors (this .accessors [skin .inverseBindMatrices]);
|
|
1577
1629
|
|
|
1578
|
-
|
|
1630
|
+
skin .textureCoordinateNode = scene .createNode ("TextureCoordinate", false);
|
|
1631
|
+
skin .normalNode = scene .createNode ("Normal", false);
|
|
1632
|
+
skin .coordinateNode = scene .createNode ("Coordinate", false);
|
|
1579
1633
|
|
|
1580
|
-
skin .
|
|
1634
|
+
skin .textureCoordinateNode .setup ();
|
|
1635
|
+
skin .normalNode .setup ();
|
|
1636
|
+
skin .coordinateNode .setup ();
|
|
1581
1637
|
},
|
|
1582
1638
|
jointsArray: function (joints)
|
|
1583
1639
|
{
|
|
@@ -1613,14 +1669,14 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1613
1669
|
|
|
1614
1670
|
return matrices;
|
|
1615
1671
|
},
|
|
1616
|
-
scenesArray (scenes, sceneNumber)
|
|
1672
|
+
scenesArray (scenes, sceneNumber = 0)
|
|
1617
1673
|
{
|
|
1618
1674
|
if (!(scenes instanceof Array))
|
|
1619
1675
|
return;
|
|
1620
1676
|
|
|
1621
1677
|
const
|
|
1622
1678
|
scene = this .getExecutionContext (),
|
|
1623
|
-
children = scenes .map (scene => this .sceneObject (scene));
|
|
1679
|
+
children = scenes .map (scene => this .sceneObject (scene)) .filter (node => node);
|
|
1624
1680
|
|
|
1625
1681
|
switch (children .length)
|
|
1626
1682
|
{
|
|
@@ -1665,12 +1721,12 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1665
1721
|
}
|
|
1666
1722
|
}
|
|
1667
1723
|
},
|
|
1668
|
-
sceneObject (
|
|
1724
|
+
sceneObject (scene)
|
|
1669
1725
|
{
|
|
1670
|
-
if (!(
|
|
1726
|
+
if (!(scene instanceof Object))
|
|
1671
1727
|
return null;
|
|
1672
1728
|
|
|
1673
|
-
const nodes = this .sceneNodesArray (
|
|
1729
|
+
const nodes = this .sceneNodesArray (scene .nodes);
|
|
1674
1730
|
|
|
1675
1731
|
switch (nodes .length)
|
|
1676
1732
|
{
|
|
@@ -1687,7 +1743,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1687
1743
|
const
|
|
1688
1744
|
scene = this .getExecutionContext (),
|
|
1689
1745
|
groupNode = scene .createNode ("Group", false),
|
|
1690
|
-
name = this .sanitizeName (
|
|
1746
|
+
name = this .sanitizeName (scene .name);
|
|
1691
1747
|
|
|
1692
1748
|
if (name)
|
|
1693
1749
|
{
|
|
@@ -1756,7 +1812,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1756
1812
|
scene .addExportedNode (scene .getUniqueExportName (name || `Animation${this .animations}`), groupNode);
|
|
1757
1813
|
scene .addExportedNode (scene .getUniqueExportName (`Timer${this .animations}`), timeSensorNode);
|
|
1758
1814
|
|
|
1759
|
-
timeSensorNode ._description = animation .name || `Animation ${this .animations}`;
|
|
1815
|
+
timeSensorNode ._description = this .description (animation .name) || `Animation ${this .animations}`;
|
|
1760
1816
|
groupNode ._children .push (timeSensorNode, ... channelNodes);
|
|
1761
1817
|
|
|
1762
1818
|
timeSensorNode .setup ();
|
|
@@ -1777,7 +1833,6 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1777
1833
|
.filter (input => input ?.array .length)
|
|
1778
1834
|
.reduce ((value, input) => Math .max (value, input .array .at (-1)), 0);
|
|
1779
1835
|
|
|
1780
|
-
timeSensorNode ._loop = DEVELOPMENT;
|
|
1781
1836
|
timeSensorNode ._cycleInterval = cycleInterval;
|
|
1782
1837
|
|
|
1783
1838
|
return channels
|
|
@@ -1794,7 +1849,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1794
1849
|
if (!(target instanceof Object))
|
|
1795
1850
|
return null;
|
|
1796
1851
|
|
|
1797
|
-
const node = this .
|
|
1852
|
+
const node = this .nodes [target .node] ?.transformNode;
|
|
1798
1853
|
|
|
1799
1854
|
if (!node)
|
|
1800
1855
|
return null;
|
|
@@ -1875,9 +1930,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
1875
1930
|
materialNode .setup ();
|
|
1876
1931
|
appearanceNode .setup ();
|
|
1877
1932
|
|
|
1878
|
-
this .defaultAppearance = appearanceNode;
|
|
1879
|
-
|
|
1880
|
-
return appearanceNode;
|
|
1933
|
+
return this .defaultAppearance = appearanceNode;
|
|
1881
1934
|
},
|
|
1882
1935
|
createMultiTextureTransform (materialNode)
|
|
1883
1936
|
{
|
|
@@ -2097,13 +2150,13 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
2097
2150
|
scene = this .getExecutionContext (),
|
|
2098
2151
|
geometryNode = scene .createNode ("IndexedTriangleSet", false);
|
|
2099
2152
|
|
|
2100
|
-
geometryNode ._solid =
|
|
2153
|
+
geometryNode ._solid = !material ?.doubleSided;
|
|
2101
2154
|
geometryNode ._index = indices .array;
|
|
2102
2155
|
geometryNode ._color = this .createColor (attributes .COLOR [0], material);
|
|
2103
2156
|
geometryNode ._texCoord = this .createMultiTextureCoordinate (attributes .TEXCOORD, material);
|
|
2104
2157
|
geometryNode ._normal = this .createNormal (attributes .NORMAL);
|
|
2105
2158
|
geometryNode ._coord = this .createCoordinate (attributes .POSITION);
|
|
2106
|
-
geometryNode ._normalPerVertex = !! geometryNode ._normal;
|
|
2159
|
+
geometryNode ._normalPerVertex = !! geometryNode ._normal .getValue ();
|
|
2107
2160
|
|
|
2108
2161
|
this .attributesJointsArray (skin, attributes .JOINTS, attributes .WEIGHTS);
|
|
2109
2162
|
this .skinGeometry (skin, geometryNode);
|
|
@@ -2118,12 +2171,12 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
2118
2171
|
scene = this .getExecutionContext (),
|
|
2119
2172
|
geometryNode = scene .createNode ("TriangleSet", false);
|
|
2120
2173
|
|
|
2121
|
-
geometryNode ._solid =
|
|
2174
|
+
geometryNode ._solid = !material ?.doubleSided;
|
|
2122
2175
|
geometryNode ._color = this .createColor (attributes .COLOR [0], material);
|
|
2123
2176
|
geometryNode ._texCoord = this .createMultiTextureCoordinate (attributes .TEXCOORD, material);
|
|
2124
2177
|
geometryNode ._normal = this .createNormal (attributes .NORMAL);
|
|
2125
2178
|
geometryNode ._coord = this .createCoordinate (attributes .POSITION);
|
|
2126
|
-
geometryNode ._normalPerVertex = !! geometryNode ._normal;
|
|
2179
|
+
geometryNode ._normalPerVertex = !! geometryNode ._normal .getValue ();
|
|
2127
2180
|
|
|
2128
2181
|
this .attributesJointsArray (skin, attributes .JOINTS, attributes .WEIGHTS);
|
|
2129
2182
|
this .skinGeometry (skin, geometryNode);
|
|
@@ -2138,13 +2191,13 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
2138
2191
|
scene = this .getExecutionContext (),
|
|
2139
2192
|
geometryNode = scene .createNode ("IndexedTriangleStripSet", false);
|
|
2140
2193
|
|
|
2141
|
-
geometryNode ._solid =
|
|
2194
|
+
geometryNode ._solid = !material ?.doubleSided;
|
|
2142
2195
|
geometryNode ._index = indices .array;
|
|
2143
2196
|
geometryNode ._color = this .createColor (attributes .COLOR [0], material);
|
|
2144
2197
|
geometryNode ._texCoord = this .createMultiTextureCoordinate (attributes .TEXCOORD, material);
|
|
2145
2198
|
geometryNode ._normal = this .createNormal (attributes .NORMAL);
|
|
2146
2199
|
geometryNode ._coord = this .createCoordinate (attributes .POSITION);
|
|
2147
|
-
geometryNode ._normalPerVertex = !! geometryNode ._normal;
|
|
2200
|
+
geometryNode ._normalPerVertex = !! geometryNode ._normal .getValue ();
|
|
2148
2201
|
|
|
2149
2202
|
this .attributesJointsArray (skin, attributes .JOINTS, attributes .WEIGHTS);
|
|
2150
2203
|
this .skinGeometry (skin, geometryNode);
|
|
@@ -2159,12 +2212,12 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
2159
2212
|
scene = this .getExecutionContext (),
|
|
2160
2213
|
geometryNode = scene .createNode ("TriangleStripSet", false);
|
|
2161
2214
|
|
|
2162
|
-
geometryNode ._solid =
|
|
2215
|
+
geometryNode ._solid = !material ?.doubleSided;
|
|
2163
2216
|
geometryNode ._color = this .createColor (attributes .COLOR [0], material);
|
|
2164
2217
|
geometryNode ._texCoord = this .createMultiTextureCoordinate (attributes .TEXCOORD, material);
|
|
2165
2218
|
geometryNode ._normal = this .createNormal (attributes .NORMAL);
|
|
2166
2219
|
geometryNode ._coord = this .createCoordinate (attributes .POSITION);
|
|
2167
|
-
geometryNode ._normalPerVertex = !! geometryNode ._normal;
|
|
2220
|
+
geometryNode ._normalPerVertex = !! geometryNode ._normal .getValue ();
|
|
2168
2221
|
|
|
2169
2222
|
const coord = geometryNode ._coord;
|
|
2170
2223
|
|
|
@@ -2187,13 +2240,13 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
2187
2240
|
scene = this .getExecutionContext (),
|
|
2188
2241
|
geometryNode = scene .createNode ("IndexedTriangleFanSet", false);
|
|
2189
2242
|
|
|
2190
|
-
geometryNode ._solid =
|
|
2243
|
+
geometryNode ._solid = !material ?.doubleSided;
|
|
2191
2244
|
geometryNode ._index = indices .array;
|
|
2192
2245
|
geometryNode ._color = this .createColor (attributes .COLOR [0], material);
|
|
2193
2246
|
geometryNode ._texCoord = this .createMultiTextureCoordinate (attributes .TEXCOORD, material);
|
|
2194
2247
|
geometryNode ._normal = this .createNormal (attributes .NORMAL);
|
|
2195
2248
|
geometryNode ._coord = this .createCoordinate (attributes .POSITION);
|
|
2196
|
-
geometryNode ._normalPerVertex = !! geometryNode ._normal;
|
|
2249
|
+
geometryNode ._normalPerVertex = !! geometryNode ._normal .getValue ();
|
|
2197
2250
|
|
|
2198
2251
|
this .attributesJointsArray (skin, attributes .JOINTS, attributes .WEIGHTS);
|
|
2199
2252
|
this .skinGeometry (skin, geometryNode);
|
|
@@ -2208,12 +2261,12 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
2208
2261
|
scene = this .getExecutionContext (),
|
|
2209
2262
|
geometryNode = scene .createNode ("TriangleFanSet", false);
|
|
2210
2263
|
|
|
2211
|
-
geometryNode ._solid =
|
|
2264
|
+
geometryNode ._solid = !material ?.doubleSided;
|
|
2212
2265
|
geometryNode ._color = this .createColor (attributes .COLOR [0], material);
|
|
2213
2266
|
geometryNode ._texCoord = this .createMultiTextureCoordinate (attributes .TEXCOORD, material);
|
|
2214
2267
|
geometryNode ._normal = this .createNormal (attributes .NORMAL);
|
|
2215
2268
|
geometryNode ._coord = this .createCoordinate (attributes .POSITION);
|
|
2216
|
-
geometryNode ._normalPerVertex = !! geometryNode ._normal;
|
|
2269
|
+
geometryNode ._normalPerVertex = !! geometryNode ._normal .getValue ();
|
|
2217
2270
|
|
|
2218
2271
|
const coord = geometryNode ._coord;
|
|
2219
2272
|
|
|
@@ -2256,10 +2309,30 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
2256
2309
|
opaque = appearanceNode ._alphaMode .getValue () === "OPAQUE",
|
|
2257
2310
|
colorNode = scene .createNode (opaque ? "Color" : typeName, false);
|
|
2258
2311
|
|
|
2259
|
-
|
|
2312
|
+
const array = opaque && typeName !== "Color"
|
|
2260
2313
|
? color .array .filter ((_, i) => (i + 1) % 4)
|
|
2261
2314
|
: color .array;
|
|
2262
2315
|
|
|
2316
|
+
switch (color .componentType)
|
|
2317
|
+
{
|
|
2318
|
+
case 5120: // Int8Array
|
|
2319
|
+
case 5122: // Int16Array
|
|
2320
|
+
case 5124: // Int32Array
|
|
2321
|
+
break;
|
|
2322
|
+
case 5121: // Uint8Array
|
|
2323
|
+
colorNode ._color = array .map (v => v / 0xff);
|
|
2324
|
+
break;
|
|
2325
|
+
case 5123: // Uint16Array
|
|
2326
|
+
colorNode ._color = array .map (v => v / 0xffff);
|
|
2327
|
+
break;
|
|
2328
|
+
case 5125: // Uint32Array
|
|
2329
|
+
colorNode ._color = array .map (v => v / 0xffffffff);
|
|
2330
|
+
break;
|
|
2331
|
+
case 5126: // Float32Array
|
|
2332
|
+
colorNode ._color = array;
|
|
2333
|
+
break;
|
|
2334
|
+
}
|
|
2335
|
+
|
|
2263
2336
|
colorNode .setup ();
|
|
2264
2337
|
|
|
2265
2338
|
return color .colorNode = colorNode;
|
|
@@ -2417,7 +2490,10 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
2417
2490
|
|
|
2418
2491
|
const
|
|
2419
2492
|
index = skin .joints [jointsArray [v * 4 + i]],
|
|
2420
|
-
jointNode = this .
|
|
2493
|
+
jointNode = this .nodes [index] ?.transformNode;
|
|
2494
|
+
|
|
2495
|
+
if (!jointNode)
|
|
2496
|
+
continue;
|
|
2421
2497
|
|
|
2422
2498
|
jointNode ._skinCoordIndex .push (v + start);
|
|
2423
2499
|
jointNode ._skinCoordWeight .push (w);
|
|
@@ -2715,6 +2791,10 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, X3DParser .proto
|
|
|
2715
2791
|
|
|
2716
2792
|
return value;
|
|
2717
2793
|
},
|
|
2794
|
+
description (string)
|
|
2795
|
+
{
|
|
2796
|
+
return string ?.replace (/_+/g, " ") .trim () ?? "";
|
|
2797
|
+
},
|
|
2718
2798
|
});
|
|
2719
2799
|
|
|
2720
2800
|
export default GLTF2Parser;
|