背景:客户想在UG中打开编辑好的模型,UG不支持obj格式。mesh转曲面不太现实,折中取了个STL。
设置导出模型的零点,例如设置底面中心为导出模型的零点。
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
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删