Матрица просмотра модели с компонентами коррекции перспективы - PullRequest
1 голос
/ 11 февраля 2012

Я более подробно изучал реализации матриц и нашел в обратном вычислении матрицы OpenSceneGraph комментарий:

We note that this matrix can be split into three matrices.
mat = rot * trans * corr, where rot is rotation part, trans is translation part, and corr is the correction due to perspective (if any).

Тот факт, что матрица вида модели разбита на поворот матрицы и кажется, что переводРазумно, но корректирующая матрица вызывает у меня любопытство по поводу ...

Матрица corr - это сброс матрицы вида модели к идентификатору, за исключением четвертой строки (с использованием записи OpenGL).Например:

corr = [ 1 0 0 0
         0 1 0 0
         0 0 1 0
         x y z s ]

Обычно вектор c=[x y z s] равен {0 0 0 1}, в действительности он не участвует в преобразованиях вершин.Но, поскольку они задействованы, как используется вектор коррекции?

Каковы конкретные применения вектора коррекции c?Как влияет на преобразованные вершины с такой матрицей (с коррекцией перспективы)?

1 Ответ

2 голосов
/ 11 февраля 2012

Способ работы матриц 4x4 в трехмерной компьютерной графике: после всех ваших преобразований матриц вы делите 4-вектор на четвертую (w) координату, чтобы получить координаты экрана:

[ x ]  -> [ x/w ]
[ y ]     [ y/w ]
[ z ]     [ z/w ]
[ w ]     [w/w=1]

На следующей упрощенной диаграмме видно, что геометрия перспективной проекции требует деления на значение глубины:

.  <- viewpoint: (0,0)
|\
| \
|  \
|   \
|----+---  <- screen depth = 1  ->  projected point on screen: (x/depth, 1)
|     \                             (due to geometry of similar triangles)
|      \
|       \
|--------.  <- general point: (x,depth)

Четвертая строка матрицы определяет координату w результата, так чтоОкончательное деление может выполнять перспективную проекцию.Значения [x/w, y/w] пропорциональны фактическим координатам экрана, и [z/w] обычно используется для буфера глубины (хотя на самом деле это больше похоже на обратную величину глубины).

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