2

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

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

4

2 回答 2

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

解决方案:移除所有不在视野范围内、太近或太远的物体。包含区域的形状是“平截头体”,您正在“剔除”不在其中的所有内容。

于 2012-06-20T16:17:04.920 回答
1

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

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

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

因此,视锥体剔除是对基元或(更经济有效)整个对象的初步排序,以确定它们是否完全在视锥体之外。当它确定一个对象或图元在截锥体之外时,截锥体剔除通过根本不尝试绘制它来节省时间。

于 2012-06-20T18:29:56.143 回答