Blender 2.9自定义导出实现三角面顶点扁平化为XY坐标
Blender 2.9三角面顶点扁平化导出自定义格式实现方案
核心实现逻辑
要实现三角面顶点扁平化仅保留XY坐标,只需要对每个三角面的局部顶点做反向旋转抵消对象自身的欧拉角,让三角面完全对齐XY平面后丢弃Z轴坐标即可,后续目标程序使用导出的欧拉角旋转后可还原为原3D姿态。
修改后的完整脚本代码
bl_info = { "name": "Dave's Export", "author": "Dave", "version": (1, 2), "blender": (2, 83, 0), "location": "File > Export > Dave's Export", "warning": "", "description": "Export active mesh", "category": "Import-Export", } import bpy import os from bpy_extras.io_utils import ExportHelper class DavesExport(bpy.types.Operator, ExportHelper): bl_idname = "export_scene.custom_export" bl_label = "Export" bl_options = {'PRESET', 'UNDO'} filename_ext = ".dave" def execute(self, context): filepath = self.filepath filepath = bpy.path.ensure_ext(filepath, self.filename_ext) out = open(filepath, "w") scene = bpy.data.scenes[0] for obj in scene.objects: if obj.type == 'MESH': # Note; obj is just a triangle. # Position out.write(str(obj.location.x) + ' ' + str(obj.location.y) + ' ' + str(obj.location.z)) out.write('|') # Rotation out.write(str(obj.rotation_euler.x) + ' ' + str(obj.rotation_euler.y) + ' ' + str(obj.rotation_euler.z)) out.write('|') # Vertices (x3, flattened to XY) # 新增:计算反向旋转矩阵,抵消对象自身旋转让三角面对齐XY平面 inv_rot_matrix = obj.rotation_euler.to_matrix().inverted() for vertex in obj.data.vertices: # 应用反向旋转得到扁平化坐标,丢弃Z轴 flat_vert = inv_rot_matrix @ vertex.co out.write(str(flat_vert.x) + ' ' + str(flat_vert.y)) out.write('|') out.write('\n') out.close() return {'FINISHED'} def invoke(self, context, event): wm = context.window_manager wm.fileselect_add(self) return {'RUNNING_MODAL'} def menu_button(self, context): self.layout.operator(DavesExport.bl_idname, text="Dave's Export") def register(): bpy.utils.register_class(DavesExport) bpy.types.TOPBAR_MT_file_export.append(menu_button) def unregister(): bpy.utils.unregister_class(DavesExport) bpy.types.TOPBAR_MT_file_export.remove(menu_button)
关键修改说明
- 新增了反向旋转矩阵计算逻辑:通过
obj.rotation_euler.to_matrix().inverted()得到旋转逆矩阵,抵消三角面当前的旋转量,使三角面完全对齐XY平面 - 顶点处理逻辑修改:每个局部顶点坐标乘以逆矩阵后,仅导出XY轴数值,丢弃Z轴完成扁平化
- 完全保留原有对象位置、欧拉角的导出逻辑,兼容后续目标程序的旋转还原需求
新手导出插件学习参考
本脚本结构非常适合作为Blender 2.9自定义导出插件的入门学习模板,包含了Blender插件开发的标准流程:
- 标准的
bl_info元数据声明,用于Blender识别插件信息 - 继承
ExportHelper工具类快速实现导出文件选择弹窗 - 场景对象遍历、网格数据读取的基础API使用方法
- 导出菜单注册、注销的标准写法
逻辑简洁无多余依赖,新手可以直接基于该模板修改导出字段、导出格式,适配自身的需求。
内容的提问来源于stack exchange,提问作者whoshotdk
相关产品推荐
相关产品推荐

