Настройка камеры в 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);
        }

Ответы (0 шт):