我正在处理向上,向下,向左,向右,向前和向后移动的键盘功能。它们似乎工作正常,但问题是之前的对象图像仍然出现。就像在图像遍布整个屏幕后一样。
以下是我的代码。
这是变量的初始设置:
double x1 = 0.0f;
double yi = 1.0f;
double z1 = 3.0f;
double lx1 = 0.0f;
double ly1 = 0.0f;
double lz1 = -1.0f;
double angle = 0.0f;
键盘功能
switch (key) {
case 033:
glutLeaveMainLoop();
break;
case 'd':
angle -= 0.01f;
lx1 = sin(angle);
lz1 = -cos(angle);
//setCamera();
break;
case 'a':
angle += 0.01f;
lx1 = sin(angle);
lz1 = -cos(angle);
//setCamera();
break;
case 's':
angle += 0.01f;
ly1 = angle;
//setCamera();
break;
case 'w':
angle -= 0.01f;
ly1 = angle;
//setCamera();
break;
case '2' :
x1= (-1) * lx1 * 0.1 + x1;
z1 = (-1) * lz1 * 0.1 + z1;
//setCamera();
break;
case '1':
x1 = (1) * lx1 * 0.1 + x1;
z1 = (1) * lz1 * 0.1 + z1;
//setCamera();
break;
}
glutPostRedisplay(); }
和
void setCamera() {
glLoadIdentity();
gluLookAt(x1, yi, z1, x1 + lx1, yi + ly1, z1 + lz1, 0, 1, 0);
}
setCamera()
函数中还有display()
个函数。我对此的看法是每次输入输入时,插入gluLookAt()
函数的变量都会更新,并会按glutPostRedisplay()
绘制新图像,而前图像仍然存在。有什么我忽略的吗?