diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java index a3a59f3a7..737153fcd 100644 --- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java +++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java @@ -1033,12 +1033,14 @@ public class GltfLoader implements AssetLoader { bw.bone.addChild(cbw.bone); bw.children.add(childIndex); } else { - JsonObject childNode = nodes.get(childIndex).getAsJsonObject(); - //The child might be a Geom - if (getAsInteger(childNode, "mesh") != null) { - //this is a geometry, let's load it as a spatial - bw.attachedSpatial = (Spatial) readNode(childIndex); - } + //The child might be a Node + //Creating a dummy node to reed the subgraph + Node n = new Node(); + readChild(n, child); + Spatial s = n.getChild(0); + //removing the spatial from the dummy node, it will be attached to the attachment node of the bone + s.removeFromParent(); + bw.attachedSpatial = s; } } diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TrackData.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TrackData.java index fdbf892fa..834785b79 100644 --- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TrackData.java +++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TrackData.java @@ -1,5 +1,6 @@ package com.jme3.scene.plugins.gltf; +import com.jme3.asset.AssetLoadException; import com.jme3.math.*; import java.util.*; @@ -119,9 +120,19 @@ public class TrackData { } } + checkTimesConsistantcy(); + length = times[times.length - 1]; } + public void checkTimesConsistantcy() { + if ((translations != null && times.length != translations.length) + || (rotations != null && times.length != rotations.length) + || (scales != null && times.length != scales.length)) { + throw new AssetLoadException("Inconsistent animation sampling "); + } + } + private void populateTransform(Type type, int index, List keyFrames, KeyFrame currentKeyFrame, TransformIndices transformIndices) { Object transform = getTransform(type, currentKeyFrame); if (transform != null) { @@ -178,14 +189,8 @@ public class TrackData { } public int getNbKeyFrames(){ - if(translations != null){ - return translations.length; - } - if(rotations != null){ - return rotations.length; - } - if(scales != null){ - return scales.length; + if (times != null) { + return times.length; } return 0; } @@ -234,13 +239,13 @@ public class TrackData { } private void ensureArraysLength() { - if (translations != null && translations.length < times.length) { + if (translations != null && translations.length != times.length) { translations = new Vector3f[times.length]; } - if (rotations != null && rotations.length < times.length) { + if (rotations != null && rotations.length != times.length) { rotations = new Quaternion[times.length]; } - if (scales != null && scales.length < times.length) { + if (scales != null && scales.length != times.length) { scales = new Vector3f[times.length]; } }