跳到主要内容
← 全部概念
3D 与渲染 / 04

视锥剔除

跳过镜头看不到的物体

交互演示

交互演示 · 移动指针或点击画面,观察变化

视锥是镜头能看到的那部分世界,形状像一个切掉尖顶的棱锥。视锥剔除会检查每个物体的包围体是否与视锥相交,并跳过外面的物体,避免 GPU 为它们花费时间。示例中镜头不断转动,只有青色扇形区域内的方块会被绘制为实心。

适用场景

使用视锥剔除,跳过镜头视野之外的渲染工作。它与遮挡剔除不同,后者还会尝试跳过被其他物体挡住的物体。

实现示例

不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。

frustum = extractPlanes(projection * view)
for object in scene:
  if frustum.intersects(object.worldBounds):
    draw(object)

常见错误

物体原点可能在屏幕之外,但网格仍有一部分可见。应使用保守的包围体进行测试,并在动画或程序化几何发生变化时更新包围体。

延伸阅读

Three.js 手册 ↗
内容原作 Nicolas Zullo · 中文整理与交互改编