提取视截面

在Frustum Culling的计算中,我们需要提取出视截面。那如果计算视截面呢?
首先,我们需要了解平面的表示方法:
平面的数学表达式是:Ax+By+Cz+D=0;
若A,B,C组成的向量(A,B,C)等于平面的单位法向量,则|D|表示原点到此平面的距离。若D>0,则原点位于平面的正面(法向量所指的一面);若D<0,则原点位于平面的背面;若D=0,则平面经过原点。
这样,用一个四维向量可以很方便的表示一个平面:缩写记号<N,D>来表示满足方程NQ+D=0中点Q组成的平面。
接着,下面就是如何计算视截面,分以下两种情况:
1. 在已知视截体的焦距e,屏幕高宽比a,近视截面的距离n,远视截面的距离f的情况下,可以通过以下公式计算在摄象机空间所看到的平面向量:
              平面                        <N,D>
               近                        <0,0,-1,-n>
               远                        <0,0,1,f>
               左                        <e/sqrt(e*e+1),0, -1/sqrt(e*e+1), 0>
               右                        <-e/sqrt(e*e+1),0, -1/sqrt(e*e+1),0>
               上                        <0,-e/sqrt(e*e+a*a), -a/sqrt(e*e+a*a), 0>
               下                        <0,e/sqrt(e*e+a*a), -a/sqrt(e*e+a*a),0>
这种情况适合于用glFrustum()来指定投影矩阵的情况。
2. 在其他的情况下,需要首先获得PROJECTION_MATRIX和MODELVIEW_MATRIX:
    float proj[16],modv[16];
    glGetfloatv( GL_PROJECTION_MATRIX, proj );
    glGetfloatv( GL_MODELVIEW_MATRIX, modv );
在这种情况下又可以分为两种情况,第一种情况,MODELVIEW_MATRIX为单位矩阵:
设透视投影矩阵为M,则摄象机空间内的视截面为:
              平面                        <N,D>
               近                         M4+M3
               远                         M4-M3
               左                         M4+M1
               右                         M4-M1
               上                         M4+M2
               下                         M4-M2
其中的Mi(1<=i<=4)表示矩阵M的第i行。
第二种情况,MODELVIEW_MATRIX不是单位矩阵:
若透视投影矩阵为P,MODELVIEW为M,组合矩阵MP代替上面六式中的M,得到的结果是在模型空间内的视截面。

参考文件:
1.《3D数学与计算机图形学中的数学方法》,Eric Lengyel著,清华大学出版社出版。

-----------------------------致力于多媒体技术,成为有思想的软件工程师------------------------

此文章为我原创作品,若要转载,请和本人联系,或注明出处。
欢迎大家对文章内容提出宝贵意见,同时希望大家及时指出文中的错误之处,这样我可以及时更正。
我的联系方式:
QQ: 7578420
Email: jerrydong@tom.com

----------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值