3d - Bounding Box 非常大时的视锥体剔除

标签 3d frustum culling

see

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

最佳答案

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

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() 创建一个顶点索引的静态数组,然后使用平面法线分量的符号映射到它们。

关于3d - Bounding Box 非常大时的视锥体剔除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9187871/

相关文章:

qt - 剔除可见区域之外的项目

c++ - 为什么 SSAO 仅在特定角度/距离下起作用?

c - 为透视图设置坐标系?

javascript - 3D 变换中的子元素定位不正确

javascript - 如何计算在给定坐标处相机可见的矩形的大小?

java - 没有 glGet* 调用的 opengl 截锥体剔除

opengl-3 - 使用着色器时高效的截锥体剔除

javascript - 浏览器(chrome/firefox/safari)会剔除不可见的 svg 形状吗?

java - 从 BufferedImage 创建 JOGL 纹理

css - 3D 变换向下翻转 CSS 子菜单