前面的若干重要概念中描述了OPENGL中的几个重要变换,而矩阵是线性代数中的重要数学工具,它被用来对这些变换进行数学上的实现。

矩阵主要有以下几种:

模型视图矩阵:模型视图矩阵是个4*4的矩阵,代表经过变换的坐标系统,我们可以用这个坐标系统放置物体并设置其方向,顶点坐标以单列矩阵的形式表示,乘以模型视图矩阵,产生与视觉坐标系统相对应的经过变换的新坐标(顶点坐标*模型视图矩阵=与视觉坐标系统对应的新坐标

对模型视图矩阵进行修改

以下是对模型视图矩阵进行修改的例子:

移动

glTranslatef(GLfloat x,Glfloat y,GLfloat z);

例如: 若我们想将绘制对象沿着y轴向上移动10个单位,

glTranslatef(0.0f,10.0f,0.0f)

  旋转

glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)

  解释:将绘制对象沿着向量(x,y,z)旋转angle度(旋转轴:(x,y,z),旋转角度(angle))

缩放

glScalef(GLfloat x,GLfloat y,GLfloat z);

  以上是对模型视图矩阵的修改,但是我们应该注意到,这种对矩阵的修改是累加性的,即第二次的修改是在第一次修改的基础上进行的,每一次的修改并非独立的,

,为了是每一次的修改独立,符合渲染流水线的工业思想,于是就有了单位矩阵

单位矩阵

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

  

单位矩阵数学上的定义是:对角线为1,其他部位全为0,在OPENGL中的定义是:把模型视图矩阵重置回原点

矩阵堆栈:

glPushMatrix()

保存当前模型视图矩阵变换状态

glPopMatrix()

  

恢复栈顶元素保存的模型视图矩阵变换状态

glGet(GL_MAX_MODELVIE_STACK_DEPTH)
或者
glGet(GL_MAX_PROJECTION_STACK_DEPTH)

  以上两个函数分别用来获得模型视图矩阵堆栈的深度和投影和投影矩阵堆栈的深度

矩阵堆栈的深度:能保存的最多矩阵数

如果超过了堆栈深度:产生GL_STACK_OVERFLOW错误(上溢)

如果试图从一个空堆栈中弹出一个矩阵值:产生GL_STACK_UNDERFLOW错误(下溢)

OPENGL之矩阵的更多相关文章

  1. Opengl中矩阵和perspective/ortho的相互转换

    Opengl中矩阵和perspective/ortho的相互转换 定义矩阵 Opengl变换需要用四维矩阵.我们来定义这样的矩阵. +BIT祝威+悄悄在此留下版了个权的信息说: 四维向量 首先,我们定 ...

  2. OpenGL投影矩阵

    概述 透视投影 正交投影 概述 计算机显示器是一个2D平面.OpenGL渲染的3D场景必须以2D图像方式投影到计算机屏幕上.GL_PROJECTION矩阵用于该投影变换.首先,它将所有定点数据从观察坐 ...

  3. OpenGL投影矩阵【转】

    OpenGL投影矩阵 概述 透视投影 正交投影 概述 计算机显示器是一个2D平面.OpenGL渲染的3D场景必须以2D图像方式投影到计算机屏幕上.GL_PROJECTION矩阵用于该投影变换.首先,它 ...

  4. OpenGL的矩阵使用——绘制桌子

    其中最左边的桌子循环上移(即匀速上移到一定位置后回到原点继续匀速上移),中间的桌子不断旋转(即绕自身中间轴旋转),最右边的桌子循环缩小(即不断缩小到一定大小后回归原来大小继续缩小). 桌子的模型尺寸如 ...

  5. ogre, dx, opengl坐标矩阵

    opengl 右手坐标系 列向量 左乘 列主序存储矩阵osg   右手坐标系 行向量 右乘 行主序存储矩阵d3d       左手坐标系 行向量 右乘 行主序存储矩阵ogre    右手坐标系 列向量 ...

  6. 关于Opengl投影矩阵

    读 http://www.songho.ca/opengl/gl_projectionmatrix.html 0.投影矩阵的功能: 将眼睛空间中的坐标点 [图A的视椎体]     映射到     一个 ...

  7. 【脚下生根】之深度探索安卓OpenGL投影矩阵

    世界变化真快,前段时间windows开发技术热还在如火如荼,web技术就开始来势汹汹,正当web呈现欣欣向荣之际,安卓小机器人,咬过一口的苹果,winPhone开发平台又如闪电般划破了混沌的web世界 ...

  8. opengl的矩阵理解

    原文链接:http://blog.csdn.net/byhuang/article/details/1476199 矩阵真的是一个很神奇的数学工具, 虽然单纯从数学上看, 它并没有什么特别的意义, 但 ...

  9. OpenGL列主元矩阵和列主序存储

    OpenGL矩阵要考虑两个点,一个是向量如何排布,一个是矩阵如何存储和恢复. 1.排布 排布决定了运算的顺序.OpenGL使用的是列主元,它的意思就是一个4X4的矩阵是由4个列向量构成(这里的v1,v ...

随机推荐

  1. background-size背景缩放

    特别注意:背景图片缩放是相对于背景图片所在容器的宽高而言的,并不是相对背景图片本身的宽高 比如,一个div的宽高是300和200像素,背景图片本身的宽高是100*100的像素,设置div的backgr ...

  2. jquery的工具方法isFunction/isArray/isWindow/isNumeric/isPlainObject/isEmptyObject

    isFunction : 是否函数 isArray : 是否数组 isWindow : 是否window isNumeric : 是否数字 type : 数据类型方法 isPlainObject : ...

  3. zlog学习笔记(zc_arraylist)

    zc_arraylist.h /** * 实现类似列表的功能 * */ #ifndef __zc_arraylist_h #define __zc_arraylist_h #define ARRAY_ ...

  4. PHP & Delphi 語法

    明 C(区分大小写) Delphi(不区分大小写) PHP(区分大小写) 整型变量的定义 1 2 3 4 5 6 7 char a = 'a';         /* 8位有符号*/ int a=10 ...

  5. FFT的物理意义

    来源:学步园 FFT(Fast Fourier Transform,快速傅立叶变换)是离散傅立叶变换的快速算法,也是我们在数字信号处理技术中经常会提到的一个概念.在大学的理工科课程中,在完成高等数学的 ...

  6. js,onblur后下一个控件获取焦点判断、html当前活跃控件、jquery版本查看、jquery查看浏览器版本、setTimeout&setInterval

    需求: input控件在失去焦点后直接做验证,验证通不过的话,显示相应错误.但是如果失去焦点后点击的下个控件是比较特殊的控件(比如,退出系统),那么不执行验证操作,直接退出系统(防止在系统退出前,还显 ...

  7. Java 集合系列01之 总体框架

      Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set ...

  8. Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程

    Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...

  9. Spire.Doc组件读取与写入Word

    之前写了一篇开源组件DocX读写word的文章,当时时间比较匆忙选了这个组件,使用过程中还是有些不便,不能提前定义好模版,插入Form表单域进行替换.最近无意中发现Spire.Doc组件功能很强大,目 ...

  10. 【活动】写#听云#原创博文 赢取iPhone 6超级大奖

    移动应用的使用量和重要性与日俱增,用户体验的要求也越来越高.与桌面程序相比,移动应用耗电小,速度慢,但手机用户却希望享受到与桌面程序同样的加载速度.那么如何发现移动应用的性能黑洞,优化移动应用性能,这 ...