首先忘掉glutSolidCube。 GLUT不是OpenGL的一部分,它只是一個小型的便利庫。
您必須瞭解OpenGL只處理點,線和變形。它不保留一個場景,但它僅僅繪製點,線和三角形。每一個都沒有任何拓撲結構的內涵。另外,OpenGL不應該被某些數學庫困惑。函數glTranslate,glRotate,glScale等是純粹的遺產,並且已經從當代OpenGL版本中刪除。
話雖這麼說...
說我有相機在5,5,20,看向0,0,0(因此,在一個角),想把它放到一個立方體,在5, 2,10,然後再在-5,-2,20。我將如何使用這些絕對位置?此外,我將如何使用絕對大小,所以說我想在-5,-2,20的大小爲20,5,10。我如何在OpenGL中做到這一點?
我會隨你已經知道(這芒老的OpenGL 1.1和GLUT)去:
void draw()
{
/* Viewport and projection really should be set in the
drawing handler. They don't belong into the reshape. */
glViewport(...);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
your_projection();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(5, 5, 20, 0, 0, 0, 0, 1, 0);
glPushMatrix();
glTranslatef(5, 2, 10);
draw_cube();
glPopMatrix();
glPushMatrix();
glTranslatef(-5, -2, 20);
draw_cube();
glPopMatrix();
glPushMatrix();
glTranslatef(-5, -2, 20);
glScalef(20, 5, 10);
draw_cube();
glPopMatrix();
}
啊,完美。謝謝。我只是使用glTranslatef,這可能是爲什麼它不起作用,Translate3f看起來是正確的。謝謝! – user1150512 2012-01-15 15:41:46
既沒有glTranslate3f也沒有glRotate3f。 – datenwolf 2012-01-15 18:15:36
糟糕,我的錯誤......也許我對'glColor3f()'或類似的東西感到困惑。 – 0605002 2012-01-15 18:18:27