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()的理解相关推荐

  1. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (

    原文地址如下: http://blog.sina.com.cn/s/blog_70c3d9ed010122bp.html#cmt_56C57036-7F000001-15BB06C27-948-8A0 ...

  2. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作

    对于glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用虽然网上有很多的帖子,而且都试图解释得很详细,但是效果总是越说越黑,模棱两可的.今天我就简单滴说几句 ...

  3. glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用

    对于glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用虽然网上有很多的帖子,而且都试图解释得很详细,但是效果总是越说越黑,模棱两可的.今天我就简单滴说几句 ...

  4. Opengl的glPushMatrix和glPopMatrix理解

    glPushMatrix()和glPopMatrix()的配对使用可以消除上一次的变换对本次变换的影响,将本次需要执行的缩放.平移等操作放在两者之间.使本次变换是以世界坐标系的原点为参考点进行. 1) ...

  5. OpenGL中glPushMatrix和glPopMatrix的原理

    glPushMatrix.glPopMatrix操作事实上就相当于栈里的入栈和出栈. 很多人不明确的可能是入的是什么,出的又是什么. 比如你当前的坐标系原点在你电脑屏幕的左上方.如今你调用glPush ...

  6. glPushMatrix 与 glPopMatrix

    1.原理讲解 终于明白为什么使用glPushMatrix()和glPopMatrix()的原因了.将本次需要执行的缩放.平移等操作放在glPushMatrix和glPopMatrix之间.glPush ...

  7. opengl入门记录--glPushMatrix和glPopMatrix原理

    glPushMatrix.glPopMatrix操作事实上就相当于栈里的入栈和出栈. 很多人不明确的可能是入的是什么,出的又是什么. 比如你当前的坐标系原点在你电脑屏幕的左上方.如今你调用glPush ...

  8. 使用glPushMatrix和glPopMatrix的原因

    转自 百度百科 glPushMatrix 函数将当前矩阵堆栈推送,通过一个,复制当前矩阵. 这就是后 glPushMatrix 的调用堆栈的顶部矩阵是它下面的相同的. 1. 原理讲解 终于明白为什么使 ...

  9. OpenGL编程指南9:裁剪平面+glPushMatrix和glPopMatrix矩阵栈顶操作

    1.任意裁剪平面 Opengl中,除了视景体的立方体裁剪平面之外,另外还可以额外指定多达6个裁剪平面,对视景体做进一步限制.每一个平面都由平面公式定义:Ax+By+Cz+D = 0.裁剪平面的指定通过 ...

最新文章

  1. tomcat使用redis存储共享session
  2. elementui 按钮 表单_前后端分离,文件上传下载(springBoot+vue+elementUI)
  3. C++多线程实例(_beginThreadex创建多线程)
  4. php给html传值,PHP传值到不同页面的三种常见方式及php和html之间传值问题_PHP
  5. vue-cli打包之后的项目在nginx的部署
  6. java访问同一个变量_java – 从另一个类访问变量
  7. MoveNet 姿态估计,树莓派上也能跑!
  8. 宝塔 php5.6 极速安装_cltphp5.6.6版本安装教程-宝塔练手
  9. mysql 快速初始化_MySQL中的批量初始化数据的对比测试(r12笔记第71天)
  10. Python循环完成剪刀石头布游戏
  11. delphi xe 连接mysql_delphixe7支持MYSQL连接的方式
  12. RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
  13. em算法 实例 正态分布_4-EM算法原理及利用EM求解GMM参数过程
  14. vue tinymce安装及使用
  15. STM32f4日记9之LD3320语音识别(您的私人语音助手MICRO)
  16. Linux系统之账号和权限管理
  17. html特殊符号对照表空格,HTML 特殊符号编码对照表(1)
  18. 【路径规划】基于改进粒子群实现机器人栅格地图路径规划
  19. 美国计算机音乐专业,美国音乐博士解析
  20. 计算机基本单位——位、字节、字、字长

热门文章

  1. android上传文件用哪个布局,每周总结20130821——android控件的尺寸、http文件上传...
  2. linux守护进程写法_搞懂进程组、会话、控制终端关系,才能明白守护进程如何创建...
  3. 金字塔测试早已过时!
  4. 模型 matlab_MBSDM土壤介电模型及Matlab实现
  5. Mongo查询数据库及表占用磁盘大小
  6. 21天Jmeter打卡day16参数传递token传递,接口关联
  7. 旧服务器如何虚拟化,4个步骤教你如何重复利用旧虚拟化主机
  8. 贪吃蛇javascript代码_源于Jquery开发贪吃蛇游戏——简单思路分析总结
  9. 《深入理解Java虚拟机》 第4章 虚拟机性能监控与故障处理工具
  10. linux系统管理考试试题及答案,Linux系统管理一测试题-附答案