gluLookAt () лучшее использование, на матрице GL_PROJECTION или на матрице GL_MODELVIEW - PullRequest
8 голосов
/ 03 марта 2012

В документации OpenGL сказано, что вызовы gluLookAt () должны выполняться в матрице GL_MODELVIEW:

http://www.opengl.org/resources/faq/technical/viewing.htm

На самом деле документы ссылаются на статью, в которой говорится, что с помощью gluLookAt () в матрице GL_PROJECTION крайне плохо:

Помогите устранить злоупотребление GL_PROJECTION

С другой стороны, существует множество учебных пособий и примеров, в которых функция gluLookAt ()фактически вызывается на матрице GL_PROJECTION.И в то же время, хотя в упомянутой выше статье говорится, что НЕ использовать ее в матрице GL_PROJECTION, в ней говорится, что в большинстве таких случаев нет видимых проблем с этим.

Мои вопросы:лучший способ использовать gluLookAt () в реальных проектах?Неужели так много, нет, не использовать его в матрице GL_PROJECTION?

Ответы [ 3 ]

8 голосов
/ 03 марта 2012

Функция gluLookAt () предоставляет вам матрицу преобразования, которая преобразует вращение объекта в вашей сцене.Таким образом, это явно преобразование модели, и должен перейти в матрицу GL_MODELVIEW.

Что касается причины, то это становится понятнее, когда вы делаете это самостоятельно в вершинном шейдере:

Хотя положение вершин действительно v.pos * modelview * projection, матрица вида модели необходима без компонента проекции для других вычислений (например, освещения и тумана).Вот почему конвейер фиксированных функций разделяет эти две матрицы.

Таким образом, вы должны придерживаться парадигм, указанных в API, и особенно никогда не доверять множеству плохих opengl "учебников".

2 голосов
/ 03 марта 2012

Я не уверен, что понимаю вопрос.Вы спрашиваете, почему страница говорит вам не делать что-то, что работает только «большую часть времени»?

Это действительно не так сложно понять.«Большинство таких использований», по определению, означает, что существует некоторые такие случаи использования do с проблемами.

Таким образом, вы можете сделать то, что иногда будет работать, изатем перерыв, или вы можете сделать то, что будет всегда работать .

Это не сложный выбор.Более того, правильная работа означает буквальное перемещение одной строки кода на пару строк.

1 голос
/ 03 марта 2012

Мои вопросы: как лучше использовать gluLookAt () в реальных проектах? Неужели так много нет нет, чтобы использовать его в матрице GL_PROJECTION?

Всегда используйте матрицу вида модели для позиционирования точки обзора. Это даже в названии матрицы модель (т.е. размещение геометрии) и просмотр (размещение точки обзора).

Матрица проекции является своего рода объективом «камеры» OpenGL. Вы не двигаете объектив вашей камеры, удерживая корпус камеры на месте, чтобы установить вид, не так ли? Перемещение объектива имеет свои приложения, например, применение эффектов наклона / сдвига.

...