前面的若干重要概念中描述了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. docker中如何制作自己的基础镜像

    一.本地镜像 举个例子:现在把自己的开发环境打包,取名为centos6-base.tar,然后在docker中,以centos6-base.tar作为基准镜像. 1.创建自己的镜像,放置于/root目 ...

  2. Centos5.8 安装SVN并配置HTTP访问

    安装 svn sudo yum install subversion 测试 svn --version 安装 httpd 的 svn 模块 sudo yum install mod_dav_svn 前 ...

  3. jQuery获取文本节点之 text()/val()/html() 方法区别

    1. 无参html():取得第一个匹配元素的html内容.这个函数不能用于XML文档.但可以用于XHTML文档,返回的是一个String 例子: html页面代码:<div><p&g ...

  4. .net AES加密解密

    using System;      using System.Collections.Generic;      using System.Text;      using System.Secur ...

  5. windows mysql提示:1045 access denied for user 'root'@'localhost' using password yes 解决方案

    win7 MySql5.6.17提示:1045 access denied for user 'root'@'localhost' using password yes 从网上找到的解决方法,以此博客 ...

  6. 【深圳】OSC源创会第44期 开始报名

    时间:2016-03-19 14:00 地点: 深圳 南山区海德三道天利中央商务广场B座负一楼(意启创业) 费用:50元/人(现场交),女士.50积分的账号.开源软件作者.学生免费 (用于准备茶歇小食 ...

  7. 线程本地变量ThreadLocal源码解读

      一.ThreadLocal基础知识 原始线程现状: 按照传统经验,如果某个对象是非线程安全的,在多线程环境下,对对象的访问必须采用synchronized进行线程同步.但是Spring中的各种模板 ...

  8. win8.1环境下安装arduino驱动问题解决方案

    1. Windows 键+ R, 输入 shutdown.exe /r /o /f /t 00 2.此时电脑会自动重启,进入一下画面,选择Troubleshoot (转载请注明原处:http://ww ...

  9. Theano2.1.16-基础知识之调试:常见的问题解答

    来自:http://deeplearning.net/software/theano/tutorial/shape_info.html Debugging Theano: FAQ and Troubl ...

  10. Asp.net Mvc中利用ValidationAttribute实现xss过滤

    在网站开发中,需要注意的一个问题就是防范XSS攻击,Asp.net mvc中已经自动为我们提供了这个功能.用户提交数据时时,在生成Action参数的过程中asp.net会对用户提交的数据进行验证,一旦 ...