glPushMatrix()和glPopMatrix()以及glLoadIdentity()的理解
glLoadIdentity()重置当前矩阵,为什么要PushMatrix(),然后PopMatrix(),因为是由于是对矩阵进行变换,这样操作不至
于影响后面的矩阵操作。
Translate()每一次操作都把当前所在的位置作为原点。Rotate()每一次操作都是相对于当前原点的(而不是屏幕的中央)。
#include <windows.h> #include <GL/gl.h> #include <gl/glu.h> #include <gl/glut.h> void init(void) { glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_SMOOTH); glClearDepth(1.0f); } void display(void) { glClear( GL_COLOR_BUFFER_BIT ); glShadeModel( GL_SMOOTH ); //现在原点绘制一个红色正方形 glColor3f( 1.0, 0.0, 0.0 ); glRectf( -0.05, -0.05, 0.05, 0.05 ); //glPushMatrix(); //变换--沿x轴移动 glTranslatef( 1.2, 0.0, 0.0 ); // glLoadIdentity(); // glPopMatrix(); //再绘制一个正方形 glColor3f( 0.0, 1.0, 0.0 ); //glRectf( -0.05, -0.05, 0.05, 0.05 );//这时,当我们还想在同样位置绘制时,却发现已经偏移 glFlush(); glFlush(); } void reshape(int w,int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h) glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0); else glOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void mouse(int button,int state,int x,int y)//鼠标函数 { switch(button) { case GLUT_LEFT_BUTTON: //按下左键 if(state==GLUT_DOWN) { } break; case GLUT_MIDDLE_BUTTON: //按下左键 if(state==GLUT_DOWN) { } break; case GLUT_RIGHT_BUTTON: //按下左键 if(state==GLUT_DOWN) { } break; default: break; } } void keyboard(unsigned char key,int x,int y) { switch(key) { case 27: exit(0); break; default: break; } glutPostRedisplay(); } int main(int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(50,50); glutCreateWindow("测试"); init(); glutReshapeFunc(reshape); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }
参考文章:http://blog.sina.com.cn/s/blog_602c65870100e703.html
glPushMatrix()和glPopMatrix()以及glLoadIdentity()的理解相关推荐
- 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (
原文地址如下: http://blog.sina.com.cn/s/blog_70c3d9ed010122bp.html#cmt_56C57036-7F000001-15BB06C27-948-8A0 ...
- 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作
对于glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用虽然网上有很多的帖子,而且都试图解释得很详细,但是效果总是越说越黑,模棱两可的.今天我就简单滴说几句 ...
- glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用
对于glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用虽然网上有很多的帖子,而且都试图解释得很详细,但是效果总是越说越黑,模棱两可的.今天我就简单滴说几句 ...
- Opengl的glPushMatrix和glPopMatrix理解
glPushMatrix()和glPopMatrix()的配对使用可以消除上一次的变换对本次变换的影响,将本次需要执行的缩放.平移等操作放在两者之间.使本次变换是以世界坐标系的原点为参考点进行. 1) ...
- OpenGL中glPushMatrix和glPopMatrix的原理
glPushMatrix.glPopMatrix操作事实上就相当于栈里的入栈和出栈. 很多人不明确的可能是入的是什么,出的又是什么. 比如你当前的坐标系原点在你电脑屏幕的左上方.如今你调用glPush ...
- glPushMatrix 与 glPopMatrix
1.原理讲解 终于明白为什么使用glPushMatrix()和glPopMatrix()的原因了.将本次需要执行的缩放.平移等操作放在glPushMatrix和glPopMatrix之间.glPush ...
- opengl入门记录--glPushMatrix和glPopMatrix原理
glPushMatrix.glPopMatrix操作事实上就相当于栈里的入栈和出栈. 很多人不明确的可能是入的是什么,出的又是什么. 比如你当前的坐标系原点在你电脑屏幕的左上方.如今你调用glPush ...
- 使用glPushMatrix和glPopMatrix的原因
转自 百度百科 glPushMatrix 函数将当前矩阵堆栈推送,通过一个,复制当前矩阵. 这就是后 glPushMatrix 的调用堆栈的顶部矩阵是它下面的相同的. 1. 原理讲解 终于明白为什么使 ...
- OpenGL编程指南9:裁剪平面+glPushMatrix和glPopMatrix矩阵栈顶操作
1.任意裁剪平面 Opengl中,除了视景体的立方体裁剪平面之外,另外还可以额外指定多达6个裁剪平面,对视景体做进一步限制.每一个平面都由平面公式定义:Ax+By+Cz+D = 0.裁剪平面的指定通过 ...
最新文章
- tomcat使用redis存储共享session
- elementui 按钮 表单_前后端分离,文件上传下载(springBoot+vue+elementUI)
- C++多线程实例(_beginThreadex创建多线程)
- php给html传值,PHP传值到不同页面的三种常见方式及php和html之间传值问题_PHP
- vue-cli打包之后的项目在nginx的部署
- java访问同一个变量_java – 从另一个类访问变量
- MoveNet 姿态估计,树莓派上也能跑!
- 宝塔 php5.6 极速安装_cltphp5.6.6版本安装教程-宝塔练手
- mysql 快速初始化_MySQL中的批量初始化数据的对比测试(r12笔记第71天)
- Python循环完成剪刀石头布游戏
- delphi xe 连接mysql_delphixe7支持MYSQL连接的方式
- RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
- em算法 实例 正态分布_4-EM算法原理及利用EM求解GMM参数过程
- vue tinymce安装及使用
- STM32f4日记9之LD3320语音识别(您的私人语音助手MICRO)
- Linux系统之账号和权限管理
- html特殊符号对照表空格,HTML 特殊符号编码对照表(1)
- 【路径规划】基于改进粒子群实现机器人栅格地图路径规划
- 美国计算机音乐专业,美国音乐博士解析
- 计算机基本单位——位、字节、字、字长
热门文章
- android上传文件用哪个布局,每周总结20130821——android控件的尺寸、http文件上传...
- linux守护进程写法_搞懂进程组、会话、控制终端关系,才能明白守护进程如何创建...
- 金字塔测试早已过时!
- 模型 matlab_MBSDM土壤介电模型及Matlab实现
- Mongo查询数据库及表占用磁盘大小
- 21天Jmeter打卡day16参数传递token传递,接口关联
- 旧服务器如何虚拟化,4个步骤教你如何重复利用旧虚拟化主机
- 贪吃蛇javascript代码_源于Jquery开发贪吃蛇游戏——简单思路分析总结
- 《深入理解Java虚拟机》 第4章 虚拟机性能监控与故障处理工具
- linux系统管理考试试题及答案,Linux系统管理一测试题-附答案