我正在尝试编写一个玩具对象加载器。看来面可以不仅仅是三角形,我想知道对象加载器如何以最小数量的三角形来简化它。虽然正方形和五边形看起来很简单,但它如何发挥更多作用?
在思考的过程中,我想出了一个在各种引擎中尝试过的例子,它给了我 3 种不同的结果。这是文件:
v 0.0 0.0 0.0
v 0.75 0.0 0.0
v -0.15 0.8 0
v 0.4 0.1 0
v 0 0.45 0
v 0.1 1.1 0
f 1 2 3 4 5 6
第二次,我得到两张不同的面孔:
这个文件格式有限制吗?这个问题有真正的答案吗?应该如何处理?
感谢您的宝贵时间!
您提供的图片是正确的。然而,正确显示它需要一些工作量,并且许多软件采用一些快捷方式,这可能会导致伪影。
GPU 不提供显示一般多边形的方法,因此软件需要对多边形进行三角测量。对多边形进行三角测量的最简单算法是制作三角形扇形(这似乎是第一个示例中使用的算法),但它仅适用于凸多边形,但此处的情况并非如此。如果多边形是凹的,您会看到一些伪影。
另一种三角测量算法称为“耳朵裁剪”,但实现起来可能有点乏味,所以如果它不是 3D 建模软件,如果其中许多人不实现它,我不会感到惊讶。
您提供的第二个示例有点难以解释它如何产生两个不同的多边形。但无论如何,结果都是不正确的。
所以总而言之,这不是文件格式的限制,而是处理凹多边形和 GPU 的固有复杂性。