如果将OpenGL的MVP矩阵设置为单位阵

如果将OpenGL的MVP矩阵设置为单位阵,会发生什么?

 

opengl的几个坐标空间: object space-> eye space-> clip space -> NDC -> WC

那么,MVP矩阵即model-view-projection matrix是将object sapce的vertex直接变换到clip space

即 (X,Y,Z) -> (Xc, Yc, Zc, Wc)  如果点在视锥体内则满足-Wc<=Xc<=Wc; -Wc<=Yc<=Wc; -Wc<=Zc<=Wc;

 

所以如果MVP matrix是identity matrix,对于object space中的顶点(X,Y,Z) (其实是(X,Y,Z,1)因为OpenGL中w默认为1.0),进行变换:

(X,Y,Z,1)*I = (X,Y,Z,1) 注意:为了书写方便这儿使用行向量了,如我们所知OpenGL是这样变换点的P'=MP

 

也就是说MVP为单位阵的情况下,在object space用(X,Y,Z)表达的一个vertex就是在clip space中用(Xc,Yc,Zc,Wc)表达的一个vertex,且Wc=1

 

 

那么这有什么用?最常见的用法是画一个全屏的矩形。想象一下,你在一个x,y,z坐标都是[-1,1]的空间中,x,y平面对应着屏幕,z轴是深度,z=-1的点在near clip plane上,z=1的点在far clip plane上,所以这样指定4个点,画出的矩形将覆盖屏幕,且z值离camera最近:

 

glVertex3i (-1, -1, -1);

glVertex3i (1, -1, -1);

glVertex3i (1, 1, -1);

glVertex3i (-1, 1, -1);

 

需要区别的是,这个时候的z还没有经过depth range的映射(那是在view port变换中进行的),且这儿z在[-1,1]间是因为w=1,不要混淆。

 

此时,可以通过buffer的mask做一些操作,比如先关闭color buffer,只更新depth buffer,然后画全屏矩形,通过设置合适的z值进行深度测试(一般要关闭z write)就可以mask出一些复杂的图形了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值