簡體   English   中英

OpenGL-轉換立方體

[英]OpenGL - Transforming a cube

我一直在學習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引起的,但我需要它們...

謝謝!

您的矩陣推送次數和彈出次數是否匹配? 根據您提供的代碼,它們不是。 這可能是導致您出現問題的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM