Разрыв в gluLookAt - PullRequest
       28

Разрыв в gluLookAt

0 голосов
/ 05 декабря 2011

Вот так я вычисляю вектор прямой видимости и вектор вверх.

    ly = sin(inclination);
    lx = cos(inclination)*sin(azimuth);
    lz = cos(inclination)*cos(azimuth);
    uy = sin(inclination + M_PI / 2.0);
    ux = cos(inclination + M_PI / 2.0)*sin(azimuth + M_PI);
    uz = cos(inclination + M_PI / 2.0)*cos(azimuth + M_PI);

Наклон - это угол вектора прямой видимости от плоскости xz, а азимут - угол в плоскости xz..

Это прекрасно работает, пока мой наклон не достигнет 225 градусов.В этот момент вращение происходит по какой-то причине.(Примечание. Под 225 градусами я имею в виду, что она прошла точку перевернутого положения)

Есть идеи, почему это так?

РЕДАКТИРОВАТЬ: Неважно, разобрался.Азимуту не нужно 180 градусов.наклон для вектора вверх.

1 Ответ

1 голос
/ 05 декабря 2011

Я думаю, что вы говорите о предельном угле в 90 градусов (пи). То, что вы получаете, это нормальное поведение. При использовании gluLookAt вы указываете вектор «вверх», используемый для определения поворота камеры. В особом случае, когда вы смотрите вверх ногами, вектор «вверх» параллелен вектору направления глаза, поэтому невозможно определить поворот камеры (эта проблема как бесконечное число решений, так что произвольный выбирается gluLookAt). Возможно, вам следует вычислить этот вектор «вверх», используя ваш наклон и азимут.

...