当边界框很大时截锥体剔除

发布于 2025-01-03 20:40:19 字数 132 浏览 1 评论 0原文

see

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

see

When bounding box's all 8 vertex is out side the frustum, it won't be rendered.
But if sth happened like shown above. That object should be in the display list. Any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雪若未夕 2025-01-10 20:40:19

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

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

Because you are calculating the intersection as if the box is bunch of points, instead of a bunch of lines. This is how I do it in pseudo-code:

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
}

If your box is an AABB, you create a static array of vertex indices for findOpposingPointsMostPerpendicularToPlane() and then map to them using the sign of the plane normal components.

忘你却要生生世世 2025-01-10 20:40:19

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

Compute the bounding sphere from your bbox and check the center distance from each one of the 6 frustum planes. If one of them is less than the sphere radius include your object in the display list.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文