Skip to content

Commit cb85437

Browse files
ref tests
1 parent bfc155e commit cb85437

1 file changed

Lines changed: 28 additions & 22 deletions

File tree

src/test/java/cam72cam/mod/model/common/OBJParserTest.java

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public void fullySpecifiedTriangle() throws Exception {
9090
float[] data = model.getVboData();
9191
Assert.assertEquals(3 * 12, data.length); // 3 verts * (pos3 + uv2 + color4 + nrm3)
9292

93-
// positions
93+
// Position
9494
Assert.assertEquals(0, data[0], 0.001);
9595
Assert.assertEquals(0, data[1], 0.001);
9696
Assert.assertEquals(0, data[2], 0.001);
@@ -101,13 +101,13 @@ public void fullySpecifiedTriangle() throws Exception {
101101
Assert.assertEquals(1, data[25], 0.001);
102102
Assert.assertEquals(0, data[26], 0.001);
103103

104-
// no mtl: default white baked into color
104+
// White as no Kd specified
105105
Assert.assertEquals(1, data[5], 0.001);
106106
Assert.assertEquals(1, data[6], 0.001);
107107
Assert.assertEquals(1, data[7], 0.001);
108108
Assert.assertEquals(1, data[8], 0.001);
109109

110-
// explicit normals
110+
// Normals
111111
Assert.assertEquals(0, data[9], 0.001);
112112
Assert.assertEquals(0, data[10], 0.001);
113113
Assert.assertEquals(1, data[11], 0.001);
@@ -133,7 +133,7 @@ public void quadTriangulates() throws Exception {
133133
"f 1/1/1 2/2/2 3/3/3 4/4/4\n"));
134134

135135
float[] data = model.getVboData();
136-
Assert.assertEquals(6 * 12, data.length); // quad -> 2 triangles
136+
Assert.assertEquals(6 * VAOLayout.POS_TEX_COLOR_NORMAL.getStride(), data.length); // Triangulated
137137
}
138138

139139
@Test
@@ -150,6 +150,7 @@ public void groups() throws Exception {
150150
ModelGroup firstGroup = iterator.next().getValue();
151151
ModelGroup secondGroup = iterator.next().getValue();
152152
Assert.assertEquals("A", firstGroup.name);
153+
// Inclusive, 0-based
153154
Assert.assertEquals(0, firstGroup.faceStart);
154155
Assert.assertEquals(0, firstGroup.faceEnd);
155156
Assert.assertEquals("B", secondGroup.name);
@@ -168,7 +169,7 @@ public void missingUvAndNormal() throws Exception {
168169
float[] data = model.getVboData();
169170
Assert.assertEquals(3 * 9, data.length); // pos3 + uv2 + color4, no normal
170171

171-
// positions preserved
172+
// Positions
172173
Assert.assertEquals(0, data[0], 0.001);
173174
Assert.assertEquals(0, data[1], 0.001);
174175
Assert.assertEquals(0, data[2], 0.001);
@@ -179,13 +180,21 @@ public void missingUvAndNormal() throws Exception {
179180
Assert.assertEquals(1, data[19], 0.001);
180181
Assert.assertEquals(0, data[20], 0.001);
181182

182-
// default white color
183+
// UV defaults to 0.5
184+
for (int i = 0; i < 3; i ++) {
185+
int idx = i * VAOLayout.POS_TEX_COLOR.getStride() +
186+
VAOLayout.POS_TEX_COLOR.getOffset(VAOLayout.Usage.UV);
187+
188+
Assert.assertEquals(0.5, data[idx], 1E-8);
189+
Assert.assertEquals(0.5, data[idx + 1], 1E-8);
190+
}
191+
192+
// Color is white
183193
Assert.assertEquals(1, data[5], 0.001);
184194
Assert.assertEquals(1, data[6], 0.001);
185195
Assert.assertEquals(1, data[7], 0.001);
186196
Assert.assertEquals(1, data[8], 0.001);
187197

188-
// UVs must be present (repacked 0.5 fallback) and finite
189198
assertValid(data);
190199
}
191200

@@ -201,10 +210,8 @@ public void missingNormal() throws Exception {
201210
Assert.assertEquals(VAOLayout.POS_TEX_COLOR.getStride(), model.getLayout().getStride());
202211

203212
float[] data = model.getVboData();
204-
Assert.assertEquals(3 * 9, data.length);
205-
Assert.assertEquals(0, data[0], 0.001);
206-
Assert.assertEquals(1, data[9], 0.001);
207-
Assert.assertEquals(0, data[18], 0.001);
213+
Assert.assertEquals(3 * VAOLayout.POS_TEX_COLOR.getStride(), data.length);
214+
// Don't have normal in VBO
208215
assertValid(data);
209216
}
210217

@@ -220,21 +227,24 @@ public void missingUv() throws Exception {
220227
Assert.assertEquals(VAOLayout.POS_TEX_COLOR_NORMAL.getStride(), model.getLayout().getStride());
221228

222229
float[] data = model.getVboData();
223-
Assert.assertEquals(3 * 12, data.length);
230+
Assert.assertEquals(3 * VAOLayout.POS_TEX_COLOR_NORMAL.getStride(), data.length);
224231

225-
// normals preserved
226-
Assert.assertEquals(0, data[9], 0.001);
227-
Assert.assertEquals(0, data[10], 0.001);
228-
Assert.assertEquals(1, data[11], 0.001);
229-
Assert.assertEquals(1, data[23], 0.001);
232+
// Missing UVs have 0.5 by default
233+
for (int i = 0; i < 3; i ++) {
234+
int idx = i * VAOLayout.POS_TEX_COLOR_NORMAL.getStride() +
235+
VAOLayout.POS_TEX_COLOR_NORMAL.getOffset(VAOLayout.Usage.UV);
236+
237+
Assert.assertEquals(0.5, data[idx], 1E-8);
238+
Assert.assertEquals(0.5, data[idx + 1], 1E-8);
239+
}
230240

231241
assertValid(data);
232242
}
233243

234244
@Test(expected = MalformedModelException.class)
235245
public void nanUvThrows() throws Exception {
236246
ModelLoader.load(obj(defaultPos() +
237-
"vt NaN NaN NaN\n" +
247+
"vt NaN NaN \n" +
238248
"f 1/1 2/1 3/1\n"));
239249
}
240250

@@ -256,10 +266,6 @@ public void degenerateFaceIgnored() throws Exception {
256266
Assert.assertEquals(0, model.getVboData().length);
257267
}
258268

259-
// ------------------------------------------------------------------
260-
// Backwards compatibility: identical vertex data to the legacy OBJ pipeline
261-
// ------------------------------------------------------------------
262-
263269
@Test
264270
public void matchesOldVbo() throws Exception {
265271
// Only triangle faces, as triangulation is a separate concern, not part of this comparison

0 commit comments

Comments
 (0)