Skip to content

Commit cde73b3

Browse files
authored
Solve AssetLoadException importing gltf with empty scene (#1442)
* Fix for gltf empty scene * Fix grammar error in comment and add test
1 parent 1d815ee commit cde73b3

File tree

3 files changed

+162
-0
lines changed

3 files changed

+162
-0
lines changed

jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ public void readScenes(JsonPrimitive defaultScene, Node rootNode) throws IOExcep
208208
sceneNode.setCullHint(Spatial.CullHint.Always);
209209

210210
sceneNode.setName(getAsString(scene.getAsJsonObject(), "name"));
211+
// If the scene is empty, ignore it.
212+
if (!scene.getAsJsonObject().has("nodes")) {
213+
continue;
214+
}
211215
JsonArray sceneNodes = scene.getAsJsonObject().getAsJsonArray("nodes");
212216
sceneNode = customContentManager.readExtensionAndExtras("scene", scene, sceneNode);
213217
rootNode.attachChild(sceneNode);

jme3-plugins/src/test/java/com/jme3/scene/plugins/gltf/GltfLoaderTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.jme3.scene.plugins.gltf;
22

3+
import com.jme3.asset.AssetLoadException;
34
import com.jme3.asset.AssetManager;
45
import com.jme3.material.plugin.TestMaterialWrite;
56
import com.jme3.scene.Node;
67
import com.jme3.scene.Spatial;
78
import com.jme3.system.JmeSystem;
9+
import org.junit.Assert;
810
import org.junit.Before;
911
import org.junit.Test;
1012

@@ -33,6 +35,16 @@ public void testLoad() {
3335
// dumpScene(scene, 0);
3436
}
3537

38+
@Test
39+
public void testLoadEmptyScene() {
40+
try {
41+
Spatial scene = assetManager.loadModel("gltf/box/boxWithEmptyScene.gltf");
42+
dumpScene(scene, 0);
43+
} catch (AssetLoadException ex) {
44+
ex.printStackTrace();
45+
Assert.fail("Failed to import gltf model with empty scene");
46+
}
47+
}
3648

3749
private void dumpScene(Spatial s, int indent) {
3850
System.err.println(indentString.substring(0, indent) + s.getName() + " (" + s.getClass().getSimpleName() + ") / " +
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
{
2+
"asset": {
3+
"generator": "COLLADA2GLTF",
4+
"version": "2.0"
5+
},
6+
"scene": 0,
7+
"scenes": [
8+
{
9+
"name":"box",
10+
"nodes": [
11+
0
12+
]
13+
},
14+
{
15+
"name":"scene"
16+
}
17+
],
18+
"nodes": [
19+
{
20+
"children": [
21+
1
22+
],
23+
"matrix": [
24+
1.0,
25+
0.0,
26+
0.0,
27+
0.0,
28+
0.0,
29+
0.0,
30+
-1.0,
31+
0.0,
32+
0.0,
33+
1.0,
34+
0.0,
35+
0.0,
36+
0.0,
37+
0.0,
38+
0.0,
39+
1.0
40+
]
41+
},
42+
{
43+
"mesh": 0
44+
}
45+
],
46+
"meshes": [
47+
{
48+
"primitives": [
49+
{
50+
"attributes": {
51+
"NORMAL": 1,
52+
"POSITION": 2
53+
},
54+
"indices": 0,
55+
"mode": 4,
56+
"material": 0
57+
}
58+
],
59+
"name": "Mesh"
60+
}
61+
],
62+
"accessors": [
63+
{
64+
"bufferView": 0,
65+
"byteOffset": 0,
66+
"componentType": 5123,
67+
"count": 36,
68+
"max": [
69+
23
70+
],
71+
"min": [
72+
0
73+
],
74+
"type": "SCALAR"
75+
},
76+
{
77+
"bufferView": 1,
78+
"byteOffset": 0,
79+
"componentType": 5126,
80+
"count": 24,
81+
"max": [
82+
1.0,
83+
1.0,
84+
1.0
85+
],
86+
"min": [
87+
-1.0,
88+
-1.0,
89+
-1.0
90+
],
91+
"type": "VEC3"
92+
},
93+
{
94+
"bufferView": 1,
95+
"byteOffset": 288,
96+
"componentType": 5126,
97+
"count": 24,
98+
"max": [
99+
0.5,
100+
0.5,
101+
0.5
102+
],
103+
"min": [
104+
-0.5,
105+
-0.5,
106+
-0.5
107+
],
108+
"type": "VEC3"
109+
}
110+
],
111+
"materials": [
112+
{
113+
"pbrMetallicRoughness": {
114+
"baseColorFactor": [
115+
0.800000011920929,
116+
0.0,
117+
0.0,
118+
1.0
119+
],
120+
"metallicFactor": 0.0
121+
},
122+
"name": "Red"
123+
}
124+
],
125+
"bufferViews": [
126+
{
127+
"buffer": 0,
128+
"byteOffset": 576,
129+
"byteLength": 72,
130+
"target": 34963
131+
},
132+
{
133+
"buffer": 0,
134+
"byteOffset": 0,
135+
"byteLength": 576,
136+
"byteStride": 12,
137+
"target": 34962
138+
}
139+
],
140+
"buffers": [
141+
{
142+
"byteLength": 648,
143+
"uri": "Box0.bin"
144+
}
145+
]
146+
}

0 commit comments

Comments
 (0)