月度归档:2013年10月

[3D图形学]视锥剔除入门(翻译)

最近在学3D图形学...看到篇不错的视锥剔除入门教程,于是搬来翻译了...

时至今日,许多刚刚下海的3D引擎程序员仍不了解视锥剔除(Frustum Culling)的重要性和益处,这让我和我的小伙伴们感到很震♂惊.我在Flipcode论坛中发现尽管网络上有海量的相关资料,仍有许多人提出对视锥剔除实现的问题.因此我决定撰写这篇文档,简单描绘出我现在所使用的四叉树剔除引擎(Quad-tree Culled Engine)的工作方式.诚然,市面上有许多种成熟且高效的视锥剔除算法,但我认为这个算法足以用来学习视锥剔除的理论基础.在正式开始前我还想说明一件事,以前我一直把Frustum(平截头体)打成Frustrum(截头锥),为此我没少被论坛上的人喷.在这里我承认Frustum是正确的拼写.对那些以前被我冒犯的人我表示抱歉...你们这群吹毛求疵的傻[哔-]...

大多数人已经知道什么是视锥剔除了(译者:如果你是手滑误点进来的...视锥剔除是一个图形渲染前的步骤,用于剔除掉不需要绘制的部分).视锥(准确说是平截头体Frustum)的形状酷似一个塔尖被削平了的金字塔,更准确地说,是一个四棱锥的顶点偏下位置被一个裁面(Clipping Plane,见图1)裁断.事实上,视锥本身就是由6个面所组成.这6个面被称为近裁面,远裁面,上裁面,下裁面,左裁面,右裁面.视锥剪裁仅仅是一个用来判断物体是否需要被绘制的过程.尽管从本质上讲视锥剔除应该是三维层面的,但事实上大多数时候它仅仅需要以纯代数的方法便能解决.这也是为什么我如此推崇视锥剔除的原因,它非常的快(如果算法好的话),而且是在渲染管线(Rendering Pipeline)之前进行的,不像背面剔除(Backface Culling)那样需要在渲染管线之后一个顶点一个顶点地计算.对于被剪裁掉的物体都不会将其送入显卡(译者:那是...被剔除掉的压根都不用渲染),因此视锥剔除对渲染速度有巨大的改善,毕竟什么都不渲染是最快的渲染... 阅读全文 [...]