Проекционная матрица - PullRequest
0 голосов
/ 10 марта 2012

Я пытался понять математику, лежащую в основе матрицы проекции, и нашел эту страницу . Матрица с этой страницы:

Matrix

Я обнаружил, что эта матрица похожа на матрицу Xna.

Я понял, как они попали в столбцы m33 и m44 матрицы, но как они попали в m11 и m22? И я не понимал, почему я должен давать соотношение сторон, если я уже задаю угол поля зрения.

Последнее, что я хочу знать: что такое уравнение для перехода из пространства ndc в пространство окна и как они попадают в это уравнение?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2013

Вы можете изменить поле зрения, просто масштабируя получающиеся координаты x и y: вы увеличиваете их, вы получаете меньшее поле зрения (увеличение), вы уменьшаете их, вы получаете большее поле зрения (уменьшить). Перспективная проекция, используемая в программном обеспечении 3D, является прямолинейной, поэтому, если ваше поле зрения достаточно велико, искажение на краях будет серьезным, и вы не сможете иметь угол обзора более 180 °.

Вам необходимо соотношение сторон, потому что координаты клипа в OpenGL и Direct3D идут от -1 до 1. В горизонтальном направлении -1 слева, 1 справа. В вертикальном направлении -1 - низ, 1 - верх. Поэтому, если вы хотите, чтобы ваши квадраты действительно выглядели как квадраты, вам нужно уменьшить координату X до соотношения сторон.

0 голосов
/ 10 марта 2012

FOV было бы достаточно, если бы экраны были круглыми ... но они были прямоугольными, так что просто FOV недостаточно. Значение FOV установлено для высоты экрана, а другое - это FOV, умноженное на отношение ширины экрана к высоте.

m11 может использоваться как способ масштабирования поля зрения в направлении ширины. M22 можно рассматривать как способ масштабирования поля зрения в направлении высоты.

...