2011-01-27 2 views
0

Я ищу помощь от всех вас, экспертов с Direct3D. Честно говоря, я получаю орехи от очень странного поведения от HLSL. Именно так я определяю матрицы.D3D9 HLSL Matrixed My Brain

Теперь мой вопрос D3DX 9 функций:

D3DXMatrixOrthoOffCenterRH и другие ...

ли они возвращают матрицу, которая используется в таком виде: v»= v * M // Колонка основных

или v '= M * v // Ряд майор ???

Я заметил, что D3DXMatrixTrnaslate находится в главном столбце, и я принимаю то же самое для всех функций.

Теперь функции D3DX Project и Unproject принимают в том же виде, что и предыдущие функции?

У кого-нибудь испытал действительно сумасшествие от умножения матрицы HLSL?

Спасибо.

ответ

0

Я сохраню эту краткую информацию. Функции RH возвращают матрицы столбцов (http://en.wikipedia.org/wiki/Column_vector, для ссылок) и не являются макетом выбора для шейдеров HLSL (или правильно оптимизированной сборки), поскольку они не могут выполнять 3D-преобразование вектора с использованием точечных произведений. Так что используйте макет LH или row-major (V '= M * V, действительно) или, по крайней мере, транспонируйте перед загрузкой в ​​постоянную память шейдера.

Для практического примера возьмите документацию DirectX, найдите D3DXMatrixLookAtLH() и D3DXMatrixLookAtRH(). На этой странице дана макет матрицы, вы можете сравнить макеты и посмотреть, почему dot4'ing каждой строки с вектором X, Y, Z, 1 выполняет аффинное преобразование для X, Y, Z и W соответственно (задано что вы используете матрицу LH/row-major).

Смежные вопросы