Skip to content

Commit

Permalink
#5576: Add unit test checking an ASE model with a non-identity NODE_T…
Browse files Browse the repository at this point in the history
…M matrix, which should be applied to the vertex normals of the surface.
  • Loading branch information
codereader committed Apr 5, 2021
1 parent 271f798 commit 4ecedd1
Show file tree
Hide file tree
Showing 2 changed files with 208 additions and 0 deletions.
28 changes: 28 additions & 0 deletions test/Models.cpp
Expand Up @@ -120,6 +120,11 @@ TEST_F(AseImportTest, VertexAndTriangleCount)
EXPECT_EQ(model->getSurfaceCount(), 1);
EXPECT_EQ(model->getSurface(0).getNumVertices(), 24);
EXPECT_EQ(model->getSurface(0).getNumTriangles(), 12);

model = GlobalModelCache().getModel("models/ase/gauge_needle.ase");
EXPECT_EQ(model->getSurfaceCount(), 1);
EXPECT_EQ(model->getSurface(0).getNumVertices(), 14);
EXPECT_EQ(model->getSurface(0).getNumTriangles(), 11);
}

TEST_F(AseImportTest, TriangleWindingCW)
Expand Down Expand Up @@ -302,4 +307,27 @@ TEST_F(AseImportTest, VertexColours)
expectVertexWithColour(model->getSurface(0), Vertex3f(19, -19, 2), Vector3(0, 0, 0));
}

// Tests the NODE_TM transform application to vertex normals
TEST_F(AseImportTest, VertexNormalTransformation)
{
auto model = GlobalModelCache().getModel("models/ase/gauge_needle.ase");
EXPECT_EQ(model->getSurfaceCount(), 1);

// Check for a few specific vertex/colour combinations (values taken directly from the TDM parse result)
expectVertexWithNormal(model->getSurface(0), Vertex3f(-0.140799999, -0.745599985, 0.125799999), Normal3f(0, -1, 0));
expectVertexWithNormal(model->getSurface(0), Vertex3f(0.188199997, -0.745599985, 0.125900000), Normal3f(0, -1, 0));
expectVertexWithNormal(model->getSurface(0), Vertex3f(-0.0364999995, -0.745599985, 0.0203000009), Normal3f(0, -1, 0));
expectVertexWithNormal(model->getSurface(0), Vertex3f(0.0839999989, -0.745599985, 0.0203000009), Normal3f(0, -1, 0));
expectVertexWithNormal(model->getSurface(0), Vertex3f(-0.140900001, -0.745599985, 0.331900001), Normal3f(0.000499708927, -0.999999583, 0.000800181471));
expectVertexWithNormal(model->getSurface(0), Vertex3f(0.188199997, -0.745599985, 0.331999987), Normal3f(-3.27272573e-07, -0.999999583, 0.000899999577));
expectVertexWithNormal(model->getSurface(0), Vertex3f(-0.0218000002, -0.744899988, 2.23850012), Normal3f(0.0139053408, -0.999789357, -0.0150947841));
expectVertexWithNormal(model->getSurface(0), Vertex3f(0.0679000020, -0.742100000, 2.23850012), Normal3f(0.0298263635, -0.996775806, -0.0744873509));
expectVertexWithNormal(model->getSurface(0), Vertex3f(-0.133800000, -0.745599985, 2.29660010), Normal3f(1.23635652e-06, -0.999994278, -0.00339998049));
expectVertexWithNormal(model->getSurface(0), Vertex3f(0.179800004, -0.745599985, 2.29670000), Normal3f(0.00370575022, -0.999861956, -0.0161980372));
expectVertexWithNormal(model->getSurface(0), Vertex3f(0.0229000002, -0.745599985, 2.69810009), Normal3f(0, -1, 0));
expectVertexWithNormal(model->getSurface(0), Vertex3f(-0.0218000002, -0.744899988, 2.23850012), Normal3f(-0.869799972, 0.00000000, -0.493404597));
expectVertexWithNormal(model->getSurface(0), Vertex3f(-0.133800000, -0.745599985, 2.29660010), Normal3f(-0.460478902, 0.00000000, -0.887670696));
expectVertexWithNormal(model->getSurface(0), Vertex3f(-0.140900001, -0.745599985, 0.331900001), Normal3f(-0.998054981, -0.00000000, 0.0623391047));
}

}
180 changes: 180 additions & 0 deletions test/resources/tdm/models/ase/gauge_needle.ase
@@ -0,0 +1,180 @@
*3DSMAX_ASCIIEXPORT 200
*COMMENT "AsciiExport Version 2.00 - Thu May 10 18:01:29 2007"
*SCENE {
*SCENE_FILENAME ""
*SCENE_FIRSTFRAME 0
*SCENE_LASTFRAME 100
*SCENE_FRAMESPEED 30
*SCENE_TICKSPERFRAME 160
*SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
*SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
}
*MATERIAL_LIST {
*MATERIAL_COUNT 1
*MATERIAL 0 {
*MATERIAL_NAME "Material #25"
*MATERIAL_CLASS "Standard"
*MATERIAL_AMBIENT 0.5880 0.5880 0.5880
*MATERIAL_DIFFUSE 0.5880 0.5880 0.5880
*MATERIAL_SPECULAR 0.9000 0.9000 0.9000
*MATERIAL_SHINE 0.1000
*MATERIAL_SHINESTRENGTH 0.0000
*MATERIAL_TRANSPARENCY 0.0000
*MATERIAL_WIRESIZE 1.0000
*MATERIAL_SHADING Blinn
*MATERIAL_XP_FALLOFF 0.0000
*MATERIAL_SELFILLUM 0.0000
*MATERIAL_FALLOFF In
*MATERIAL_XP_TYPE Filter
*MAP_DIFFUSE {
*MAP_NAME "Map #1"
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1.0000
*BITMAP "//base/bc_gaugesteam"
*MAP_TYPE Screen
*UVW_U_OFFSET 0.0000
*UVW_V_OFFSET 0.0000
*UVW_U_TILING 1.0000
*UVW_V_TILING 1.0000
*UVW_ANGLE 0.0000
*UVW_BLUR 1.0000
*UVW_BLUR_OFFSET 0.0000
*UVW_NOUSE_AMT 1.0000
*UVW_NOISE_SIZE 1.0000
*UVW_NOISE_LEVEL 1
*UVW_NOISE_PHASE 0.0000
*BITMAP_FILTER Pyramidal
}
}
}
*GEOMOBJECT {
*NODE_NAME "Box01"
*NODE_TM {
*NODE_NAME "Box01"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.1000 0.0000 0.0004
*TM_ROW1 -0.0004 -0.0000 1.1000
*TM_ROW2 0.0000 -1.1000 -0.0000
*TM_ROW3 0.0233 -0.7796 0.2243
*TM_POS 0.0233 -0.7796 0.2243
*TM_ROTAXIS -1.0000 0.0002 -0.0002
*TM_ROTANGLE 1.5708
*TM_SCALE 1.1000 1.1000 1.1000
*TM_SCALEAXIS 0.0000 0.0000 0.0000
*TM_SCALEAXISANG 0.0000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 12
*MESH_NUMFACES 11
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 -0.0365 -0.7456 0.0203
*MESH_VERTEX 1 0.0840 -0.7456 0.0203
*MESH_VERTEX 2 -0.1408 -0.7456 0.1258
*MESH_VERTEX 3 0.1882 -0.7456 0.1259
*MESH_VERTEX 4 -0.1409 -0.7456 0.3319
*MESH_VERTEX 5 0.1882 -0.7456 0.3320
*MESH_VERTEX 6 -0.0218 -0.7449 2.2385
*MESH_VERTEX 7 0.0679 -0.7421 2.2385
*MESH_VERTEX 8 -0.1338 -0.7456 2.2966
*MESH_VERTEX 9 0.1798 -0.7456 2.2967
*MESH_VERTEX 10 0.0229 -0.7456 2.6981
*MESH_VERTEX 11 -0.0218 -0.7434 2.2385
}
*MESH_FACE_LIST {
*MESH_FACE 0: A: 2 B: 0 C: 3 AB: 1 BC: 0 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0
*MESH_FACE 1: A: 1 B: 3 C: 0 AB: 1 BC: 0 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0
*MESH_FACE 2: A: 4 B: 2 C: 5 AB: 1 BC: 0 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0
*MESH_FACE 3: A: 3 B: 5 C: 2 AB: 1 BC: 0 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0
*MESH_FACE 4: A: 6 B: 4 C: 7 AB: 1 BC: 0 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0
*MESH_FACE 5: A: 5 B: 7 C: 4 AB: 1 BC: 0 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0
*MESH_FACE 6: A: 8 B: 6 C: 9 AB: 1 BC: 0 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0
*MESH_FACE 7: A: 7 B: 9 C: 6 AB: 1 BC: 0 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0
*MESH_FACE 8: A: 9 B: 10 C: 8 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0
*MESH_FACE 9: A: 6 B: 8 C: 11 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 7 *MESH_MTLID 0
*MESH_FACE 10: A: 11 B: 4 C: 6 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 7 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 12
*MESH_TVERTLIST {
*MESH_TVERT 0 0.9713 -0.1757 0.0000
*MESH_TVERT 1 1.0306 -0.1757 0.0000
*MESH_TVERT 2 0.9200 -0.1588 0.0000
*MESH_TVERT 3 1.0820 -0.1587 0.0000
*MESH_TVERT 4 0.9202 -0.1258 0.0000
*MESH_TVERT 5 1.0822 -0.1257 0.0000
*MESH_TVERT 6 0.9808 0.1802 0.0000
*MESH_TVERT 7 1.0250 0.1802 0.0000
*MESH_TVERT 8 0.9258 0.1895 0.0000
*MESH_TVERT 9 1.0802 0.1896 0.0000
*MESH_TVERT 10 1.0033 0.2539 0.0000
*MESH_TVERT 11 0.9808 0.1802 0.0000
}
*MESH_NUMTVFACES 11
*MESH_TFACELIST {
*MESH_TFACE 0 2 0 3
*MESH_TFACE 1 1 3 0
*MESH_TFACE 2 4 2 5
*MESH_TFACE 3 3 5 2
*MESH_TFACE 4 6 4 7
*MESH_TFACE 5 5 7 4
*MESH_TFACE 6 8 6 9
*MESH_TFACE 7 7 9 6
*MESH_TFACE 8 9 10 8
*MESH_TFACE 9 6 8 11
*MESH_TFACE 10 11 4 6
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 2 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 0 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 3 0.0000 0.0000 1.0000
*MESH_FACENORMAL 1 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 1 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 3 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 0 0.0000 0.0000 1.0000
*MESH_FACENORMAL 2 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 4 0.0005 0.0008 1.0000
*MESH_VERTEXNORMAL 2 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 5 0.0000 0.0009 1.0000
*MESH_FACENORMAL 3 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 3 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 5 0.0000 0.0009 1.0000
*MESH_VERTEXNORMAL 2 0.0000 0.0000 1.0000
*MESH_FACENORMAL 4 0.0312 -0.0016 0.9995
*MESH_VERTEXNORMAL 6 0.0139 -0.0151 0.9998
*MESH_VERTEXNORMAL 4 0.0005 0.0008 1.0000
*MESH_VERTEXNORMAL 7 0.0298 -0.0745 0.9968
*MESH_FACENORMAL 5 0.0000 0.0018 1.0000
*MESH_VERTEXNORMAL 5 0.0000 0.0009 1.0000
*MESH_VERTEXNORMAL 7 0.0298 -0.0745 0.9968
*MESH_VERTEXNORMAL 4 0.0005 0.0008 1.0000
*MESH_FACENORMAL 6 -0.0000 -0.0120 0.9999
*MESH_VERTEXNORMAL 8 -0.0000 -0.0034 1.0000
*MESH_VERTEXNORMAL 6 0.0139 -0.0151 0.9998
*MESH_VERTEXNORMAL 9 0.0037 -0.0162 0.9999
*MESH_FACENORMAL 7 0.0309 -0.1193 0.9924
*MESH_VERTEXNORMAL 7 0.0298 -0.0745 0.9968
*MESH_VERTEXNORMAL 9 0.0037 -0.0162 0.9999
*MESH_VERTEXNORMAL 6 0.0139 -0.0151 0.9998
*MESH_FACENORMAL 8 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 9 0.0037 -0.0162 0.9999
*MESH_VERTEXNORMAL 10 0.0000 0.0000 1.0000
*MESH_VERTEXNORMAL 8 -0.0000 -0.0034 1.0000
*MESH_FACENORMAL 9 -0.4608 -0.8875 0.0000
*MESH_VERTEXNORMAL 6 -0.8700 -0.4931 0.0000
*MESH_VERTEXNORMAL 8 -0.4608 -0.8875 0.0000
*MESH_VERTEXNORMAL 11 -0.8722 -0.4892 0.0000
*MESH_FACENORMAL 10 -0.9980 0.0627 0.0000
*MESH_VERTEXNORMAL 11 -0.8722 -0.4892 0.0000
*MESH_VERTEXNORMAL 4 -0.9980 0.0627 0.0000
*MESH_VERTEXNORMAL 6 -0.8700 -0.4931 0.0000
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}

0 comments on commit 4ecedd1

Please sign in to comment.