3D编程Frustum剔除

时间:2012-06-20 16:11:04

标签: java 3d java-3d openscenegraph

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

我目前正在尝试阅读Java 3D API规范,因为这些书看起来就像这样......

2 个答案:

答案 0 :(得分:3)

  • 你的相机正朝着一个方向看,让我们称之为前进。
  • 到处都有物品。
  • 不需要渲染不在相机前面的物体。
  • 太远的物体将无法看见。
  • 太近的物体会表现不佳(填满整个屏幕等)。

解决方案:删除不在视野范围内,太近或太远的所有对象。所包含区域的形状为“frustrum”,而“culling”所有内容都不在其中。

答案 1 :(得分:1)

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

使用3D API绘制的图形基元被剪切到视锥体:仅出现在平截头体内的基元部分。完全在视锥体之外的原始图像根本不会出现。

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

因此,视锥体剔除是一种初步的排序,无论是原始的还是(更具成本效益的)整个对象,以确定它们是否完全在视锥体之外。当它确定一个物体或原始物位于平截头体外时,截头体剔除通过不尝试绘制它来节省时间。