blender: emit polygon normals
This commit is contained in:
parent
f64eb29558
commit
70b3c72c6f
50
blender.py
50
blender.py
@ -3,18 +3,27 @@ import bpy
|
||||
def render_vec3(v):
|
||||
return f"{{{v.x}, {v.y}, {v.z}}}"
|
||||
|
||||
def render_vec2(v):
|
||||
return f"{{{v.x}, {v.y}}}"
|
||||
|
||||
def render_mesh_vertices(f, name, vertices):
|
||||
f.write(f"const vec3 {name}_position[] = {{\n")
|
||||
for vertex in vertices:
|
||||
f.write(f" {render_vec3(vertex.co)},\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
def render_mesh_normals(f, name, vertices):
|
||||
def render_vertex_normals(f, name, vertices):
|
||||
f.write(f"const vec3 {name}_normal[] = {{\n")
|
||||
for vertex in vertices:
|
||||
f.write(f" {render_vec3(vertex.normal)},\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
def render_polygon_normals(f, name, polygon_normals):
|
||||
f.write(f"const vec3 {name}_polygon_normal[] = {{\n")
|
||||
for normal in polygon_normals:
|
||||
f.write(f" {render_vec3(normal.vector)},\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
def render_polygons(f, name, polygons):
|
||||
f.write(f"const polygon {name}_polygons[] = {{\n")
|
||||
for i, polygon in enumerate(polygons):
|
||||
@ -24,6 +33,14 @@ def render_polygons(f, name, polygons):
|
||||
f.write(f" {c}{{{s}}},\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
def render_uv_map(f, name, name2, uvm):
|
||||
f.write(f"const vec2 {name}_{name2}_uvmap[] = {{\n")
|
||||
print(uvm)
|
||||
for uv in uvm:
|
||||
s = render_vec2(uv.vector)
|
||||
f.write(f" {s},\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
def render_location(f, location):
|
||||
s = render_vec3(location)
|
||||
f.write(f" .location = {s},\n")
|
||||
@ -36,15 +53,22 @@ def render_rotation_axis_angle(f, r):
|
||||
r = f"{{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}"
|
||||
f.write(f" .rotation = {r},\n")
|
||||
|
||||
def render_mesh(f, name):
|
||||
def render_mesh(f, name, mesh):
|
||||
f.write(f"const vec2 * {name}_uv_layers[] = {{\n")
|
||||
for layer_name in mesh.uv_layers.keys():
|
||||
f.write(f" {name}_{layer_name}_uvmap,\n");
|
||||
f.write( "};\n\n")
|
||||
|
||||
f.write(f"const mesh {name} = {{\n")
|
||||
f.write(f" .position = {name}_position,\n")
|
||||
f.write(f" .position_length = (sizeof ({name}_position)) / (sizeof ({name}_position[0])),\n")
|
||||
f.write(f" .normal = {name}_normal,\n")
|
||||
f.write(f" .normal_length = (sizeof ({name}_normal)) / (sizeof ({name}_normal[0])),\n")
|
||||
f.write(f" .polygon_normal = {name}_polyon_normal,\n")
|
||||
f.write(f" .polygon_normal_length = (sizeof ({name}_polygon_normal)) / (sizeof ({name}_polygon_normal[0])),\n")
|
||||
f.write(f" .polygons = {name}_polygons,\n")
|
||||
f.write(f" .polygons_length = (sizeof ({name}_polygons)) / (sizeof ({name}_polygons[0])),\n")
|
||||
f.write("};\n\n")
|
||||
f.write(f" .uv_layers = {name}_uv_layers,\n")
|
||||
f.write(f" .uv_layers_length = (sizeof ({name}_uv_layers)) / (sizeof ({name}_uv_layers[0])),\n")
|
||||
f.write( "};\n\n")
|
||||
|
||||
def translate_name(name):
|
||||
return name.replace(".", "_").replace("-", "_")
|
||||
@ -70,10 +94,14 @@ def export_scene(f):
|
||||
mesh_name = "mesh_" + translate_name(mesh.name)
|
||||
|
||||
render_mesh_vertices(f, mesh_name, mesh.vertices)
|
||||
render_mesh_normals(f, mesh_name, mesh.vertices)
|
||||
for layer_name, layer in mesh.uv_layers.items():
|
||||
render_uv_map(f, mesh_name, layer_name, layer.uv)
|
||||
#render_vertex_normals(f, mesh_name, mesh.vertices)
|
||||
render_polygon_normals(f, mesh_name, mesh.polygon_normals)
|
||||
render_polygons(f, mesh_name, mesh.polygons)
|
||||
|
||||
render_mesh(f, mesh_name);
|
||||
|
||||
render_mesh(f, mesh_name, mesh);
|
||||
|
||||
#mesh.polygons[0].vertices
|
||||
# [0, 1, 3, 2]
|
||||
@ -92,17 +120,21 @@ def export_scene(f):
|
||||
|
||||
obj_name = "object_" + translate_name(object.name)
|
||||
|
||||
f.write(f"{{ // {obj_name}\n")
|
||||
f.write(f" {{ // {obj_name}\n")
|
||||
|
||||
obj_mesh_name = "mesh_" + translate_name(object.to_mesh().name)
|
||||
|
||||
f.write(" ")
|
||||
f.write(f" .mesh = &{obj_mesh_name},\n")
|
||||
|
||||
f.write(" ")
|
||||
render_scale(f, object.scale)
|
||||
f.write(" ")
|
||||
render_rotation_axis_angle(f, object.rotation_axis_angle)
|
||||
f.write(" ")
|
||||
render_location(f, object.location)
|
||||
|
||||
f.write("},\n")
|
||||
f.write(" },\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
with open("output.h", "w") as f:
|
||||
|
10789
model/cube_subdivided.h
Normal file
10789
model/cube_subdivided.h
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user