3 #include <gtest/gtest.h>
4 #include <Eigen/Geometry>
13 TEST(TesseractURDFUnit, parse_mesh_material_dae)
16 const bool global_make_convex =
false;
17 const auto parse_mesh_fn =
23 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/tesseract_material_mesh.dae"/>)";
24 std::vector<tesseract_geometry::PolygonMesh::Ptr> meshes;
28 auto& mesh0 = meshes[1];
29 auto& mesh1 = meshes[2];
30 auto& mesh2 = meshes[3];
31 auto& mesh3 = meshes[0];
42 auto mesh0_normals = mesh0->getNormals();
43 ASSERT_TRUE(mesh0_normals !=
nullptr);
45 auto mesh1_normals = mesh1->getNormals();
46 ASSERT_TRUE(mesh1_normals !=
nullptr);
48 auto mesh2_normals = mesh2->getNormals();
49 ASSERT_TRUE(mesh2_normals !=
nullptr);
51 auto mesh3_normals = mesh3->getNormals();
52 ASSERT_TRUE(mesh3_normals !=
nullptr);
55 auto mesh0_material = mesh0->getMaterial();
56 EXPECT_TRUE(mesh0_material->getBaseColorFactor().isApprox(Eigen::Vector4d(0.7, 0.7, 0.7, 1), 0.01));
57 EXPECT_NEAR(mesh0_material->getMetallicFactor(), 0.0, 0.01);
58 EXPECT_NEAR(mesh0_material->getRoughnessFactor(), 0.5, 0.01);
59 EXPECT_TRUE(mesh0_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0, 0, 0, 1), 0.01));
61 auto mesh1_material = mesh1->getMaterial();
62 EXPECT_TRUE(mesh1_material->getBaseColorFactor().isApprox(Eigen::Vector4d(0.8, 0, 0, 1), 0.01));
63 EXPECT_NEAR(mesh1_material->getMetallicFactor(), 0.0, 0.01);
64 EXPECT_NEAR(mesh1_material->getRoughnessFactor(), 0.5, 0.01);
65 EXPECT_TRUE(mesh1_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0, 0, 0, 1), 0.01));
67 auto mesh2_material = mesh2->getMaterial();
68 EXPECT_TRUE(mesh2_material->getBaseColorFactor().isApprox(Eigen::Vector4d(0.05, 0.8, 0.05, 1), 0.01));
69 EXPECT_NEAR(mesh2_material->getMetallicFactor(), 0.0, 0.01);
70 EXPECT_NEAR(mesh2_material->getRoughnessFactor(), 0.5, 0.01);
71 EXPECT_TRUE(mesh2_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0.1, 0.1, 0.5, 1), 0.01));
73 auto mesh3_material = mesh3->getMaterial();
74 EXPECT_TRUE(mesh3_material->getBaseColorFactor().isApprox(Eigen::Vector4d(1, 1, 1, 1), 0.01));
75 EXPECT_NEAR(mesh3_material->getMetallicFactor(), 0, 0.01);
76 EXPECT_NEAR(mesh3_material->getRoughnessFactor(), 0.5, 0.01);
77 EXPECT_TRUE(mesh3_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0, 0, 0, 1), 0.01));
83 ASSERT_TRUE(mesh3->getTextures() !=
nullptr);
84 ASSERT_EQ(mesh3->getTextures()->size(), 1);
86 auto texture = mesh3->getTextures()->at(0);
87 EXPECT_EQ(texture->getTextureImage()->getResourceContents().size(), 38212);
92 #ifdef TESSERACT_ASSIMP_USE_PBRMATERIAL
93 TEST(TesseractURDFUnit, parse_mesh_material_gltf2)
96 const bool global_make_convex =
false;
97 const auto parse_mesh_fn =
103 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/tesseract_material_mesh.glb"/>)";
104 std::vector<tesseract_geometry::PolygonMesh::Ptr> meshes;
108 auto& mesh0 = meshes[0];
109 auto& mesh1 = meshes[1];
110 auto& mesh2 = meshes[2];
111 auto& mesh3 = meshes[3];
122 auto mesh0_normals = mesh0->getNormals();
123 ASSERT_TRUE(mesh0_normals !=
nullptr);
125 auto mesh1_normals = mesh1->getNormals();
126 ASSERT_TRUE(mesh1_normals !=
nullptr);
128 auto mesh2_normals = mesh2->getNormals();
129 ASSERT_TRUE(mesh2_normals !=
nullptr);
131 auto mesh3_normals = mesh3->getNormals();
132 ASSERT_TRUE(mesh3_normals !=
nullptr);
135 auto mesh0_material = mesh0->getMaterial();
136 EXPECT_TRUE(mesh0_material->getBaseColorFactor().isApprox(Eigen::Vector4d(0.7, 0.7, 0.7, 1), 0.01));
137 EXPECT_NEAR(mesh0_material->getMetallicFactor(), 0.0, 0.01);
138 EXPECT_NEAR(mesh0_material->getRoughnessFactor(), 0.5, 0.01);
139 EXPECT_TRUE(mesh0_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0, 0, 0, 1), 0.01));
141 auto mesh1_material = mesh1->getMaterial();
142 EXPECT_TRUE(mesh1_material->getBaseColorFactor().isApprox(Eigen::Vector4d(0.8, 0, 0, 1), 0.01));
143 EXPECT_NEAR(mesh1_material->getMetallicFactor(), 0.8, 0.01);
144 EXPECT_NEAR(mesh1_material->getRoughnessFactor(), 0.1, 0.01);
145 EXPECT_TRUE(mesh1_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0, 0, 0, 1), 0.01));
147 auto mesh2_material = mesh2->getMaterial();
148 EXPECT_TRUE(mesh2_material->getBaseColorFactor().isApprox(Eigen::Vector4d(0.05, 0.8, 0.05, 1), 0.01));
149 EXPECT_NEAR(mesh2_material->getMetallicFactor(), 0.9, 0.01);
150 EXPECT_NEAR(mesh2_material->getRoughnessFactor(), 0.7, 0.01);
151 EXPECT_TRUE(mesh2_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0.1, 0.1, 0.5, 1), 0.01));
153 auto mesh3_material = mesh3->getMaterial();
154 EXPECT_TRUE(mesh3_material->getBaseColorFactor().isApprox(Eigen::Vector4d(1, 1, 1, 1), 0.01));
155 EXPECT_NEAR(mesh3_material->getMetallicFactor(), 0, 0.01);
156 EXPECT_NEAR(mesh3_material->getRoughnessFactor(), 0.5, 0.01);
157 EXPECT_TRUE(mesh3_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0, 0, 0, 1), 0.01));
163 ASSERT_TRUE(mesh3->getTextures() !=
nullptr);
164 ASSERT_EQ(mesh3->getTextures()->size(), 1);
166 auto texture = mesh3->getTextures()->at(0);
167 EXPECT_EQ(texture->getTextureImage()->getResourceContents().size(), 38212);