mirror of
https://git.mirrors.martin98.com/https://github.com/google/draco
synced 2025-08-13 04:39:07 +08:00
Fixed normal and uvs cc adapter. Now stoormtrup test are fine
This commit is contained in:
parent
382c462876
commit
676b05bd22
Binary file not shown.
@ -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
|
||||
|
@ -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')
|
||||
|
@ -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;
|
||||
}
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user