【发布时间】:2016-11-10 09:30:51
【问题描述】:
我正在尝试将网格导出到具有统一性的 obj 中,我找到了 2 个脚本,但是它们导出三角形的方式完全不同,我想了解每个三角形的原因:
第一:
foreach(Vector3 lv in m.vertices)
{
Vector3 wv = mf.transform.TransformPoint(lv);
//This is sort of ugly - inverting x-component since we're in
//a different coordinate system than "everyone" is "used to".
sb.Append(string.Format("v {0} {1} {2}\n",-wv.x,wv.y,wv.z));
}
foreach(Vector3 lv in m.normals)
{
Vector3 wv = mf.transform.TransformDirection(lv);
sb.Append}
for (int i=0;i<triangles.Length;i+=3)
{
//Because we inverted the x-component, we also needed to alter the triangle winding.
sb.Append(string.Format("f {1}/{1}/{1} {0}/{0}/{0} {2}/{2}/{2}\n",
triangles[i]+1 + vertexOffset, triangles[i+1]+1 + normalOffset, triangles[i+2]+1 + uvOffset));
}
(我保留了 cmets),http://wiki.unity3d.com/index.php?title=ObjExporter
这是第一种方法,下面是第二种:
foreach(Vector3 vv in m.vertices)
{
Vector3 v = t.TransformPoint(vv);
numVertices++;
sb.Append(string.Format("v {0} {1} {2}\n",v.x,v.y,-v.z));
}
sb.Append("\n");
foreach(Vector3 nn in m.normals)
{
Vector3 v = r * nn;
sb.Append(string.Format("vn {0} {1} {2}\n",-v.x,-v.y,v.z));
}
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+StartIndex, triangles[i+1]+1+StartIndex, triangles[i+2]+1+StartIndex));
}
链接:http://wiki.unity3d.com/index.php?title=ExportOBJ
第一种方法效果很好,第二种方法也很有效,但是它在向上轴上旋转了 180 度。 问题是我不明白为什么他们需要在第一种方法中重新排序三角形组件并且仍然有效,以及为什么第二种方法中的正常组件符号与位置组件符号不匹配但仍然有效
【问题讨论】: