m3x3 — против

Умножает 3-компонентный вектор на матрицу 3x3.

Синтаксис

m3x3 dst, src0, src1

 

where

  • dst — это регистр назначения. Результат представляет собой вектор из 3 компонентов.
  • src0 — это регистр источника, представляющий 3-компонентный вектор.
  • src1 — это регистр источника, представляющий матрицу 3x3, которая соответствует первому из трех последовательных регистров.

Комментарии

Версии вершинного шейдера 1_1 2_0 2_x 2_sw 3_0 3_sw
m3x3 x x x x x x

 

Маска xyz требуется для регистра назначения. Модификаторы negate и swizzle разрешены для src0, но не для src1.

В следующем фрагменте кода показаны выполненные операции.

dest.x = (src0.x * src1.x) + (src0.y * src1.y) + (src0.z * src1.z);
dest.y = (src0.x * src2.x) + (src0.y * src2.y) + (src0.z * src2.z);
dest.z = (src0.x * src3.x) + (src0.y * src3.y) + (src0.z * src3.z);

Входной вектор находится в register src0. Входная матрица 3x3 находится в регистре src1, а следующие два более высоких регистра, как показано в расширении ниже. Создается трехмерный результат, в результате чего другой элемент целевого регистра (dest.w) остается без изменений.

Эта операция обычно используется для преобразования нормальных векторов во время вычислений освещения. Эта инструкция реализуется как пара точечных продуктов, как показано ниже.

m3x3 r0.xyz, r1, c0  which will be expanded to:

dp3   r0.x, r1, c0
dp3   r0.y, r1, c1
dp3   r0.z, r1, c2

Инструкции по вершинным шейдерам