首页 文章

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

提问于
浏览
1

我想制作一个可以导出.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 回答

  • 1

    Unity不会只显示2个三角形 . 它显示了所有四个 . 只需将视图旋转到“底部”,您就会看到另外两个 .

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

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

    在封闭网格中,通常指向远离观察者/摄像机的三角形通常被网格的其余部分隐藏 . 它们是"back facing",你真的不需要绘制它们 . 渲染过程的这种优化称为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
    
  • 1

    您应该在visual studio程序中看一下open3mod中的 Primitive Topologies ,并且可能会使用不同的原始拓扑结构 . 例如,如果在程序中使用 Triangle Strip topology ,则 with 4 vertices you can render 2 triangles . 如果您使用 Triangle List topology ,那么您 need to define at least 6 vertices to render 2 triangles .

相关问题