Эффективный способ рассчитать вектор роста для gluLookAt, который больше всего направлен вверх по оси y? - PullRequest
3 голосов
/ 07 августа 2010

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

Вектор вверх должен быть перпендикулярен линии визирования. Когда линия визирования не вдоль оси Y, вы можете представить круг вокруг глаза и линию визирования, где может быть вектор вверх. На этом круге будет точка, которая идет вверх по оси Y, чем любая другая точка. Это то, что я хочу, чтобы мой вектор роста был.

Я уверен, что смогу найти решение, но думаю, что люди уже делали это много раз, и я хочу найти наиболее эффективное решение.

Моя камера, по крайней мере, при использовании этой камеры не будет смотреть прямо вниз или вверх по оси Y, поэтому там нет проблем.

Ответы [ 2 ]

16 голосов
/ 07 августа 2010

В большинстве коммерческих игр для создания перпендикуляра используется перекрестный продукт.

  • Нормализуйте вектор своего взгляда.

  • Возьмите перекрестный продукт вашегосмотри вектор и вектор 0,1,0.Это дает вам ваш правильный вектор.

  • Возьмите перекрестное произведение вашего правого вектора и вектора вашего взгляда.Это ваш новый вектор роста, который перпендикулярен вашему исходному вектору взгляда.

3 голосов
/ 07 августа 2010

gluLookAt не требует, чтобы заданный вами вектор повышения был перпендикулярен направлению, которое вы смотрите.Таким образом, вы можете просто использовать 0,1,0.

Если вы действительно, действительно хотите придумать перпендикулярный вектор, посмотрите на справочную страницу для gluLookAt и выполнитечто они делают, чтобы сделать U

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