Last active
July 16, 2019 11:23
-
-
Save nasser/2d391ef90c6f8287f8b7c6c43e218e4b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/blender/exp/gltf2_blender_extract.py b/blender/exp/gltf2_blender_extract.py | |
| index b5c09de..c65a9fc 100644 | |
| --- a/blender/exp/gltf2_blender_extract.py | |
| +++ b/blender/exp/gltf2_blender_extract.py | |
| @@ -32,6 +32,7 @@ from io_scene_gltf2.blender.exp import gltf2_blender_gather_skins | |
| INDICES_ID = 'indices' | |
| MATERIAL_ID = 'material' | |
| ATTRIBUTES_ID = 'attributes' | |
| +MODE_ID = 'mode' | |
| COLOR_PREFIX = 'COLOR_' | |
| MORPH_TANGENT_PREFIX = 'MORPH_TANGENT_' | |
| @@ -383,6 +384,40 @@ def extract_primitive_pack(a, indices, use_tangents): | |
| return result_primitive | |
| +def extract_line_primitives(blender_mesh, vertices_in_polygons, export_settings): | |
| + range_indices = 65535 | |
| + valid_edges = [] | |
| + for blender_edge in blender_mesh.edges: | |
| + if blender_edge.vertices[0] not in vertices_in_polygons or blender_edge.vertices[1] not in vertices_in_polygons: | |
| + # edge has at least one edge not in a polygon, add to primitive | |
| + valid_edges.append(blender_edge) | |
| + | |
| + if len(valid_edges) == 0: | |
| + return [] | |
| + | |
| + else: | |
| + attributes = { | |
| + POSITION_ATTRIBUTE: [], | |
| + NORMAL_ATTRIBUTE: [] | |
| + } | |
| + | |
| + primitive = { | |
| + MODE_ID: 1, # LINES | |
| + INDICES_ID: [], | |
| + MATERIAL_ID: 0, | |
| + ATTRIBUTES_ID: attributes | |
| + } | |
| + | |
| + for edge in valid_edges: | |
| + attributes[POSITION_ATTRIBUTE].extend([v for i in edge.vertices for v in convert_swizzle_location(blender_mesh.vertices[i].co, export_settings)]) | |
| + attributes[NORMAL_ATTRIBUTE].extend([v for i in edge.vertices for v in blender_mesh.vertices[i].normal]) | |
| + primitive[INDICES_ID].append(len(primitive[INDICES_ID])) | |
| + primitive[INDICES_ID].append(len(primitive[INDICES_ID])) | |
| + | |
| + edge_primitives = [primitive] | |
| + | |
| + return edge_primitives | |
| + | |
| def extract_primitives(glTF, blender_mesh, blender_vertex_groups, modifiers, export_settings): | |
| """ | |
| Extract primitives from a mesh. Polygons are triangulated and sorted by material. | |
| @@ -1108,6 +1143,14 @@ def extract_primitives(glTF, blender_mesh, blender_vertex_groups, modifiers, exp | |
| print_console('DEBUG', 'Adding primitive without splitting. Indices: ' + str( | |
| len(primitive[INDICES_ID])) + ' Vertices: ' + str( | |
| len(primitive[ATTRIBUTES_ID][POSITION_ATTRIBUTE]) // 3)) | |
| + # | |
| + # Add edges and points not associated with a polygon | |
| + # | |
| + | |
| + # compute this once, might get expensive for big meshes | |
| + vertices_in_polygons = frozenset([v for p in blender_mesh.polygons for v in p.vertices]) | |
| + line_primitives = extract_line_primitives(blender_mesh, vertices_in_polygons, export_settings) | |
| + result_primitives.extend(line_primitives) | |
| print_console('INFO', 'Primitives created: ' + str(len(result_primitives))) | |
| diff --git a/blender/exp/gltf2_blender_gather_primitives.py b/blender/exp/gltf2_blender_gather_primitives.py | |
| index 2c4ee91..e1b4d8c 100644 | |
| --- a/blender/exp/gltf2_blender_gather_primitives.py | |
| +++ b/blender/exp/gltf2_blender_gather_primitives.py | |
| @@ -69,7 +69,7 @@ def gather_primitives( | |
| extras=None, | |
| indices=internal_primitive['indices'], | |
| material=material, | |
| - mode=None, | |
| + mode=internal_primitive.get('mode', None), | |
| targets=internal_primitive['targets'] | |
| ) | |
| primitives.append(primitive) | |
| @@ -96,6 +96,7 @@ def __gather_cache_primitives( | |
| "attributes": __gather_attributes(internal_primitive, blender_mesh, modifiers, export_settings), | |
| "indices": __gather_indices(internal_primitive, blender_mesh, modifiers, export_settings), | |
| "material": internal_primitive['material'], | |
| + "mode": internal_primitive.get('mode', None), | |
| "targets": __gather_targets(internal_primitive, blender_mesh, modifiers, export_settings) | |
| } | |
| primitives.append(primitive) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment