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, ...
随机推荐
- 【转】android camera(一):camera模组CMM介绍
关键词:android camera CMM 模组 camera参数平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210) 作者:xubin ...
- Class对象
(一) 获得Class对象的四种方式 第1种方法:Object.getClass() 第2种方法:.class语法 第3种方法:Class.forName() 第4种方法:包装类的TYPE域 impo ...
- Elon Musk:同一时候颠覆几个行业的科技狂人
在苹果著名的"不同凡想"广告中,赞扬了那些改变世界的疯狂家伙们."他们不喜欢墨守成规,也不愿安于现状","他们改变了事物","他们 ...
- 使用XE5-PACTH破解Delphi-XE5时,出现检查文件大小失败的解决方法
今天给自己的64位Win7电脑破解Delphi-XE5时,一直出现检查bds.exe尺寸大小失败的错误提示. 网上查了很久,Csdn上给了个破解的bds.exe,本人一直没什么Csdn积分,没得下,所 ...
- EasyUI时间格式化
changeDateFormatNodate: function (cellval) { var date = new Date(parseInt(cellval.replace("/Dat ...
- Winform获取应用程序的当前路径的方法集合(转)
Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏 //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembly.Loc ...
- MySTLString
auto ptr = new char[10]; delete ptr; delete 一个动态数组不能直接delete ptr, 应该是 delete[] ptr;
- 沼跃鱼早已看穿了一切 C/C++
沼跃鱼早已看穿了一切 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 593 Solved: 229[Submit][Status][Web Boa ...
- AngularJS 之Services讲解
Angular带来了很多类型的services.每个都会它自己不同的使用场景.我们将在本节来阐述. 首先我们必须记在心里的是所有的services都是singleton(单例)的,这也是我们所希望得到 ...
- CSS display:table属性用法- 轻松实现了三栏等高布局
display:table:此元素会作为块级表格来显示(类似 <table>); display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签.目前IE8+以 ...