OpenGL:glMatrixMode()
在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()相关推荐
- 不变违规:_registerComponent(...):目标容器不是DOM元素
本文翻译自:Invariant Violation: _registerComponent(-): Target container is not a DOM element I get this e ...
- Javascript:call(),apply()和bind()
What' s "this" 在面向对象的JS中,我们了解到在JS中,一切都是对象.因为一切都是对象,我们开始明白我们可以为函数设置和访问其他属性.而this提供了一种更优雅的方式 ...
- Python numpy函数:all()和any()比较矩阵
数组元素的比对,我们可以直接使用"=="进行比较,比如: 但是当数组元素较多时,查看输出结果便变得很麻烦,这时我们可以使用all()方法,直接比对a矩阵和b矩阵的所有对应的元素是否 ...
- WinAPI执行外部程序和创建新进程:CreateProcess()的使用
WinAPI执行外部程序和创建新进程:CreateProcess()的使用 一.基本原理和流程 执行一个外部程序实质上可以认为就是创建一个进程 windows系统下创建一个进程意味着: 1.创建一个内 ...
- jQuery的ajax钩子函数:ajaxStart()、ajaxSend()、ajaxSuccess()、 ajaxError()、ajaxComplete()、ajaxStop()
钩子函数介绍: 钩子函数是在ajax某一个阶段自动执行的函数: ajax的钩子函数是全局的ajax函数: 不是写在ajax内部,是挂在window身上去执行的: 钩子函数有:ajaxStart(). ...
- C++功能模块2:mkdir()创建文件夹目录
Linux中判断某目录是否存在,如果不存在,创建该目录. 注:mkdir()一次只能创建一层目录,如果想要创建多层,需要对下述函数改造.或调用多次该函数. 一.直接上代码 //函数返回0: 目录创建成 ...
- jq动画函数:show()、hide()、toggle()、slideDown()、slideUp()、slideToggle()、fadeIn ()、fadeOut ()、fadeToggle ()
jq动画分为:基本动画和综合动画: 基本动画的作用都是显示隐藏: 综合动画是将自定义的属性放进去设置: 基本动画分为: show().hide().toggle():相对于左上角显示隐藏: slide ...
- openGL 中 glColor3f()函数 颜色设定
在openGL中编程,经常用到glColor3f()函数进行颜色设定,现对参数与颜色的对应关系整理如下: glColor3f(0.0, 0.0, 0.0); --> 黑色 glColor3 ...
- Swift:print()vs println()vs NSLog()
本文翻译自:Swift: print() vs println() vs NSLog() What's the difference between print , NSLog and println ...
最新文章
- 机器视觉-相机内参数和外参数
- Linux网络性能评估工具iperf
- 让Java程序只运行一个实例
- python画三维温度散点图-Python 绘制酷炫的三维图步骤详解
- java中override快捷键_【基础回溯1】面试又被 Java 基础难住了?推荐你看看这篇文章。...
- 手把手教你做一个react-redux-demo
- Java笔记03-Constructor Override
- c语言什么时候需要加分号,归纳一下html中什么时候需要分号什么时候需要冒
- VB讲课笔记14:二级VB知识点总结
- [小笔记]TypeScript/JavaScript数组转置
- PS将红底证件照改为白底
- SSM项目实战之八:静态资源文件的整合
- java 吃豆豆游戏背景底纹_java swing开发简单的大鱼吃豆子小游戏,可用于毕业设计(附详细设计文档)...
- 查询攻略,将多个退回延误的快递单号物流设置分类
- HObject,unsigned char的相互转换
- 云之讯张雯:云计算时代融合通讯开发及算法优化
- react input Onchange事件不能立刻拿到值,只能拿到上次输入的值
- 人脸识别应用概览及其技术、产品厂商一览
- MAC M1芯片可下载的安卓模拟器Android Emulator
- JS函数判断一个数是否是质数
热门文章
- Jeewx-Api 1.3.2 版本发布,微信开发SDK
- JEECG_3.7开发环境搭建与代码生成器入门级教程-张代浩-专题视频课程
- 医疗影像技术简介(X射线,CT,MRI等)
- Redis缓存穿透、击穿、雪崩来解释个明白
- SqlServer分组取一瓢和月初月末
- 学习webpack4 - ES6语法转化
- Maven 打包war文件
- 1.4. Open Source and License
- Android开源源码推荐(一)
- 《C陷阱与缺陷》一第1章 词法“陷阱”1.1 =不同于==