OpenGL - Преобразование куба - PullRequest
0 голосов
/ 27 февраля 2011

Я изучал 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 s, но они мне нужны ...

Спасибо!

1 Ответ

3 голосов
/ 27 февраля 2011

Ваши матричные толчки и трещины совпадают?Основываясь на коде, который вы дали, они не являются.Это может быть причиной вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...