Когда я читал эту статью о проективном текстурировании (9.3.2) на nvidia, я наткнулся на этот график:
(источник: nvidia.com )
Меня смутил порядок, в котором написаны преобразования. Это потому, что я научился читать умножение матриц слева направо, а также потому, что я думал, что последовательность преобразований должна идти в таком порядке:
(источник: nvidia.com )
Теперь мои вопросы следующие:
Поскольку умножение матриц не коммутативно, в каком порядке мне следует выполнять умножения?
И если он действительно находится в том же порядке, что и последовательность преобразований нормальных объектов, почему он написан так?
Под тем же порядком последовательности я подразумеваю что-то вроде этого кода hlsl:
float4 worldPosition = mul(input.Position, World);
float4 viewPosition = mul(worldPosition, View);
output.Position = mul(viewPosition, Projection);
Наконец ( и это необязательно, но может быть полезно для других, интересующихся тем же самым), как бы вы написали код HLSL для этого умножения с проективным текстурированием или как бы вы выполняли преобразования, если бы вы передали всю матрицу через XNA.