我有以下代码段:
float z, yrot = 0, xrot = 0;
float x = 0.0;
float y = 0.0;
void display() /* 2. */
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* 3. */
glMatrixMode(GL_MODELVIEW_MATRIX);
glLoadIdentity();
glMatrixMode (GL_MODELVIEW);
glTranslatef(x, y, -0.5);
glRotatef(rotation, 0, 0, -1);
glColor3f(1.0,1.0,1.0);
glutWireTeapot(0.2);
glutSwapBuffers(); /* 4. */
}
void keyPressed(unsigned char key, int x, int y)
{
float yrotrad = (yrot / (180 * 3.141592654f));
float xrotrad = (xrot / (180 * 3.141592654f));
switch (key)
{
case 'w':
x += (float)(sin(yrotrad));
z -= (float)(cos(yrotrad)) ;
y -= (float)(sin(xrotrad));
glutPostRedisplay();
break;
}
}
int main(int argc, char **argv) /* 5. */
{
glutDisplayFunc(display);
glutKeyboardFunc(keyPressed);
glutMainLoop();
}
按 w 键时应该发生的事情是它应该倾斜相机。但是当我按 w 时,没有任何反应。我做错了什么?
答案 0 :(得分:2)
您的x
和y
参数会影响全局变量:
void keyPressed(unsigned char key, int x, int y)
所以那些增量并没有按照你的想法去做。打开你的编译器警告 - 你可能会看到一些关于失去精确度的信息。
具有讽刺意味的是,它适用于z
,但您似乎并未在渲染代码中的任何位置使用它。
(旁白:您可能还想查看GLFW。它与GLUT非常相似,并且很容易上手,但在各个方面都更好。)