opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()
能找到最好的解释来自:http://www.gamedev.net/topic/489879-glpushmatrixglpopmatrix--glloadmatrixf/
原理:
glPushMatrix didn't fail to push onto the stack; it's job is to push a copy of the current matrix onto a stack of matrices. Those matrices on the stack don't interact at all. You only manipulate the current, top-most, matrix at any given time.
Example 1:
command result glLoadMatrixf(A) stack = [A]
glPushMatrix() stack = [A, A]
glLoadMatrixf(B) stack = [B, A]
glPopMatrix() stack = [A]
Example 2:
command result glLoadMatrixf(A) stack = [A]
glPushMatrix() stack = [A, A]
glMultMatrixf(B) stack = [AB, A]
glPopMatrix() stack = [A]
注意:
glTranslate* 等都是实际调用的是glMultMatrixf
实例:
看下面的代码:
743 glPushMatrix();
744
745 // tramsform camera
746 matrixView.identity();
747 matrixView.rotate(cameraAngleY, 0, 1, 0);
748 matrixView.rotate(cameraAngleX, 1, 0, 0);
749 matrixView.translate(0, 0, -cameraDistance);
750 //@@ the equivalent code for using OpenGL routine is:
751 //@@ glTranslatef(0, 0, -cameraDistance);
752 //@@ glRotatef(cameraAngleX, 1, 0, 0); // pitch
753 //@@ glRotatef(cameraAngleY, 0, 1, 0); // heading
754
755 // copy view matrix to OpenGL
756 glLoadMatrixf(matrixView.getTranspose());
757
758 drawGrid(); // draw XZ-grid with default size
759
760 // compute model matrix
761 matrixModel.identity();
762 //matrixModel.rotateZ(45); // rotate 45 degree on Z-axis
763 matrixModel.rotateY(10); // rotate 45 degree on Y-axis
764 matrixModel.translate(0, 1, 0); // move 2 unit up
765
766 // compute modelview matrix
767 matrixModelView = matrixView * matrixModel;
768
769 // copy modelview matrix to OpenGL
770 glLoadMatrixf(matrixModelView.getTranspose());
771
772 drawAxis();
770 glLoadMatrixf(matrixModelView.getTranspose());
opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()的更多相关文章
- opengl笔记——旋转,一段代码的理解
重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix g ...
- OpenGL 笔记 <2> Compiling and Linking a shader program
Preface 这一节所有的主要内容都在一个OpenGL库文件中<LoadShaders.h> ,只需要用LoadShader()函数进行加载即可.但是由于老是出错,所以自己实现了一下,也 ...
- OpenGL笔记(一) 绘制三角形
GLTools: 一些有用且可复用的函数 GLEW: OpenGL API的一些扩展机制 GLUT: OpenGL Utility toolkit, OpenGL跨平台相关,隐藏平台相关细节 RC代表 ...
- opengl笔记——OpenGL好资料备忘
Plane Equation 注:面可理解为:连接面上的点与原点,投影相同(为:a*x1+b*x2+c*x3) OpenGL Matrix Class (C++) Overview OpenGL fi ...
- opengl 笔记(2)
/*- * Opengl Demo Test * * Fredric : 2016-7-10 */ #include <GLUT/GLUT.h> #include <stdlib.h ...
- opengl 笔记(1)
参考<opengl入门教程>.<OpenGL之坐标转换>.<OpenGL绘制管线操作细节>等资料. 复习下留个备忘:) /*- * Opengl Demo Test ...
- opengl笔记
GL_ARRAY_BUFFER(表示顶点数据) GL_ELEMENT_ARRAY_BUFFER(表示索引数据) GL_PIXEL_UNPACK_BUFEER( 表示传递给O p e n G L 的像素 ...
- OpenGL笔记(五) 着色器渲染(以Android为例)
一.Android平台上下文环境的创建及初始化 1. 首先实例化Android上下文环境,即EGL的初始化. bool EGLCore::init(EGLContext sharedContext) ...
- OpenGL笔记(四) API参考
常见API glActiveTexture 选择活动纹理单元 glAttachShader 将一个着色器对象绑定到一个程序对象 void glAttachShader(GLuint program, ...
随机推荐
- [Python笔记][第一章Python基础]
2016/1/27学习内容 第一章 Python基础 Python内置函数 见Python内置函数.md del命令 显式删除操作,列表中也可以使用. 基本输入输出 input() 读入进来永远是字符 ...
- NFS(网络文件系统的搭建)
关于NFS的原理,我在这就不概诉了,其实非常简答的理解就是一个网络磁盘,你需要把它挂载到你的磁盘上使用而已.那接下来谈谈如和搭建NFS网络文件系统. 需要使用2台机器作此实验,我分别配置IP为192. ...
- django学习笔记二:一个项目多个App项目搭建
django充许在一个项目中存在多个app,如一个大门户网站中可以包含论坛,新闻等内容,其中每一个模块称之为一个App,也可以理解为一个个独立的小型项目最终集成在一个门户网站中最终呈现给用户 本次测试 ...
- android第三方分享之友盟社会化组件
前言 现在几乎所有的app都带有分享功能,第一为了更好地推广自己的产品,第二作为使用者也能及时的把自己觉得好的文章,话题,app分享到社交平台供大家一起学习和使用.开发中虽然android系统自带分享 ...
- 【IOS学习基础】归档和解档
一.归档介绍 1.归档是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程.归档是将数据持久化的一种方式(所谓数据持久化,就是指在IOS开发过程中,将数据保存到本地,能够让程序的运行更加流畅 ...
- C语言undefined behaviour未定义行为
C语言中的未定义行为(Undefined Behavior)是指C语言标准未做规定的行为.同时,标准也从没要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果,又 ...
- jdbc select
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- 不规则三角网 Delaunay——TIN
http://blog.csdn.net/u010025211/article/details/25032209 知识点一:平面中判断一个点是否在三角形内部. #include <stdio.h ...
- sqlite在c++中的使用方法
1.需要下载的文件 http://pan.baidu.com/s/1c06NpzM 2.执行文件shell的编译 3.在c++中如何使用 #include <stdio.h> # ...
- asp.net实现伪静态遇到的问题
之前在一次项目(asp.net网站)中要用到伪静态技术,实现的思路大致是这样的: 在全局配置文件Global.asax(普通的类可以通过实现IHttpModule来完成)中的Application_B ...