Поиск крена, рыскания и тангажа камеры с вектором положения, цели и вверх - PullRequest
3 голосов
/ 24 ноября 2011

Я пытаюсь найти углы поворота и наклона камеры, предполагая, что у меня есть положение камеры, ее точка look_at (целевая точка) и вектор вверх. Моя лучшая попытка была с использованием следующего кода

zaxis = lookat-position
xaxis = cross(up, xaxis)
yaxos = cross(zxis, xaxis)

Тогда я нахожу углы между каждой осью и векторами нормалей (1,0,0) (0,1,0) и (0,0,1) и назначить их крену, рысканию и тангажу, но это, похоже, не работает

Есть идеи, что я делаю не так? Заранее спасибо:)

1 Ответ

3 голосов
/ 26 января 2012

Вы не сможете получить угол крена - это может быть что угодно, но вы можете получить угол места и азимут (угол наклона и рыскание).Я нашел какой-то старый код на C, который я переведу в псевдокод, при условии, что ваш вектор не имеет нулевой длины:

Vector3 v = lookat - position;
double length = v.Length();

double elevation = asin(v.y / length);
double azimuth;

if (abs(v.z) < 0.00001)
{
    // Special case
    if (v.x > 0)
    {
        azimuth = pi/2.0;
    }
    else if (v.x < 0)
    {
        azimuth = -pi/2.0;
    }
    else
    {
        azimuth = 0.0;
    }
}
else
{
    azimuth = atan2(v.x, v.z);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...