Я недавно начал изучать OpenGL, и, насколько это касается общения с GL и шейдерами, я получил хорошую компетенцию, но я немного неясен в отношении системы координат.В OpenGL, какое влияние оказывает создание проекционной матрицы перспективы на координаты объекта?
Я использую OpenGL ES 2.0, поэтому я должен сам управлять матрицей. Я пришел, чтобы понять, что следующее:
Для того, чтобы наблюдать правильные результаты перемножить матрицы в модели * вид * проекция (что имеет смысл в качестве матричного умножения не является коммутативной).
Модельная матрица представляет собой масштаб, поворот, перевод и т. Д. Примитива рисования. Перемещение примитива в 3D-пространстве включает в себя преобразования, применяемые к этой матрице.
Матрица представления представляет собой «камеру», как многие относятся к ней. Расстояние между объектом и зрителем, а также вращение глаза вокруг объекта происходит от преобразований к этой матрице.
И, наконец, матрица перспективы представляет собой 3D-пространство, в котором находится сцена. Я следую некоторым примерам, которые в основном используют метод перспективы, используя поле зрения и соотношение сторон. Здесь начинается мое замешательство.
Координаты примитива даны как поплавок в интервале + - [0, 1]. Но перспективная матрица представляет собой трехмерное пространство от близкого к z до far-z (которое я видел как 0 и 100 соответственно). Я смущен тем, как координаты примитива входят в это пространство. Очевидно, что мои навыки линейной алгебры не так сильны, как хотелось бы, чтобы они были в этом случае. Может ли кто-нибудь уточнить, как эти точки отображаются в это пространство?
Например, во многих примерах куб должен быть равен + - (.5, .5, .5). Я использую перспективную матрицу около z = 0, far-z = 100 и соотношение сторон всего дисплея, будет ли это означать, что куб всегда равен 0,5 от каждого из этих размеров? Я имею в виду, что если перспективная матрица будет работать от x = -5 до x = 5, то x-координата будет равна .5 (-5) = -2.5?
«* умножьте матрицы как модель * view * projection *" Если это то, что вы наблюдаете, это потому, что ваши матрицы транспонированы. –