【问题标题】:Back-face culling, does chosen vertex for view vector on triangle matter?背面剔除,为三角形上的视图矢量选择的顶点是否重要?
【发布时间】:2021-09-08 05:46:37
【问题描述】:

在将 tris 传递给 GPU 之前,我想手动实现背面剔除。所以我试图理解算法。所以维基百科说背面剔除使用三角形中的第一个顶点:

选择创建视图向量的三角形上的顶点(维基百科图片中的视图向量是(V_0-P))对于背面剔除是否重要?就像选择第一个顶点实际上剔除可见三角形时是否存在潜在的边缘情况?

所以另一个问题,如果它真的很重要,在三角形的某个地方是否有一个最佳点,它总是会剔除不可见的面(可能是一个顶点,在三角形的边缘,或者在内部) ?

【问题讨论】:

    标签: c++ 3d culling


    【解决方案1】:

    您的问题:

    选择创建视图向量的三角形上的顶点(维基百科图片中的视图向量是V_0 - P)对于背面剔除是否重要?

    不,V0(“第一个顶点”)是任意选择的。数学也适用于 V0、V1 和 V2 的任何其他选择。

    选择第一个顶点实际上剔除可见三角形时是否存在潜在的边缘情况?

    从数学上讲,这是不可能的。

    在实践中,如果 P 位于三角形所在的平面中(即dot(-V0, N) 非常接近0.0),则可能会发生这种情况,因为浮点数学的舍入误差。这可能会在渲染过程中显示为一条闪烁的线,具体取决于您的模型、相机位置、算法、实现等。
    我认为这些案例通常不会以需要以不同方式处理的方式构成实际问题。一个问题是很难检测出三角形是否可见但不应该出现(反之亦然)。另一个问题是处理这些情况需要更多的计算。例如。为 V0、V1 和 V2 的所有六种可能选择计算 dot(-V0, N),进行多数投票,然后 仍然 不保证结果是正确的。

    【讨论】:

    • 很棒的反应!这确实让我想知道三角形中是否存在某个最佳点(三角形内部的顶点或某个点)。比将最大化可能发生的剔除次数。
    • @yosmo78 谢谢!这个“最佳点”是什么意思?是向三角形添加另一个点(使其成为多边形)还是移动现有顶点?不管怎样,我认为没有。如果三角形面向 P,则保留它,否则将其剔除。实际上没有任何参数可供使用。
    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多