mirror of
https://git.mirrors.martin98.com/https://github.com/google/draco
synced 2025-08-14 03:25:53 +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_len = mesh.normals_num * 3
|
||||||
result.normals_num = mesh.normals_num
|
result.normals_num = mesh.normals_num
|
||||||
|
|
||||||
result.uvs = mesh.uvs[0:mesh.uvs_num * 3]
|
result.uvs = mesh.uvs[0:mesh.uvs_num * 2]
|
||||||
result.uvs_len = mesh.uvs_num * 3
|
result.uvs_len = mesh.uvs_num * 2
|
||||||
result.uvs_num = mesh.uvs_num
|
result.uvs_num = mesh.uvs_num
|
||||||
|
|
||||||
# Free memory allocated by the lib
|
# Free memory allocated by the lib
|
||||||
|
@ -34,14 +34,22 @@ class DracoTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_valid_trooper_drc(self):
|
def test_valid_trooper_drc(self):
|
||||||
mesh = self.drc.decode(os.path.join(dir_path, 'stormtrooper.drc'))
|
mesh = self.drc.decode(os.path.join(dir_path, 'stormtrooper.drc'))
|
||||||
# Normal check
|
# Faces check
|
||||||
self.assertGreater(mesh.normals_num, 0, 'Number of normals')
|
self.assertEqual(6518, mesh.faces_num, 'Number of faces')
|
||||||
self.assertGreater(mesh.normals_len, 0,'Length of normals array')
|
self.assertEqual(19554, mesh.faces_len,'Length of faces array precalculated')
|
||||||
self.assertGreater(len(mesh.normals), 0,'Length of normals array by len')
|
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
|
# Uvs check
|
||||||
self.assertGreater(mesh.uvs_num, 0, 'Number of uvs')
|
self.assertEqual(5176, mesh.uvs_num, 'Number of uvs')
|
||||||
self.assertGreater(mesh.uvs_len, 0,'Length of uvs array')
|
self.assertEqual(10352, mesh.uvs_len, 'Length of uvs array')
|
||||||
self.assertGreater(len(mesh.uvs), 0,'Length of uvs array by len')
|
self.assertEqual(10352, len(mesh.uvs), 'Length of uvs array by len')
|
||||||
|
|
||||||
def test_unexistent_drc(self):
|
def test_unexistent_drc(self):
|
||||||
self.assertRaises(Exception, self.drc.decode, 'unexistent.drc')
|
self.assertRaises(Exception, self.drc.decode, 'unexistent.drc')
|
||||||
|
@ -58,7 +58,7 @@ namespace draco {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int num_normals = drc_mesh->num_points();
|
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;
|
out_mesh->normals_num = num_normals;
|
||||||
|
|
||||||
for (int i = 0; i < num_normals; i++) {
|
for (int i = 0; i < num_normals; i++) {
|
||||||
@ -84,20 +84,21 @@ namespace draco {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int num_uvs = drc_mesh->num_points();
|
int num_uvs = drc_mesh->num_points();
|
||||||
out_mesh->normals = new float[num_uvs * 2];
|
out_mesh->uvs = new float[num_uvs * 2];
|
||||||
out_mesh->normals_num = num_uvs;
|
out_mesh->uvs_num = num_uvs;
|
||||||
|
|
||||||
for (int i = 0; i < num_uvs; i++) {
|
for (int i = 0; i < num_uvs; i++) {
|
||||||
draco::PointIndex pi(i);
|
draco::PointIndex pi(i);
|
||||||
const draco::AttributeValueIndex val_index = uv_att->mapped_index(pi);
|
const draco::AttributeValueIndex val_index = uv_att->mapped_index(pi);
|
||||||
|
|
||||||
float out_uv[3];
|
float out_uv[2];
|
||||||
bool is_ok = uv_att->ConvertValue<float, 3>(val_index, out_uv);
|
//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;
|
if (!is_ok) return;
|
||||||
|
|
||||||
out_mesh->uvs[i * 3 + 0] = out_uv[0];
|
out_mesh->uvs[i * 2 + 0] = out_uv[0];
|
||||||
out_mesh->uvs[i * 3 + 1] = out_uv[1];
|
out_mesh->uvs[i * 2 + 1] = out_uv[1];
|
||||||
out_mesh->uvs[i * 3 + 2] = out_uv[2];
|
//out_mesh->uvs[i * 3 + 2] = out_uv[2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,6 +120,11 @@ namespace draco {
|
|||||||
mesh->normals = nullptr;
|
mesh->normals = nullptr;
|
||||||
mesh->normals_num = 0;
|
mesh->normals_num = 0;
|
||||||
}
|
}
|
||||||
|
if (mesh->uvs) {
|
||||||
|
delete[] mesh->uvs;
|
||||||
|
mesh->uvs = nullptr;
|
||||||
|
mesh->uvs_num = 0;
|
||||||
|
}
|
||||||
delete mesh;
|
delete mesh;
|
||||||
*mesh_ptr = nullptr;
|
*mesh_ptr = nullptr;
|
||||||
}
|
}
|
||||||
@ -146,6 +152,7 @@ namespace draco {
|
|||||||
decode_faces(drc_mesh, *res_mesh);
|
decode_faces(drc_mesh, *res_mesh);
|
||||||
decode_vertices(drc_mesh, *res_mesh);
|
decode_vertices(drc_mesh, *res_mesh);
|
||||||
decode_normals(drc_mesh, *res_mesh);
|
decode_normals(drc_mesh, *res_mesh);
|
||||||
|
decode_uvs(drc_mesh, *res_mesh);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user