.obj模型在各种程序中显示不同?

时间:2015-08-02 13:33:17

标签: unity3d mesh .obj

我想创建一个可以导出.obj文件的随机地形生成器。所以首先我尝试制作一个(手动)。这是测试文件:

# testOBJ.obj
0 deff
v 0.000000 0.000000 0.000000
v 1.000000 0.000000 0.000000
v 0.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v 0.000000 1.000000 0.000000
v 1.000000 1.000000 0.000000
v 0.000000 1.000000 1.000000
v 1.000000 1.000000 1.000000

f 1 2 3
f 2 3 4
f 5 6 7
f 6 7 8

这些是彼此相对的2个平面。如果我将其放入Visual Studio 2015,它会按照我的预期显示模型。但是如果我将它放在像open3mod这样的模型查看器中,它只显示3个三角形而不是4个。如果我在Unity中加载模型,它只显示2个三角形。我究竟做错了什么?

"Utah tea pot"模型在所有3个程序中都是正确的。我没有。我不明白为什么。

对于大多数可能的游戏,我需要这个地形,我使用Unity。如果它可以与Unity一起使用会很好。

2 个答案:

答案 0 :(得分:1)

您应该在 visual studio 程序和 unity 中的 open3mod 中查看原始拓扑他们可能正在使用不同的原始拓扑。例如,如果在程序中使用三角形条拓扑,那么有4个顶点就可以渲染2个三角形。如果您使用三角列表拓扑,那么您需要定义至少6个顶点来渲染2个三角形

答案 1 :(得分:1)

Unity不会只显示2个三角形。它显示了所有四个。只需将视图旋转到"底部"而且你会看到另外两个。

您遇到的问题是多边形缠绕。也就是说,如果从某个方向看三角形,其指数按顺时针或逆时针顺序编号。通常,面向您的多边形将具有顺时针缠绕顺序。

为三角形建立法线时,在计算中使用顶点的顺序会影响法线方向,从而影响三角形面向的方向。

在封闭网格中,通常指向观察者/摄影机的三角形通常被网格的其余部分隐藏。他们面对着#34;你真的不需要画它们。渲染过程的这种优化称为back-face culling

有些渲染器不使用此优化,有些渲染器可能会将其关闭。但Unity默认使用它。

解决方案是要小心确保您的多边形绕组与表面一致。在Unity中加载时,对以下文件的小修正将为您提供适当的结果:

# testOBJ.obj
0 deff
v 0.000000 0.000000 0.000000
v 1.000000 0.000000 0.000000
v 0.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v 0.000000 1.000000 0.000000
v 1.000000 1.000000 0.000000
v 0.000000 1.000000 1.000000
v 1.000000 1.000000 1.000000

f 1 3 2
f 2 3 4
f 5 7 6
f 6 7 8