首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Frustum剔除的困惑

Frustum剔除的困惑
EN

Stack Overflow用户
提问于 2010-09-28 04:50:47
回答 4查看 2.5K关注 0票数 5

我是OpenGL的新手。我正在和JOGL一起使用它。

我在读关于截截体剔除的文章:

http://www.lighthouse3d.com/opengl/viewfrustum/

http://www.crownandcutlass.com/features/technicaldetails/frustum.html

我不确定它到底应该做什么。OpenGL不会自动剔除屏幕外的对象吗?(这种剔除是否比一开始就不发送对象要慢得多?)

根据我所读到的,这看起来并不能避免那些被遮挡在另一个对象后面,但却在视图截体内的绘制对象。这是否意味着唯一的好处是避免将屏幕外的对象发送到OpenGL?

EN

回答 4

Stack Overflow用户

发布于 2010-09-28 04:59:57

是的,你基本上是对的。Frustum剔除会截断相机金字塔外部的对象。渲染场景时,OpenGL当然也会执行此操作,但会基于每个顶点执行此操作。Frustum剔除适用于每个对象,因此其性能提升潜力要高得多。

其中一个瓶颈是CPU和GPU之间的数据传输。例如,如果您只需要传输室外场景中所有对象/顶点的1/4,则平截体剔除可以产生很好的性能提升。

票数 4
EN

Stack Overflow用户

发布于 2010-09-28 05:00:57

最快的物体是你根本不需要画的物体。

通常,对于已经不是非常简单的对象,您将提供一个简化的保守边界体积。这样,您就可以在不处理复杂对象中的每个三角形的情况下进行锥体剔除。

避免相互遮挡的图形对象称为遮挡消隐。遮挡剔除通常比截体剔除更复杂;但是,请注意,它仍然可以使用相同的简化边界体积。

票数 3
EN

Stack Overflow用户

发布于 2010-09-28 05:06:57

是的--视锥剔除只移除完全位于视锥之外的对象。不多不少。是的,你可以潜在地提高OpenGL本身的性能,特别是如果你可以一次剔除更多的项目(例如,一个视图图库可能能够相当快地砍掉图形的整个分支)。

也有面部剔除,删除三角形(或任何东西),是背对着观众,但这是分开的截体剔除。

有几种方法可以处理被其他对象遮挡的对象。遮挡剔除是最简单的,但OpenGL不直接支持它(尽管有些硬件作为扩展)。另一个是深度缓冲区-- OpenGL直接支持它。不同的是,遮挡剔除会查看整个对象,如果完全模糊,则根本不会渲染它。深度缓冲区是以片段为单位工作的,所以它只有在(几乎)完全呈现对象之后才会发生。因此,根据您正在处理的对象的数量(以及类似情况),执行自己的遮挡剔除可能是一个相当大的胜利(因为它可以避免在深度缓冲区完成其工作之前所需的大量渲染)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3807754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档