在OpenGL中,如果想对模型进行操作,就要对这个模型的状态(当前的矩阵)乘上这个操作对应的一个矩阵.
如果当前矩阵乘以变换矩阵(平移, 缩放, 旋转), 那相乘之后, 模型的位置被变换;
如果当前矩阵乘以投影矩阵(将3D物体投影到2D平面), 相乘后, 模型的投影方式被设置;
如果当前矩阵乘以纹理矩阵(), 模型的纹理方式被设置.

而用来指定当前矩阵, 就是glMatriMode(GLenum mode);
glMatrixMode有3种模式: GL_PROJECTION 投影, GL_MODELVIEW 模型视图, GL_TEXTURE 纹理.

所以,在操作投影矩阵以前,需要调用函数:
glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影矩阵
然后把矩阵设为单位矩阵:
glLoadIdentity();

然后调用glFrustum()或gluPerspective(),它们生成的矩阵会与当前的矩阵相乘,生成透视的效果;
原文链接:https://blog.csdn.net/u012861978/article/details/88552546


glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有3种模式: GL_PROJECTION 投影, GL_MODELVIEW 模型视图, GL_TEXTURE 纹理.

如果参数是GL_PROJECTION,这个是投影的意思,就是要对投影相关进行操作,也就是把物体投影到一个平面上,就像我们照相一样,把3维物体投到2维的平面上。这样,接下来的语句可以是跟透视相关的函数,比如glFrustum()或gluPerspective();

在操作投影矩阵以前,需要调用函数:

glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影矩阵

然后把矩阵设为单位矩阵:
glLoadIdentity();
然后调用glFrustum()或gluPerspective(),它们生成的矩阵会与当前的矩阵相乘,生成透视的效果;

如果参数是GL_MODELVIEW,这个是对模型视景的操作,接下来的语句描绘一个以模型为基础的适应,这样来设置参数,接下来用到的就是像gluLookAt()这样的函数;
若是GL_TEXTURE,就是对纹理相关进行操作
顺便说下,OpenGL里面的操作,很多是基于对矩阵的操作的,比如位移,旋转,缩放,所以,这里其实说的规范一点就是glMatrixMode是用来指定哪一个矩阵是当前矩阵,而它的参数代表要操作的目标,GL_PROJECTION是对投影矩阵操作,GL_MODELVIEW是对模型视景矩阵操作,GL_TEXTURE是对纹理矩阵进行随后的操作。

切换当前矩阵.
如.要使用透视(3D).那么先要设置透视投影
glMatrixMode(GL_PROJECTION); //切换到投影矩阵.
//...设置透视投影
设置完成后开始画图,需要切换到 模型视图矩阵 才能正确画图.
glMatrixMode(GL_MODELVIEW);
// 画一个物体A (看起来是3D的),
// 如这时候需画一个 2D效果 的 物体A,那么又需要透视投影

glMatrixMode(GL_PROJECTION); //切换到投影矩阵..
// ..设置正交投影
//..设置完成,切换回模型视图矩阵.....
glMatrixMode(GL_MODELVIEW);
// 再画一个物体A (看起来是2D的)

// 如从头到尾都是画3D/2D, 只需初始化时设置一次.
// 如果有交替,那么就需要glMatrixMode() 切换
// 因这样设置很烦人,所以又有glPushMatrix() 保存当前矩阵

原文链接:https://blog.csdn.net/jiangdf/article/details/8460012

