首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >边界框非常大时的Frustum剔除

边界框非常大时的Frustum剔除
EN

Stack Overflow用户
提问于 2012-02-08 12:32:31
回答 2查看 2.1K关注 0票数 3

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-08 15:37:36

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

代码语言:javascript
复制
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()创建顶点索引的静态数组,然后使用平面法线组件的符号映射到它们。

票数 2
EN

Stack Overflow用户

发布于 2012-02-09 15:49:22

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9187871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档