背面剔除,为三角形上的视图向量选择的顶点是否重要?
Back-face culling, does chosen vertex for view vector on triangle matter?
我想在将 tris 传递给 GPU 之前手动实现背面剔除。所以我试图理解算法。所以维基百科说背面剔除使用三角形中的第一个顶点:
选择创建视图矢量的三角形上的顶点(维基百科图片中的视图矢量是 (V_0-P)
)对背面剔除有影响吗?就像选择第一个顶点时是否存在潜在的边缘情况,实际上会剔除一个可见的三角形?
所以另一个问题,如果它真的很重要,三角形中的某个地方是否有一个最佳点,它总是剔除不可见的面(可能是顶点,在三角形的边缘上,或者在内部)?
您的问题:
Does the vertex on the triangle chosen to create the view vector (the view vector in the Wikipedia picture is V_0 - P
) matter for back-face culling though?
不是,V0(“第一个顶点”)是任意选择的。数学也适用于 V0、V1 和 V2.
的任何其他选择
Like is there potential edge cases when choosing the first vertex actually culls a visible triangle?
从数学上讲,这是不可能的。
实际上,如果 P 位于三角形所在的平面内(即 dot(-V0, N)
非常接近 0.0
),则可能会发生这种情况,因为浮点数学的舍入误差。这可能会在渲染过程中显示为闪烁的线条,具体取决于您的模型、相机位置、算法、实现等。
我认为这些案例通常不会以需要以不同方式处理的方式构成实际问题。一个问题是很难检测三角形是否可见但不应该可见(反之亦然)。另一个问题是处理这些情况需要更多的计算。例如。为 V0、V1 和 V2 的所有六个可能的选择计算 dot(-V0, N)
,做一个多数投票,然后仍然不能保证结果是正确的。
我想在将 tris 传递给 GPU 之前手动实现背面剔除。所以我试图理解算法。所以维基百科说背面剔除使用三角形中的第一个顶点:
选择创建视图矢量的三角形上的顶点(维基百科图片中的视图矢量是 (V_0-P)
)对背面剔除有影响吗?就像选择第一个顶点时是否存在潜在的边缘情况,实际上会剔除一个可见的三角形?
所以另一个问题,如果它真的很重要,三角形中的某个地方是否有一个最佳点,它总是剔除不可见的面(可能是顶点,在三角形的边缘上,或者在内部)?
您的问题:
Does the vertex on the triangle chosen to create the view vector (the view vector in the Wikipedia picture is
V_0 - P
) matter for back-face culling though?
不是,V0(“第一个顶点”)是任意选择的。数学也适用于 V0、V1 和 V2.
的任何其他选择Like is there potential edge cases when choosing the first vertex actually culls a visible triangle?
从数学上讲,这是不可能的。
实际上,如果 P 位于三角形所在的平面内(即 dot(-V0, N)
非常接近 0.0
),则可能会发生这种情况,因为浮点数学的舍入误差。这可能会在渲染过程中显示为闪烁的线条,具体取决于您的模型、相机位置、算法、实现等。
我认为这些案例通常不会以需要以不同方式处理的方式构成实际问题。一个问题是很难检测三角形是否可见但不应该可见(反之亦然)。另一个问题是处理这些情况需要更多的计算。例如。为 V0、V1 和 V2 的所有六个可能的选择计算 dot(-V0, N)
,做一个多数投票,然后仍然不能保证结果是正确的。