Настройка камеры в OpenGL
Помогите настроить камеру в OpenGL Я создал комнату без 4й стены, настроил перемещение по клавишам и поворот по мышке. Но при отдалении от стартовой точки камера вместо поворота начинает двигаться по краю условной сферы с центром в старотовой точке (т.е. я не могу развернуть камеру на 180 и увидеть стартовую точку камера всегда находится к ней "затылком") Подскажите как перемещать центр этой сферы вслед за камерой
//Настройка кмеры
void changeSize(int w, int h) {
float ratio;
if (h == 0)
h = 1;
ratio = w / h;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, w, h);
gluPerspective(40.0f, ratio, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
}
// Функця рендеринга которая включает камеру и комнату
void renderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(cameraX, 0, cameraZ);
glRotatef(beta, 1, 0, 0);
glRotatef(alpha, 0, 1, 0);
gluLookAt(0.0f, 0.0f, 10.0f,
alpha / 2, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f);
room();
glutSwapBuffers();
}
// Определение нажатия кнопки
void mouse_func(int button, int state, int x, int y)
{
old_x = x;
old_y = y;
valid = state == GLUT_DOWN;
}
// Считывание координат мыши для поворота камеры
void motion_func(int x, int y)
{
alpha += old_x - x;
beta += old_y - y;
old_x = x;
old_y = y;
}
// функция обработки нажатия клавиш
void letterKeys(unsigned char key, int x, int y)
{
if (key == 'w') //W, w
cameraZ += 0.1;
if (key == 'a') //A, a
cameraX += 0.1;
if (key == 's') //S, s
cameraZ -= 0.1;
if (key == 'd') //D, d
cameraX -= 0.1;
}
// Функция обработки спец. клавиш
void specialKeys(char key, int x, int y)
{
switch (key)
{
case GLUT_KEY_DOWN:
cameraZ -= 0.1;
break;
case GLUT_KEY_UP:
cameraZ += 0.1;
break;
case GLUT_KEY_LEFT:
cameraX += 0.1;
break;
case GLUT_KEY_RIGHT:
cameraX -= 0.1;
break;
case GLUT_KEY_F5:
exit(0);
break;
}
}
//Инициализация обработки мыши и клавы
void initControls()
{
glutKeyboardFunc(letterKeys);
glutSpecialFunc(specialKeys);
glutMouseFunc(mouse_func);
glutMotionFunc(motion_func);
}