Fixed normal and uvs cc adapter. Now stoormtrup test are fine

This commit is contained in:
Federico De Felici 2018-05-11 21:59:02 +02:00
parent 382c462876
commit 676b05bd22
4 changed files with 32 additions and 17 deletions

Binary file not shown.

View File

@ -69,8 +69,8 @@ class Draco:
result.normals_len = mesh.normals_num * 3
result.normals_num = mesh.normals_num
result.uvs = mesh.uvs[0:mesh.uvs_num * 3]
result.uvs_len = mesh.uvs_num * 3
result.uvs = mesh.uvs[0:mesh.uvs_num * 2]
result.uvs_len = mesh.uvs_num * 2
result.uvs_num = mesh.uvs_num
# Free memory allocated by the lib

View File

@ -34,14 +34,22 @@ class DracoTest(unittest.TestCase):
def test_valid_trooper_drc(self):
mesh = self.drc.decode(os.path.join(dir_path, 'stormtrooper.drc'))
# Normal check
self.assertGreater(mesh.normals_num, 0, 'Number of normals')
self.assertGreater(mesh.normals_len, 0,'Length of normals array')
self.assertGreater(len(mesh.normals), 0,'Length of normals array by len')
# Faces check
self.assertEqual(6518, mesh.faces_num, 'Number of faces')
self.assertEqual(19554, mesh.faces_len,'Length of faces array precalculated')
self.assertEqual(19554, len(mesh.faces),'Length of faces array by len')
# Vertices check
self.assertEqual(5176, mesh.vertices_num, 'Number of vertices')
self.assertEqual(15528, mesh.vertices_len,'Length of vertices array precalculated')
self.assertEqual(15528, len(mesh.vertices),'Length of vertices array by len')
# Normals check
self.assertEqual(5176, mesh.normals_num, 'Number of normals')
self.assertEqual(15528, mesh.normals_len, 'Length of normals array precalculated')
self.assertEqual(15528, len(mesh.normals),'Length of normals array by len')
# Uvs check
self.assertGreater(mesh.uvs_num, 0, 'Number of uvs')
self.assertGreater(mesh.uvs_len, 0,'Length of uvs array')
self.assertGreater(len(mesh.uvs), 0,'Length of uvs array by len')
self.assertEqual(5176, mesh.uvs_num, 'Number of uvs')
self.assertEqual(10352, mesh.uvs_len, 'Length of uvs array')
self.assertEqual(10352, len(mesh.uvs), 'Length of uvs array by len')
def test_unexistent_drc(self):
self.assertRaises(Exception, self.drc.decode, 'unexistent.drc')

View File

@ -58,7 +58,7 @@ namespace draco {
}
int num_normals = drc_mesh->num_points();
out_mesh->normals = new float[num_normals];
out_mesh->normals = new float[num_normals * 3];
out_mesh->normals_num = num_normals;
for (int i = 0; i < num_normals; i++) {
@ -84,20 +84,21 @@ namespace draco {
}
int num_uvs = drc_mesh->num_points();
out_mesh->normals = new float[num_uvs * 2];
out_mesh->normals_num = num_uvs;
out_mesh->uvs = new float[num_uvs * 2];
out_mesh->uvs_num = num_uvs;
for (int i = 0; i < num_uvs; i++) {
draco::PointIndex pi(i);
const draco::AttributeValueIndex val_index = uv_att->mapped_index(pi);
float out_uv[3];
bool is_ok = uv_att->ConvertValue<float, 3>(val_index, out_uv);
float out_uv[2];
//bool is_ok = uv_att->ConvertValue<float, 3>(val_index, out_uv);
bool is_ok = uv_att->ConvertValue<float, 2>(val_index, out_uv);
if (!is_ok) return;
out_mesh->uvs[i * 3 + 0] = out_uv[0];
out_mesh->uvs[i * 3 + 1] = out_uv[1];
out_mesh->uvs[i * 3 + 2] = out_uv[2];
out_mesh->uvs[i * 2 + 0] = out_uv[0];
out_mesh->uvs[i * 2 + 1] = out_uv[1];
//out_mesh->uvs[i * 3 + 2] = out_uv[2];
}
}
@ -119,6 +120,11 @@ namespace draco {
mesh->normals = nullptr;
mesh->normals_num = 0;
}
if (mesh->uvs) {
delete[] mesh->uvs;
mesh->uvs = nullptr;
mesh->uvs_num = 0;
}
delete mesh;
*mesh_ptr = nullptr;
}
@ -146,6 +152,7 @@ namespace draco {
decode_faces(drc_mesh, *res_mesh);
decode_vertices(drc_mesh, *res_mesh);
decode_normals(drc_mesh, *res_mesh);
decode_uvs(drc_mesh, *res_mesh);
return 0;
}
/*