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 resultglLoadMatrixf(A) stack = [A] glPushMatrix() stack = [A, A] glLoadMatrixf(B) stack = [B, A] glPopMatrix() stack = [A]
Example 2:
command resultglLoadMatrixf(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());
转载于:https://www.cnblogs.com/suncoolcat/p/3310640.html
opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()相关推荐
- OPenGL笔记--创建三维图形(立方体)
文章目录 一.前置知识 二.运行效果 三.具体代码 一.前置知识 通过之前的学习,我们已经知道了如何创建多边形,立方体实际就是多边形围起来的三维图形,例如: 椎体是4个三角形围起来的三维图形: 正方体 ...
- OPenGL笔记--创建一个3D场景
文章目录 一.前言 二.效果展示 三.详细流程 3.1.World.txt文件规则 3.2.加载World.txt 3.3.绘制场景 3.4.交互 四.详细代码 五.举一反三 一.前言 通过前面的学习 ...
- 小红书达人笔记与素人笔记的区别,对号入座选达人
接触小红书的人一定对小红书达人和笔记这两样东西不陌生,但是笔记也分达人笔记和素人笔记.那么小红书达人笔记与素人笔记的区别是什么?各自适用于哪些场景?今天就来和大家好好分享一下其中的奥妙. 一.小红书达 ...
- Learn OpenGL 笔记7.1 PBR Theory(physically based rendering基于物理的渲染 理论)
PBR,或更通常称为基于物理的渲染,是一组渲染技术,它们或多或少基于与物理世界更接近的相同基础理论.由于基于物理的渲染旨在以物理上合理的方式模拟光线,因此与我们的原始光照算法(如 Phong 和 Bl ...
- [OpenGL笔记]glut入门(1)
开头 写在开头,推荐看一下这篇文章涨涨知识OpenGL库文件的区别(glut/glew/glfw/glad/freeglut)和环境配置 不知道从哪扒来的glut的参考文档 代码初识 其实之前学的是g ...
- opengl笔记——OpenGL好资料备忘
Plane Equation 注:面可理解为:连接面上的点与原点,投影相同(为:a*x1+b*x2+c*x3) OpenGL Matrix Class (C++) Overview OpenGL fi ...
- Python之OpenGL笔记(38):三种光照通道的合成
一.目的 1.实现镜面光照射下的棋盘球体: 2.环境光.散射光.镜面光三种光照通道的合成 二.程序运行结果 三.镜面光 现实世界中,当光滑表面被照射时会有方向很集中的反射光.这就是镜面光(Spe ...
- OpenGL笔记之矩阵变换(Matrix Transformation)
本文是学习OpenGL过程中的一篇笔记.在学习过程中,主要参照了大名鼎鼎的 <OpenGL Programming Guide>(中文名<OpenGL编程指南>,有些人还称之为 ...
- OpenGL 笔记1 固定管线实例 + 双缓存测试实例
欲以此分类来记录opengl的学习历程,此为第一篇,所以先来一个固定管线的例子,以及对双缓存的测试. 一.配置环境 写之前,先进行配置,然后再讲内容. 注:第一部分涉及的代码均忽略. [环境配置传送门 ...
最新文章
- 今天開始學習silverlight了
- Python测试框架pytest(05)fixture - error和failed、fixture实例化、多个fixture
- java实体类属性非空判断工具类
- Java 泛型(1):基本原理
- java 可选参数_超干货详解:kotlin(4) java转kotlin潜规则
- [导入]MSIL: call callvirt
- idea超炫的自定义模板
- HDU 4534 郑厂长系列故事——新闻净化
- 喜提 300w 硬核资产!
- [Jmeter][基础]Jmeter连接IMPALA
- LINUX SHELL获得CPU核心(线程)个数
- 建立桌面文件管理格子_win10桌面分区,win10如何创建桌面格子
- 可靠性试验顺序应该如何安排?
- 【计算机网络】信源编码——香农三大定理
- 更改PPT的模板名称
- 如何训练好一个神经网络?
- linux硬盘ro改为rw,RO,RW,ZI 和scatter file详解(转载)
- html怎么显示一个点赞的心形,jquery心形点赞关注效果的简单实现
- ZYNQ开发系列——使用AXI4LITE接口进行PS和PL交互
- python中的path的使用
热门文章
- 虽然“互联网电商”导致大量的“线下实体行业”受到冲击,但是“体验行业”永远不会被“互联网电商”影响
- 持有数字货币的手机丢了,数字货币还能找回来吗?该注意些什么?
- python入门——P42魔法方法:算数运算1
- P1 Human Pose Estimation人体姿态综述估计调研
- sql server 监视_监视SQL Server报告服务
- alwayson高可用组_AlwaysOn可用性组–好奇心使您的工作更轻松–第4部分
- SQL Server中的即时文件初始化概述
- sql server 锁定_关于锁定SQL Server的全部
- Docker安装elasticsearch-head监控ES步骤 - gmijie的专栏 - CSDN博客
- mongoimport csv文件