[Bf-extensions-cvs] [b7769e09] master: glTF importer: fix importing too much vertices when indices tab has no same length than data
Julien Duroure
noreply at git.blender.org
Fri Feb 22 00:35:01 CET 2019
Commit: b7769e098a6d4539a3017ab58567f348385f63ea
Author: Julien Duroure
Date: Fri Feb 22 00:34:18 2019 +0100
Branches: master
https://developer.blender.org/rBAb7769e098a6d4539a3017ab58567f348385f63ea
glTF importer: fix importing too much vertices when indices tab has no same length than data
===================================================================
M io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
===================================================================
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py b/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
index 59e13391..76f49697 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
@@ -41,7 +41,23 @@ class BlenderPrimitive():
for i in indices_:
indices.append((i,))
- prim_verts = [loc_gltf_to_blender(vert) for vert in pos]
+ pyprimitive.tmp_indices = indices
+
+ # Manage only vertices that are in indices tab
+ if len(indices) != len(pos):
+
+ indice_equivalents = {}
+ new_pos = []
+ new_pos_idx = 0
+ for i in indices:
+ if i[0] not in indice_equivalents.keys():
+ indice_equivalents[i[0]] = new_pos_idx
+ new_pos.append(pos[i[0]])
+ new_pos_idx += 1
+
+ prim_verts = [loc_gltf_to_blender(vert) for vert in new_pos]
+ else:
+ prim_verts = [loc_gltf_to_blender(vert) for vert in pos]
pyprimitive.vertices_length = len(prim_verts)
verts.extend(prim_verts)
prim_faces = []
@@ -49,7 +65,10 @@ class BlenderPrimitive():
vals = indices[i:i + 3]
new_vals = []
for y in vals:
- new_vals.append(y[0] + current_length)
+ if len(indices) != len(pos):
+ new_vals.append(indice_equivalents[y[0]] + current_length)
+ else:
+ new_vals.append(y[0] + current_length)
prim_faces.append(tuple(new_vals))
faces.extend(prim_faces)
pyprimitive.faces_length = len(prim_faces)
@@ -75,7 +94,17 @@ class BlenderPrimitive():
def set_normals(gltf, pyprimitive, mesh, offset, custom_normals):
"""Set Normal."""
if 'NORMAL' in pyprimitive.attributes.keys():
- normal_data = BinaryData.get_data_from_accessor(gltf, pyprimitive.attributes['NORMAL'])
+ original_normal_data = BinaryData.get_data_from_accessor(gltf, pyprimitive.attributes['NORMAL'])
+
+ tmp_indices = {}
+ tmp_idx = 0
+ normal_data = []
+ for i in pyprimitive.tmp_indices:
+ if i[0] not in tmp_indices.keys():
+ tmp_indices[i[0]] = tmp_idx
+ tmp_idx += 1
+ normal_data.append(original_normal_data[i[0]])
+
for poly in mesh.polygons:
if gltf.import_settings['import_shading'] == "NORMALS":
calc_norm_vertices = []
@@ -120,7 +149,18 @@ class BlenderPrimitive():
mesh.uv_layers.new(name=texcoord)
pyprimitive.blender_texcoord[int(texcoord[9:])] = texcoord
- texcoord_data = BinaryData.get_data_from_accessor(gltf, pyprimitive.attributes[texcoord])
+ original_texcoord_data = BinaryData.get_data_from_accessor(gltf, pyprimitive.attributes[texcoord])
+
+
+ tmp_indices = {}
+ tmp_idx = 0
+ texcoord_data = []
+ for i in pyprimitive.tmp_indices:
+ if i[0] not in tmp_indices.keys():
+ tmp_indices[i[0]] = tmp_idx
+ tmp_idx += 1
+ texcoord_data.append(original_texcoord_data[i[0]])
+
for poly in mesh.polygons:
for loop_idx in range(poly.loop_start, poly.loop_start + poly.loop_total):
vert_idx = mesh.loops[loop_idx].vertex_index
More information about the Bf-extensions-cvs
mailing list