许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Mesh模型导出OBJ、STL格式及Windows窗口调用方法

Mesh模型导出OBJ、STL格式及Windows窗口调用方法

阅读数 1
点赞 0
article_banner
背景:客户想在UG中打开编辑好的模型,UG不支持obj格式。mesh转曲面不太现实,折中取了个STL。

mesh转OBJ格式

设置导出模型的零点,例如设置底面中心为导出模型的零点。

        float offsetX = 0;
        float offsetY = 0;
        float offsetZ = 0;
        float minX = float.MaxValue;
        float maxX = float.MinValue;
        float minY = float.MaxValue;
        float maxY = float.MinValue;
        float minZ = float.MaxValue;
        float maxZ = float.MinValue;   
        foreach (var item in vertices )
        {
   
   
            Vector3 worldPos = trans.TransformPoint(item);
            if (minX > worldPos.x) minX = worldPos.x;
            if (minY > worldPos.y) minY = worldPos.y;
            if (minZ > worldPos.z) minZ = worldPos.z;
            if (maxX < worldPos.x) maxX = worldPos.x;
            if (maxY < worldPos.y) maxY = worldPos.y;
            if (maxZ < worldPos.z) maxZ = worldPos.z;
        }  
        offsetX = (minX + manX) / 2;
        offsetZ = (maxZ + minZ) / 2;
        offsetY = minY;

校验传入路径名称是否带.obj后缀。

   if (!name.Contains(".obj"))
        {
   
   
            name = Path.Combine(name + ".obj");
        }       

验证是否导出成功

  if (!File.Exists(name ))
        {
   
   
            UnityEngine.Debug.LogError("导出失败!");
        }

完整代码

  public static void Export(Transform trans, Mesh mesh, string name)
    {
   
   
        if (mesh == null) return;
        Vector3[] vertices = mesh.vertices;
        Vector3[] normals = mesh.normals;
        int[] triangles = mesh.triangles;
        StringBuilder sb = new StringBuilder();
        float offsetX = 0;
        float offsetY = 0;
        float offsetZ = 0;
        float minX = float.MaxValue;
        float maxX = float.MinValue;
        float minY = float.MaxValue;
        float maxY = float.MinValue;
        float minZ = float.MaxValue;
        float maxZ = float.MinValue;         

        foreach (var item in vertices )
        {
   
   
            Vector3 worldPos = trans.TransformPoint(item);
            if (minX > worldPos.x) minX = worldPos.x;
            if (minY > worldPos.y) minY = worldPos.y;
            if (minZ > worldPos.z) minZ = worldPos.z;
            if (maxX < worldPos.x) maxX = worldPos.x;
            if (maxY < worldPos.y) maxY = worldPos.y;
            if (maxZ < worldPos.z) maxZ = worldPos.z;
        }

        offsetX = minX;
        offsetZ = (maxZ + minZ) / 2;
        offsetY = (minY + maxY) / 2;
       

        //sb.Append("#为模型导出的obj,不带材质\n\n");     
        for (int i = 0; i < vertices.Length; i++)
        {
   
   
            Vector3 worldVertices = trans.TransformPoint(vertices[i]);
            sb.Append("v " + (worldVertices.x - offsetX) + " " + (worldVertices.y - offsetY) + " " + (worldVertices.z - offsetZ) + "\n");
        }
        sb.Append("\n");

        for (int
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空