Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def get_shader_index(mats, mat):
- for i in range(len(mats)):
- if mats[i] == mat:
- return i
- def geometry_from_object(obj, mats, bones=None, export_settings=None):
- geometry = GeometryItem()
- geometry.shader_index = get_shader_index(mats, obj.active_material)
- obj, mesh = apply_and_triangulate_object(obj)
- bbmin, bbmax = get_bound_extents(obj, world=export_settings.use_transforms)
- geometry.bounding_box_min = bbmin
- geometry.bounding_box_max = bbmax
- shader_name = obj.active_material.shader_properties.name
- shader = ShaderManager.shaders[shader_name]
- layout = shader.get_layout_from_semantic(
- get_semantic_from_object(shader, mesh))
- geometry.vertex_buffer.layout = layout.value
- vertex_buffer, index_buffer = get_mesh_buffers(
- obj, mesh, layout.vertex_type, bones, export_settings)
- geometry.vertex_buffer.data = vertex_buffer
- geometry.index_buffer.data = index_buffer
- return geometry
- def drawable_model_from_object(obj, bones=None, export_settings=None):
- drawable_model = DrawableModelItem()
- drawable_model.render_mask = obj.drawable_model_properties.render_mask
- drawable_model.flags = obj.drawable_model_properties.flags
- # rawable_model.bone_index = 0
- if bones is not None:
- drawable_model.has_skin = 1
- drawable_model.unknown_1 = len(bones)
- for child in obj.children:
- if child.sollum_type == SollumType.DRAWABLE_GEOMETRY:
- if len(child.data.materials) > 1:
- # Preserve original order of materials
- mats = child.data.copy().materials
- objs = split_object(child, obj)
- for obj in objs:
- geometry = geometry_from_object(
- obj, mats, bones, export_settings) # MAYBE WRONG ASK LOYALIST
- drawable_model.geometries.append(geometry)
- join_objects(objs)
- else:
- geometry = geometry_from_object(
- child, get_used_materials(obj.parent), bones, export_settings)
- drawable_model.geometries.append(geometry)
- return drawable_model
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement