@@ -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