diff --git a/maya/dracodec_maya.dll b/maya/dracodec_maya.dll index a8136f5..cdc538f 100644 Binary files a/maya/dracodec_maya.dll and b/maya/dracodec_maya.dll differ diff --git a/maya/dracodec_maya.py b/maya/dracodec_maya.py index 73a3ebb..678db0b 100644 --- a/maya/dracodec_maya.py +++ b/maya/dracodec_maya.py @@ -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 diff --git a/maya/test/dracodec_maya_test.py b/maya/test/dracodec_maya_test.py index e25c130..a3ce8b0 100644 --- a/maya/test/dracodec_maya_test.py +++ b/maya/test/dracodec_maya_test.py @@ -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') diff --git a/src/draco/maya/draco_maya_plugin.cc b/src/draco/maya/draco_maya_plugin.cc index 530e828..e8e1bea 100644 --- a/src/draco/maya/draco_maya_plugin.cc +++ b/src/draco/maya/draco_maya_plugin.cc @@ -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(val_index, out_uv); + float out_uv[2]; + //bool is_ok = uv_att->ConvertValue(val_index, out_uv); + bool is_ok = uv_att->ConvertValue(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; } /*