正射投影和 BSP 树从后到前渲染对象
Orthographic projection and BSP-tree to render objects from back to front
我正在用 3d 中的三角形构建 BSP 树 space。在构建 BSP 树之前,所有三角形都已经转换为视图 space。因此,我使用点 (0, 0, 0) 作为观察者眼睛的位置,从远到近遍历树并将所有访问过的三角形添加到列表中。
然后我遍历列表并使用正交投影变换三角形并将它们绘制到屏幕上。这在大多数情况下都有效,但有时我会因为错误的三角形排序而得到奇怪的伪像。如果我改用透视投影,这永远不会发生。
为什么正射投影会发生这种情况?解决正交投影下的可见性问题时,BSP 树是否不起作用?或者我需要采用我的眼睛位置吗?
我很确定您可以使用 BSP 树进行正交投影,但与透视投影相比,它需要调整数学,因为尽管将查看器置于 0,0,0,但您无法排序关于该点的多边形。正交投影有效地将观察者置于无穷远处。假设您向下看标准 -Z 轴,您需要遍历 BSP 树,就好像观察者位于 0,0,∞。如果您对分割平面使用标准 ax+by+cz+d=0 ,那么数学实际上非常简单,因为您基本上只需要考虑 c 的符号来确定首先遍历平面的哪一侧。 (如果 c 为零,您可以先遍历任一侧。)
我正在用 3d 中的三角形构建 BSP 树 space。在构建 BSP 树之前,所有三角形都已经转换为视图 space。因此,我使用点 (0, 0, 0) 作为观察者眼睛的位置,从远到近遍历树并将所有访问过的三角形添加到列表中。
然后我遍历列表并使用正交投影变换三角形并将它们绘制到屏幕上。这在大多数情况下都有效,但有时我会因为错误的三角形排序而得到奇怪的伪像。如果我改用透视投影,这永远不会发生。
为什么正射投影会发生这种情况?解决正交投影下的可见性问题时,BSP 树是否不起作用?或者我需要采用我的眼睛位置吗?
我很确定您可以使用 BSP 树进行正交投影,但与透视投影相比,它需要调整数学,因为尽管将查看器置于 0,0,0,但您无法排序关于该点的多边形。正交投影有效地将观察者置于无穷远处。假设您向下看标准 -Z 轴,您需要遍历 BSP 树,就好像观察者位于 0,0,∞。如果您对分割平面使用标准 ax+by+cz+d=0 ,那么数学实际上非常简单,因为您基本上只需要考虑 c 的符号来确定首先遍历平面的哪一侧。 (如果 c 为零,您可以先遍历任一侧。)