3D 编程视锥剔除



请对3D图形编程中的视锥剔除进行很好的解释。我需要学习3D(到目前为止从未做过严肃的图形编程),而且我很难理解手册中使用的一些术语,以及我正在使用的书籍。

我目前正在尝试通读Java 3D API规范,因为这些书似乎和这本一样。

  • 你的相机正在看一个方向,让我们称之为前进。
  • 到处都有物体。
  • 不在摄像机前面的对象对于渲染是不必要的。
  • 太远的物体将不可见。
  • 太近的物体会表现不佳(填满整个屏幕等)。

解决方案:移除所有不在视野内、太近或太远的对象。 包含区域的形状是一个"视锥体",您正在"剔除"其中以外的所有内容。

"视锥体"是 3D 场景的区域,在该区域之外不会绘制任何内容。 它是一个截断的金字塔,以屏幕在 4 个侧面的可见性限制以及"近"和"远"可见性限制(通常垂直于视图方向)为界,这些限制也由摄像机矩阵定义。

使用 3D API 绘制的图形基元将裁剪到视图视锥体:仅显示视锥体内的基元部分。 完全在视锥体之外的基元根本不会出现。

但是,即使您的基元没有出现在屏幕上,尝试绘制它也不是免费的:提交到硬件的每个基元都需要时间。 而且,由于完全在视锥体之外的基元根本不会出现,这是浪费时间。

因此,视锥

剔除是对基元或(更具成本效益的)整个对象的初步排序,以确定它们是否完全在视锥体之外。 当它确定对象或基元位于视锥体之外时,视锥体剔除通过根本不尝试绘制它来节省时间。

最新更新