Exporter -> separate file, fix codegen, don't ignore .pn files
parent
fba0f0ec6d
commit
04d0719418
@ -1,3 +1,2 @@
|
|||||||
*.blend filter=lfs diff=lfs merge=lfs -text
|
*.blend filter=lfs diff=lfs merge=lfs -text
|
||||||
*.pn filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.png filter=lfs diff=lfs merge=lfs -text
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
import bpy
|
||||||
|
import bmesh
|
||||||
|
import os
|
||||||
|
import struct
|
||||||
|
from mathutils import *; from math import *
|
||||||
|
from bpy_extras.io_utils import (axis_conversion)
|
||||||
|
|
||||||
|
C = bpy.context
|
||||||
|
D = bpy.data
|
||||||
|
|
||||||
|
EXPORT_DIRECTORY = "exported"
|
||||||
|
|
||||||
|
if not os.path.exists(bpy.path.abspath(f"//{EXPORT_DIRECTORY}")):
|
||||||
|
os.makedirs(bpy.path.abspath(f"//{EXPORT_DIRECTORY}"))
|
||||||
|
|
||||||
|
|
||||||
|
def write_f32(f, number: float):
|
||||||
|
f.write(bytes(struct.pack("f", number)))
|
||||||
|
|
||||||
|
def write_u64(f, number: int):
|
||||||
|
f.write(bytes(struct.pack("Q", number)))
|
||||||
|
|
||||||
|
for o in D.objects:
|
||||||
|
mapping = axis_conversion(
|
||||||
|
from_forward = "Y",
|
||||||
|
from_up = "Z",
|
||||||
|
to_forward = "-Z",
|
||||||
|
to_up = "Y",
|
||||||
|
)
|
||||||
|
mapping.resize_4x4()
|
||||||
|
print(mapping)
|
||||||
|
output_filepath = bpy.path.abspath(f"//{EXPORT_DIRECTORY}/{o.name}.bin")
|
||||||
|
print(f"\n\nExporting {output_filepath}")
|
||||||
|
with open(output_filepath, "wb") as f:
|
||||||
|
bm = bmesh.new()
|
||||||
|
mesh = o.to_mesh()
|
||||||
|
bm.from_mesh(mesh)
|
||||||
|
bmesh.ops.triangulate(bm, faces=bm.faces)
|
||||||
|
bm.transform(mapping)
|
||||||
|
bm.to_mesh(mesh)
|
||||||
|
|
||||||
|
|
||||||
|
vertices = []
|
||||||
|
|
||||||
|
for polygon in mesh.polygons:
|
||||||
|
if len(polygon.loop_indices) == 3:
|
||||||
|
for loopIndex in polygon.loop_indices:
|
||||||
|
loop = mesh.loops[loopIndex]
|
||||||
|
position = mesh.vertices[loop.vertex_index].undeformed_co
|
||||||
|
uv = mesh.uv_layers.active.data[loop.index].uv
|
||||||
|
normal = loop.normal
|
||||||
|
|
||||||
|
vertices.append(position)
|
||||||
|
|
||||||
|
write_u64(f, len(vertices))
|
||||||
|
for v in vertices:
|
||||||
|
write_f32(f, v.x)
|
||||||
|
write_f32(f, v.y)
|
||||||
|
write_f32(f, v.z)
|
||||||
|
print(f"Wrote {len(vertices)} vertices")
|
Binary file not shown.
Loading…
Reference in New Issue