OpenGL - 转换立方体

时间:2011-02-26 21:30:58

标签: c opengl

我一直在学习OpenGL,我决定编写一个函数来绘制一个以0,0,0为中心的单位立方体,这样我就可以按照自己的意愿对其进行转换。它由6个面组成。

但是,我只能转换立方体中的一个面:(

以下是代码:

void myUnitCube() {

  glPushMatrix();
  glNormal3f(0.0,0.0, 1.0);       
  glTranslated(0.0,0.0,-0.5);
  glRotated(180, 0.0,1.0,0.0);
  glRectf(-0.5, -0.5, 0.5, 0.5);  

  glPopMatrix();

  glPushMatrix();
  glNormal3f(0.0,0.0, 1.0);       
  glTranslated(0.0,0.0,0.5);
  glRectf(-0.5, -0.5, 0.5, 0.5);  

  glPopMatrix();

  glPushMatrix();
  glNormal3f(0.0,0.0, 1.0);       
  glTranslated(0.5,0.0,0.0);
  glRotated(90, 0.0,1.0,0.0);
  glRectf(-0.5, -0.5, 0.5, 0.5);  

  glPopMatrix();

  glPushMatrix();
  glNormal3f(0.0,1.0, 0.0);       

  glTranslated(-0.5,0.0,0.0);

  glRotated(-90, 0.0,1.0,0.0);
  glRectf(-0.5, -0.5, 0.5, 0.5);  

  glPopMatrix();

  glPushMatrix();
  glNormal3f(0.0,0.0, 0.0);       

  glTranslated(0.0,-0.5,0.0);

  glRotated(90, 1.0,0.0,0.0);
  glRectf(-0.5, -0.5, 0.5, 0.5);  

  glPopMatrix();

  glPushMatrix();
  glNormal3f(0.0,0.0, 0.0);       
  glTranslated(0.0,0.5,0.0);
  glRotated(-90, 1.0,0.0,0.0);
  glRectf(-0.5, -0.5, 0.5, 0.5);   

  glPopMatrix();
 }

如果我之后致电myUnitCube()

  glPushMatrix();
  glTranslated(-4,0,-3);
  glPushMatrix();
  glScaled(8,0.1,6);

结果是只有第一个要绘制的面被缩放。我该如何解决这个问题? 我理解这种情况是因为pop而出现的,但我需要它们......

谢谢!

1 个答案:

答案 0 :(得分:3)

你的矩阵是否推动和弹出匹配?根据您提供的代码,它们不是。这可能是您遇到问题的原因。