texm3x3tex - ps

Выполняет умножение матрицы 3x3 и использует результат для поиска текстуры. texm3x3tex необходимо использовать с двумя инструкциями texm3x3pad - ps .

Синтаксис

texm3x3tex dst, src

 

where

  • dst — это регистр назначения.
  • src — это регистр источника.

Комментарии

Версии шейдера пикселей 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3tex x x x

 

Эта инструкция используется в качестве заключительной из трех инструкций, представляющих операцию умножения матрицы 3x3, за которой следует поиск текстуры. Матрица 3x3 состоит из координат текстуры третьего этапа текстуры и двух предыдущих этапов текстуры. Полученный трехкомпонентный вектор (u,v,w) используется для выборки текстуры на этапе 3. Любая текстура, назначенная двум предыдущим этапам текстуры, игнорируется. Матричное умножение 3x3 обычно полезно для ориентирования нормального вектора на правильное тангенсное пространство для отрисовываемой поверхности.

Эту инструкцию необходимо использовать с инструкцией texm3x3pad. Регистры текстуры должны использовать следующую последовательность.

 
tex t(n)                 // Define tn as a standard 3-vector (tn must
                         //   be defined in some way before it is used)
texm3x3pad t(m),   t(n)  //   where m > n
                         // Perform first row of matrix multiply
texm3x3pad t(m+1), t(n)  // Perform second row of matrix multiply
texm3x3tex t(m+2), t(n)  // Perform third row of matrix multiply to get a
                         //   3-vector with which to sample texture
                         //   associated with texture stage m+2

Ниже приведены более подробные сведения о том, как выполняется умножение 3x3.

Первая инструкция texm3x3pad выполняет первую строку умножения, чтобы найти u'.

u' = TextureCoordinates(stage m)UVW * t(n)RGB

Вторая инструкция texm3x3pad выполняет вторую строку умножения для поиска v'.

v' = TextureCoordinates(stage m+1)UVW * t(n)RGB

Инструкция texm3x3spec выполняет третью строку умножения для поиска w'.

w' = TextureCoordinates(stage m+2)UVW * t(n)RGB

Наконец, инструкция texm3x3tex образцы t(m+2) с (u',v',w') и сохраняет результат в t(m+2).

t(m+2)RGBA = TextureSample(stage m+2)RGBA с использованием (u' , v' , w' ) в качестве координат.

Примеры

Ниже приведен пример шейдера с идентифицированными картами текстур и этапами текстуры.

ps_1_1
tex t0                // Bind texture in stage 0 to register t0
texm3x3pad  t1,  t0   // First row of matrix multiply
texm3x3pad  t2,  t0   // Second row of matrix multiply
texm3x3tex  t3,  t0   // Third row of matrix multiply to get a
                      // 3-vector with which to sample texture at 
mov r0, t3            // stage 3 output result

Для этого примера требуется следующая настройка этапа текстуры.

  • Этапу 0 назначается карта текстур с обычными данными. Это часто называют картой ударов. Данные являются нормальными (XYZ) для каждого текселя. Набор координат текстуры 0 определяет способ выборки этой обычной карты.
  • Набор координат текстуры 1 назначается строке 1 матрицы 3x3. Любая текстура, назначенная этапу 1, игнорируется.
  • Набор координат текстуры 2 назначается строке 2 матрицы 3x3. Любая текстура, назначенная этапу 2, игнорируется.
  • Набор координат текстуры 3 назначается строке 3 матрицы 3x3. Текстура тома или куба должна быть настроена на этап 3 для поиска преобразованным трехмерного вектора.

Инструкции по шейдеру пикселей