码迷,mamicode.com
首页 > 编程语言 > 详细

OpenGL+MFC对glMatrixMode(),glLoadIdentity()的理解

时间:2015-08-10 16:17:39      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:opengl   opengl+mfc   单文档   图形   

刚学OpenGL,我试着用MFC把我 做的OpenGL程序整理成一个带有菜单单文档的形式,点击不同的菜单会弹出不同的图形

下面我把我程序中出现的小问题说一下

/*绘制三维球、棱锥、棱柱*/
void CXXXView::wireQuadSurfs()
{
glMatrixMode(GL_PROJECTION);
glOrtho(-2.0, 2.0, -2.0, 2.0, 0.0, 5.0);
gluLookAt(2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
glMatrixMode(GL_MODELVIEW);


glColor3f(0.0, 0.0, 1.0);
glPushMatrix();
glTranslatef(1.0, 1.0, 0.0);
glutWireSphere(0.75, 8, 6);
glPopMatrix();


glPushMatrix();
glTranslated(1.0, -0.5, 0.5);
glutWireCone(0.7, 2.0, 7, 6);
glPopMatrix();


GLUquadricObj *cylinder;
glPushMatrix();
glTranslatef(0.0, 1.2, 0.8);
cylinder = gluNewQuadric();
gluQuadricDrawStyle(cylinder, GLU_LINE);
gluCylinder(cylinder, 0.6, 0.6, 0.5, 6, 4);
glPopMatrix();

glFlush();
}

这是我的部分代码,主要是画球·棱锥· 棱柱的。

运行后:

技术分享

点击图中菜单选项

出现结果:

技术分享

在弹出菜单,重复上述步骤:

技术分享

技术分享

可以发现每次运行结果都不一样,经过我的实验得出是因为每次运行时

glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);

这两个函数都被执行一次,

这里说一下glMatrixMode(mode)函数参数的作用

mode 指定哪一个矩阵堆栈是下一个矩阵操作的目标,可选值: GL_MODELVIEW、GL_PROJECTION、GL_TEXTURE.
说明
glMatrixMode设置当前矩阵模式:
GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.
GL_PROJECTION,对投影矩阵应用随后的矩阵操作.
GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.
glMatrixMode每次执行过之后都没对模型进行单一化处理,所以会产生上述问题,解决这个问题的方法就是让glMatrixMode函数与glLoadIdentity()一同使用

glLoadIdentity():将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作

在glLoadIdentity()之后我们为场景设置了透视图。glMatrixMode(GL_MODELVIEW)设置当前矩阵为模型视图矩阵,模型视图矩阵储存了有关物体的信息。加上这个函数之后就不会产生那种情况了。











版权声明:本文为博主原创文章,未经博主允许不得转载。

OpenGL+MFC对glMatrixMode(),glLoadIdentity()的理解

标签:opengl   opengl+mfc   单文档   图形   

原文地址:http://blog.csdn.net/tan_handsome/article/details/47398697

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!