OpenGL:glMatrixMode()相关推荐

  1. 不变违规:_registerComponent(...):目标容器不是DOM元素

    本文翻译自:Invariant Violation: _registerComponent(-): Target container is not a DOM element I get this e ...

  2. Javascript:call(),apply()和bind()

    What' s "this" 在面向对象的JS中,我们了解到在JS中,一切都是对象.因为一切都是对象,我们开始明白我们可以为函数设置和访问其他属性.而this提供了一种更优雅的方式 ...

  3. Python numpy函数:all()和any()比较矩阵

    数组元素的比对,我们可以直接使用"=="进行比较,比如: 但是当数组元素较多时,查看输出结果便变得很麻烦,这时我们可以使用all()方法,直接比对a矩阵和b矩阵的所有对应的元素是否 ...

  4. WinAPI执行外部程序和创建新进程:CreateProcess()的使用

    WinAPI执行外部程序和创建新进程:CreateProcess()的使用 一.基本原理和流程 执行一个外部程序实质上可以认为就是创建一个进程 windows系统下创建一个进程意味着: 1.创建一个内 ...

  5. jQuery的ajax钩子函数:ajaxStart()、ajaxSend()、ajaxSuccess()、 ajaxError()、ajaxComplete()、ajaxStop()

    钩子函数介绍:  钩子函数是在ajax某一个阶段自动执行的函数: ajax的钩子函数是全局的ajax函数: 不是写在ajax内部,是挂在window身上去执行的: 钩子函数有:ajaxStart(). ...

  6. C++功能模块2:mkdir()创建文件夹目录

    Linux中判断某目录是否存在,如果不存在,创建该目录. 注:mkdir()一次只能创建一层目录,如果想要创建多层,需要对下述函数改造.或调用多次该函数. 一.直接上代码 //函数返回0: 目录创建成 ...

  7. jq动画函数:show()、hide()、toggle()、slideDown()、slideUp()、slideToggle()、fadeIn ()、fadeOut ()、fadeToggle ()

    jq动画分为:基本动画和综合动画: 基本动画的作用都是显示隐藏: 综合动画是将自定义的属性放进去设置: 基本动画分为: show().hide().toggle():相对于左上角显示隐藏: slide ...

  8. openGL 中 glColor3f()函数 颜色设定

    在openGL中编程,经常用到glColor3f()函数进行颜色设定,现对参数与颜色的对应关系整理如下: glColor3f(0.0, 0.0, 0.0);  --> 黑色   glColor3 ...

  9. Swift:print()vs println()vs NSLog()

    本文翻译自:Swift: print() vs println() vs NSLog() What's the difference between print , NSLog and println ...

最新文章

  1. 机器视觉-相机内参数和外参数
  2. Linux网络性能评估工具iperf
  3. 让Java程序只运行一个实例
  4. python画三维温度散点图-Python 绘制酷炫的三维图步骤详解
  5. java中override快捷键_【基础回溯1】面试又被 Java 基础难住了?推荐你看看这篇文章。...
  6. 手把手教你做一个react-redux-demo
  7. Java笔记03-Constructor Override
  8. c语言什么时候需要加分号,归纳一下html中什么时候需要分号什么时候需要冒
  9. VB讲课笔记14:二级VB知识点总结
  10. [小笔记]TypeScript/JavaScript数组转置
  11. PS将红底证件照改为白底
  12. SSM项目实战之八:静态资源文件的整合
  13. java 吃豆豆游戏背景底纹_java swing开发简单的大鱼吃豆子小游戏,可用于毕业设计(附详细设计文档)...
  14. 查询攻略,将多个退回延误的快递单号物流设置分类
  15. HObject,unsigned char的相互转换
  16. 云之讯张雯:云计算时代融合通讯开发及算法优化
  17. react input Onchange事件不能立刻拿到值,只能拿到上次输入的值
  18. 人脸识别应用概览及其技术、产品厂商一览
  19. MAC M1芯片可下载的安卓模拟器Android Emulator
  20. JS函数判断一个数是否是质数

热门文章

  1. Jeewx-Api 1.3.2 版本发布,微信开发SDK
  2. JEECG_3.7开发环境搭建与代码生成器入门级教程-张代浩-专题视频课程
  3. 医疗影像技术简介(X射线,CT,MRI等)
  4. Redis缓存穿透、击穿、雪崩来解释个明白
  5. SqlServer分组取一瓢和月初月末
  6. 学习webpack4 - ES6语法转化
  7. Maven 打包war文件
  8. 1.4. Open Source and License
  9. Android开源源码推荐(一)
  10. 《C陷阱与缺陷》一第1章 词法“陷阱”1.1 =不同于==