我就想显示 2个图形    glLoadIdentity(); 用这个复位   但是怎么也没用  第一个图形能显示 第二个图形就显示不出来了  真是郁闷 代码如下#include <Windows.h>
#include <gl\glut.h>
#include <gl\GLAUX.H>void display()
{
glClearColor(0.7,0.3,0,0.8);
glClear(GL_COLOR_BUFFER_BIT);
gluLookAt(0,0,10,0,0,0,0,1,0);
glTranslatef(-5,0,0.0);
glRotatef(30,0,0,1);


glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);//画下面
glVertex3f(0,0,0.);
glVertex3f(0,2,0.);
glVertex3f(2,2,0);
glVertex3f(2,0,0);
glEnd();

glLoadIdentity();
glTranslatef(5,0,0.0);
glColor3f(1.0,1.0,1.0); glBegin(GL_POLYGON);
glVertex3f(0,0,0.);
glVertex3f(0,1,0.);
glVertex3f(1,1,0);
glVertex3f(1,0,0);
glEnd(); glFlush();
}
void changeSize(int w, int h)
{
if(h == 0)
    h = 1;
 float ratio = 1.0* w / h;
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glViewport(0, 0, w, h);     
 gluPerspective(45,ratio,1,1000); 
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();   
 gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0,0.0f,1.0f,0.0f);
}void main(int argc, char **argv) {   
glutInit(&argc, argv);      
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);   
glutInitWindowPosition(100,100);     
glutInitWindowSize(500,500);       
glutCreateWindow("新的开始"); 
glutReshapeFunc(changeSize);  
glutDisplayFunc(display);   

glutMainLoop();
}

解决方案 »

  1.   

    我来解答一下哦!第二个图画不出来的原因很简单:就是因为没画在摄像机里面然后给你分析一下:当你加载glLoadIdentity();的时候,整个当前矩阵都清零了。其实你调用glulookat的时候也是在修改当前矩阵!你的调用glLoadIdentity();相当于把glulookat也清了!也就是说你当前的视点是在坐标系(0,0,0)而你要画的东西其实是在平面空间x-y平面,对吧。所以当然看不见了!我再你 glLoadIdentity();的后面填上了 glTranslatef(0,0,-25); 就是把白色小方块向屏幕里面移动了25个单位,这样就能看见了!至于你要实现什么效果我就不知道了!但是毛病找到了你自己就可以修改了吧?另外我来给你提几点建议,额虽然我opengl也就学1年多!但是你可以参考一下!1.2维空间的话直接用两点坐标来画图就行了!我感觉把z的值设成0有点乱2.用什么矩阵的时候就调用glMatrixMode设置成什么矩阵。像你在changeSize最后调用模型视图矩阵。我感觉完全可以放在display里面!当然以上两点都是我的个人习惯!也没准我的不是啥好习惯!仅供参考