Один из запутанных аспектов OpenGL для начинающих - это различие между тем, что происходит в матрице проекции, и тем, что происходит в матрице вида модели (и зачем вам они оба нужны?)
Матрица проекцииотвечает за преобразование координат ваших вершин в точки в двухмерной системе координат (он разбивает мир на ваш виртуальный фильм - область просмотра).Матрица проекции определяет только поведение вашей камеры (например: это должен быть широкоугольный объектив, или телеобъектив, или полностью ортогональный, как архитектурные косые рисунки?).
Матрица вида модели нас другой стороны, отвечает за указание, куда в трехмерном пространстве попадают ваши вершины.Так, например, чтобы указать, где находится рука персонажа по отношению к телу персонажа, или где этот персонаж по отношению к миру, вы захотите изменить матрицу вида модели.Важно, в частности, отметить, что изменения в положении и ориентации камеры относятся к матрице вида модели (это часть «вида»)
Причина, по которой она путается, заключается в том, что наВ конце дня вершины, которые вы даете OpenGL, умножаются на матрицу вида модели, а затем на матрицу проекции.То есть, учитывая матрицу вида модели M, матрицу проекции P и вершину v, конечная координата вершины определяется как P M v.Это означает, что некоторые преобразования работают независимо от того, какую матрицу вы используете.Вы должны быть осторожны с этим - когда вы перейдете к более изощренным методам OpenGL, вы столкнетесь с ситуациями, в которых использование правильных матриц будет иметь значение.
Однако пока вы не дойдете до этой точки, позвольте мне дать вамхорошее эмпирическое правило.Пока вы не привыкнете к различию между двумя матрицами, используйте только glOrtho
или glFrustum
на матрицах проекций (gluPerspective
и их друзья тоже в порядке).Все остальные вызовы (glTranslate
, glScale
, glRotate
и т. Д.) Относятся к классу вещей, которые вы должны делать с матрицей просмотра модели.