Последовательность преобразований: Проективное текстурирование (HLSL)

Когда я читал эту статью о проективном текстурировании (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.

6
задан Glorfindel 11 August 2019 в 15:03
поделиться