OpenGL: glRotate: определение компонента угла - PullRequest
0 голосов
/ 10 апреля 2011

Мне нужна помощь с математикой и OpenGL.

Я хочу, чтобы какой-то объект следовал за другим, то есть поворачивал свое лицо к другому объекту каждый раз, когда предыдущий перемещается.Итак, я узнал о glRotate.

Я думал, что получу (x, y, z) первого при каждом его перемещении, а затем отправлю его координаты другой функции, которая должна обновить свойствопоследний.Но как мне найти параметр 'angle' для glRotate на основе как нового, так и старого направления объекта-подписчика?

Любая помощь очень важна.Спасибо за ваше время.

1 Ответ

2 голосов
/ 10 апреля 2011

Предположим, что ваш наблюдатель находится на 0,0,0, а у вас есть старая целевая позиция O и новая целевая позиция N.

Тогда разность углов вокруг оси Y в радианах равна:

float angle = atan2(N.z,N.x) - atan2(O.z,O.x);

Поскольку glRotate принимает градусы, вы хотите преобразовать это в градусы:

angle = (angle * 180.f)/M_PI;

Как это работает?Вы проецируете оба вектора на плоскость XZ.Я просто игнорирую компонент x для этого.Затем вы берете их угол относительно оси X (это делает arctan) и берете разницу.

Редактировать: Исправлено вычисление угла, благодаря ja72 за указание на то, что он был катастрофически нарушен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...