我正在为我正在制作的游戏构建一个小型3D引擎。我已经将我的基本知识排序了:带有背面剔除的纹理三角形。然而,深度分类被证明是一个难题。
我通过平均构成三角形面的3个点来计算面部Z.较长的面有时会与较小的面重叠,因为它们具有较大的Z值,因此会在深度排序的显示列表中上升。
我该如何解决这个问题?如果我只能在编程方面得到一些实际的帮助,我肯定有已知的深度排序技术。我自己构建了渲染管道,因此我可以访问所有必需的数据 - 三角形,点,纹理,UV坐标等。
以3D程序呈现的大教堂
在3D引擎中渲染的大教堂
答案 0 :(得分:4)
您可以选择:
细分你的网格以便你 可以可靠地排序每个多边形(但是 还有可怕的边缘案件 你可能会或可能不会看到)。
使用所有人都支持的Z-Buffer 图形硬件本质上是 免费。
答案 1 :(得分:4)
您需要细分三角形,使它们的大小大致相同 - 无论您是自己进行排序还是使用z缓冲区。当然,除非z-buffer算法也为你分割长的细长三角形。
问题在于,如果你有一些小的紧凑三角形和一些细长的三角形(例如),算法将会错过很长时间的细长分类。如果你使用三角形的中点,那么它将被视为一个更紧凑的“在前面”的视点,实际上如果真的落后了。从上到下的视图中+
代表中点。
o
-+- 1
-----+------ 2
-+- 3
*
从*
到o
看,大三角形(2)可以解释为位于小三角形(3)的前面,因此可以在它上面绘制。
如果将(2)分成3个或4个较小的三角形,那么z缓冲将在更多的时间内起作用。
答案 2 :(得分:1)