前面的若干重要概念中描述了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. mui禁止滚动条和禁止滚动

    mui.plusReady(function () { plus.webview.currentWebview().setStyle({ scrollIndicator: 'none' }); }); ...

  2. Java命令行的执行参数

    Java 程序命令行参数说明 启动Java程序的方式有两种: # starts a Java virtual machine, loads the specified class, and invok ...

  3. Hibernate总结1(入门)

    1,官网包简介 整体简介 Project包简介,这个包里有etc文件,这个etc主要包括了配置文件,最主要的是hibernate.cfg.xml文件 lib文件夹包含的是需要加载的依赖jar包,必须加 ...

  4. AngularJS中的过滤器

    欢迎大家指导与讨论 : ) 一.前言 AngularJS的过滤器能够将数据在被指令处理到显示在视图之前进行处理和转换.而且,过滤器不会修改作用域中的数据本身,即过滤器会保证数据的完整性.这样子能够允许 ...

  5. [转]ReactPHP── PHP版的Node.js

    FROM : http://www.csdn.net/article/2015-10-12/2825887 摘要:ReactPHP作为Node.js的PHP版本.在实现思路,使用方法,应用场景上的确有 ...

  6. indows 8上强制Visual Studio以管理员身份运行

    http://diaosbook.com/Post/2013/2/28/force-visual-studio-always-run-as-admin-on-windows-8 Windows 8的一 ...

  7. C#.NET 大型信息化系统集成快速开发平台 - 手机短信开发接口 4.0

    可以批量发信息给手机,相同的信息发给多个手机号码的效果图 已发送手机短信列表 可以批量发手机的功能,可以把先有的待发信息列表,直接通过批量发送功能发出 这个是设置发送模板公式的功能展示,可以设置发送的 ...

  8. C# 如何定义让PropertyGrid控件显示[...]按钮,并且点击后以下拉框形式显示自定义控件编辑属性值

    关于PropertyGrid控件的详细用法请参考文献: 1.C# PropertyGrid控件应用心得 2.C#自定义PropertyGrid属性 首先定义一个要在下拉框显示的控件: using Sy ...

  9. spring WebSocket详解

    场景 websocket是Html5新增加特性之一,目的是浏览器与服务端建立全双工的通信方式,解决http请求-响应带来过多的资源消耗,同时对特殊场景应用提供了全新的实现方式,比如聊天.股票交易.游戏 ...

  10. 翻译qmake文档(一) qmake指南和概述

    翻译qmake文档 目录 英文文档连接: http://qt-project.org/doc/qt-5/qmake-manual.html http://qt-project.org/doc/qt-5 ...