← 全部概念
3D 与渲染 / 04
视锥剔除
跳过镜头看不到的物体
交互演示
交互演示 · 移动指针或点击画面,观察变化
视锥是镜头能看到的那部分世界,形状像一个切掉尖顶的棱锥。视锥剔除会检查每个物体的包围体是否与视锥相交,并跳过外面的物体,避免 GPU 为它们花费时间。示例中镜头不断转动,只有青色扇形区域内的方块会被绘制为实心。
适用场景
使用视锥剔除,跳过镜头视野之外的渲染工作。它与遮挡剔除不同,后者还会尝试跳过被其他物体挡住的物体。
实现示例
不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。
frustum = extractPlanes(projection * view)
for object in scene:
if frustum.intersects(object.worldBounds):
draw(object)常见错误
物体原点可能在屏幕之外,但网格仍有一部分可见。应使用保守的包围体进行测试,并在动画或程序化几何发生变化时更新包围体。
延伸阅读
Three.js 手册 ↗内容原作 Nicolas Zullo · 中文整理与交互改编