3

看

当边界框的所有 8 个顶点都在截锥体之外时,它不会被渲染。但是,如果某事发生如上所示。该对象应该在显示列表中。任何的想法?

4

2 回答 2

2

因为您正在计算交点,就好像盒子是一堆点,而不是一堆线。这就是我在伪代码中的做法:

inter = Inside
for ( plane : frustum ) {
    verts[2] = findOpposingPointsMostPerpendicularToPlane( box, plane )
    near = plane.signedDistance( verts[0] ) > 0.0
    far = plane.signedDistance( verts[1] ) > 0.0

    if ( !near && !far )
        inter = Outside
        break
    else ( near ^ far )
        inter = Intersecting
}

如果您的盒子是 AABB,您创建一个顶点索引的静态数组,findOpposingPointsMostPerpendicularToPlane()然后使用平面法线分量的符号映射到它们。

于 2012-02-08T07:37:35.703 回答
0

从您的 bbox 计算边界球体并检查 6 个平截头体平面中每个平面的中心距离。如果其中之一小于球体半径,则将您的对象包括在显示列表中。

于 2012-02-09T07:49:22.300 回答