【问题标题】:how to order triangles when exporting obj导出obj时如何对三角形进行排序
【发布时间】: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 度。 问题是我不明白为什么他们需要在第一种方法中重新排序三角形组件并且仍然有效,以及为什么第二种方法中的正常组件符号与位置组件符号不匹配但仍然有效

【问题讨论】:

    标签: object opengl unity3d 3d


    【解决方案1】:

    我不明白他们为什么需要重新排列三角形组件

    许多渲染器使用三角形点的顺序来指示多边形的哪一侧是三角形的“前”或“后”。如果启用背面剔除,这一点尤其重要。

    您可以尝试在网格上混合顺时针和逆时针三角形; Unity 的默认行为会剔除背面,您最终会看到一堆洞!

    在导入/导出几何数据时,翻转一个或两个轴是相当常见的。如果每种文件格式都同意这种事情会很方便,但有时他们不同意。

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2011-04-13
      • 2018-12-23
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2016-09-28
      相关资源
      最近更新 更多