2015-11-19 7 views
1

У меня есть куб в открытом GL. У меня есть куб, вращающийся путем умножения на матрицу вращения. У меня также есть камера, вращающаяся вокруг куба по оси x, используя gluLookAt, как вы можете видеть ниже.openGL - Вращение выше и ниже объекта с использованием gluLookAt

case 'j': 
     eyeX = 10*cos(angle); 
     eyeZ = 10*sin(angle); 
     centerX = -cos(angle); 
     centerZ = -sin(angle); 
     angle -= 0.1; 
     break; 
    case'l': 
     eyeX = 10*cos(angle); 
     eyeZ = 10*sin(angle); 
     centerX = -cos(angle); 
     centerZ = -sin(angle); 
     angle += 0.1; 
     break; 

где

gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, 0.0, 1.0, 0.0); 

То, что я борюсь с становится камера вращаться выше и ниже куба кружит его на оси у.

ответ

0

Для того, чтобы кулачок орбитального объекта

  • вычитать мир позы объекта. от кулачкового мира поз,

    cam_pos_os = cam_pos_ws -. object_pos_ws

  • вращать вектор, указывающий на cam_pos_os как вы делаете это в мировом пространстве в вашем коде

  • добавить мира поз объекта. снова к кулачку поз. в пространстве объекта,

    cam_pos_ws = cam_pos_os + object_pos_ws

+0

Спасибо. Я полностью понимаю, что вы имеете в виду, что я просто испытываю трудности с пониманием с точки зрения openGL и C++. Вы еще раз рекомендуете glTranslate glRotate и glTranslate? Как мне получить мировое положение и положение камеры? –

+0

Cam pos в мировых коордах - это то, что вы вводите как eyeX, Y, Z в gluLookAt. Вы можете вращать и переводить любым способом, который вы хотите (правильность указана); но я могу порекомендовать вам пропустить устаревшее вещество «glTranform/Rotate/Scale» и перейти на современный шейдерный/буферный/унифицированный GL и использовать [glm] (http://glm.g-truc.net/0.9.5/ index.html) для оставшейся процессорной алгебры. –