我已閱讀其使像這樣的立方體(只有關鍵部分)的碼:OpenGL:如何根據以前的轉換結果進行新的轉換?
static GLfloat theta[] = {0.0,0.0,0.0};
static GLint axis = 2;
void display(void)
{
/* display callback, clear frame buffer and z buffer,
rotate cube and draw, swap buffers */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef(theta[0], 1.0, 0.0, 0.0);
glRotatef(theta[1], 0.0, 1.0, 0.0);
glRotatef(theta[2], 0.0, 0.0, 1.0);
colorcube();
glFlush();
glutSwapBuffers();
}
void spinCube()
{
/* Idle callback, spin cube 2 degrees about selected axis */
theta[axis] += 2.0;
if(theta[axis] > 360.0) theta[axis] -= 360.0;
/* display(); */
glutPostRedisplay();
}
void mouse(int btn, int state, int x, int y)
{
/* mouse callback, selects an axis about which to rotate */
if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN) axis = 0;
if(btn==GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) axis = 1;
if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) axis = 2;
}
它保持一個可變theta
的display
功能以外,跟蹤角的變化 。每次它只是重新定義矩陣轉換 矩陣,然後它看起來像新的轉換基於最後一個 。
但是,這僅僅是旋轉的情況。當考慮到翻譯和 翻譯。我覺得很難用類似的方法其中 保持一些變量外跟蹤轉換和每一次重新定義了 矩陣,因爲旋轉和平移是不能互換的
我的一個想法是使用glPushMatrix
和glPopMatrix
。但我不知道 是否這是處理這樣的事情的標準方式。
你能幫忙嗎?謝謝。
嗯,那不是我的問題。但是'glPushMatrix'和'glPopMatrix'起作用。謝謝你們一樣。 – Roun 2011-04-09 07:19:04