首页 > 解决方案 > 为obj创建mtl文件?

问题描述

你好我真的需要帮助。我正在使用统一,我有这个代码来导出 obj。但我也希望我的 obj 包含纹理。我可以将纹理导出为 jpg 但我不想要它,我需要 mtl 文件。我希望 obj 有它而不是 jpg 的纹理。所以我怎样才能为我导出的 obj 文件制作 mtl?

using System.Collections;
using System.IO;
using System.Text;
using System;

public class ObjExporter
{

public static string MeshToString(MeshFilter mf)
{
    Mesh m = mf.mesh;
    Material[] mats = mf.GetComponent<Renderer>().sharedMaterials;

    StringBuilder sb = new StringBuilder();

    //sb.Append("g ").Append(mf.name).Append("\n");
   
    foreach (Vector3 v in m.vertices)
    {
        sb.Append(string.Format("v {0} {1} {2}\n", v.x, v.y, v.z));
    }
    sb.Append("\n");
    foreach (Vector3 v in m.normals)
    {
        sb.Append(string.Format("vn {0} {1} {2}\n", v.x, v.y, v.z));
    }
    sb.Append("\n");
    foreach (Vector3 v in m.uv)
    {
        sb.Append(string.Format("vt {0} {1}\n", v.x, v.y));
    }
    for (int material = 0; material < m.subMeshCount; material++)
    {
        sb.Append("\n");
        sb.Append("usemtl ").Append(mats[material].name).Append("\n");
        sb.Append("usemap ").Append(mats[material].name).Append("\n");

        int[] triangles = m.GetTriangles(material);
        for (int i = 0; i < triangles.Length; i += 3)
        {
            sb.Append(string.Format("f {0}/{0}/{0} {1}/{1}/{1} {2}/{2}/{2}\n",
                triangles[i] + 1, triangles[i + 1] + 1, triangles[i + 2] + 1));
        }
    }
    return sb.ToString();
}

public static void MeshToFile(MeshFilter mf, string filename)
{
    using (StreamWriter sw = new StreamWriter(filename))
    {
        sw.Write(MeshToString(mf));
      

        string path = Application.dataPath + "/screenshots/" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".png";

    }
}

}

标签: c#unity3d3d

解决方案


推荐阅读