如果将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出一些复杂的图形了
分享到:
相关推荐
代码在android 平台,jni 层利用 mvp矩阵实现了 地球的绘制,旋转 移动,以及相机的旋转和移动 ,参考:https://blog.csdn.net/zhangpengzp/article/details/88749779
1. Qt5.9 2. OpenGL 3.3 3.矩阵:缩放矩阵,旋转矩阵 移动矩阵. 4.shader :mat4x4
OpenGL投影矩阵的一个小程序,可以随意设置参数,方便理解
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 ) https://hanshuliang.blog.csdn.net/article/details/112917092 博客源码 ( 该源码是...
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 ) https://hanshuliang.blog.csdn.net/article/details/112859256 博客源码 ( 该源码是 Windows 桌面程序 , 使用 Visual Studio ...
【OpenGL】正交投影和透视投影矩阵(二) —— 结合OpenGL代码验证
利用vs2010 mfc glew扩展库编写的入门级程序
openGL 各种坐标矩阵变换
OpenGL透视矩阵的一个小程序,可以随意设置参数,方便理解
OpenGL ES相关的矩阵和变换(附实例代码) 顶点移动相关矩阵变换 顶点旋转相关矩阵运算 模型缩放相关矩阵运算 ............ ............
这个demo用到了glfw、glm、SOIL、glew等第三方库..............................
使用QT5 opengl 进行透明度设置,以及立体图形整体的颜色设置。
基于VC++6.0的OpenGL程序,设置光源位置和材质,程序能显示三个真实感的球
个人博客中讲解OpenGLES入门课程的第9章的示例代码
在使用OpenGL做图形加载后,根据实际需求往往需要进行平移、旋转、缩放等操作,在三维坐标中,通过矩阵和向量之间的各种数学运算完成以上过程。glm包含了丰富的矩阵、向量计算数学库。在用此数学库之前,需要有一定...
openGL投影矩阵原理及数学推导[归纳].pdf
用Vc++ 与OpenGL 编写的机器人程序,比较基础,比较有趣。主要是掌握矩阵的操作用于绘制对象的转换。
opengl 基本操作 模型变换 键盘控制 透视投影矩阵
openGL构造二维旋转矩阵
掌握OpenGL中的矩阵变换、模型视图变换及投影变换。