Я работаю над функцией клавиатуры, которая перемещается вверх, вниз, влево, вправо, вперед и назад.Кажется, они работают нормально, но проблема в том, что все еще появляются изображения предыдущих объектов.Это как после того, как изображения распространяются по всему экрану.
Ниже приведены мои коды.
Это в начальной настройке для переменных:
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()
, тогда как прежнее изображение остается.Есть что-нибудь, что я бы упустил?