c# - 为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";
}
}
}
解决方案
推荐阅读
- unity3d - UV rect 计算来自统一 3d
- javascript - 通过比较属性将第二个数组与第一个数组合并,如果对象不属于第二个数组,则将属性添加到第一个数组中的对象
- javascript - 如何获取 FabricJS 矩形的 4 个角 X、Y 坐标值
- javascript - Symfony & Javascript,如何处理 javascripts 类和扩展?
- c# - C# ASP.NET 在下拉列表更改的 post 方法中传递模型
- hyperledger-fabric - 如何使用备份数据启动对等点?
- swagger - Micronaut 不会生成带有查询参数的 OpenAPI YAML
- python-3.x - 通过 get 访问条目小部件
- r - 如何为数据框中的所有字符列声明编码?
- java - Arrays.sort 函数如何工作?