texm3x3tex - ps
Realiza una multiplicación de matriz 3x3 y usa el resultado para realizar una búsqueda de texturas. texm3x3tex debe usarse con dos instrucciones texm3x3pad - ps .
Sintaxis
texm3x3tex dst, src |
---|
where
- dst es el registro de destino.
- src es un registro de origen.
Comentarios
Versiones del sombreador de píxeles | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texm3x3tex | x | x | x |
Esta instrucción se usa como final de tres instrucciones que representan una operación de multiplicación de matriz 3x3, seguida de una búsqueda de texturas. La matriz 3x3 consta de las coordenadas de textura de la tercera fase de textura y las dos fases de textura anteriores. El vector de tres componentes resultante (u,v,w) se usa para muestrear la textura en la fase 3. Se omite cualquier textura asignada a las dos fases de textura anteriores. La multiplicación de matriz 3x3 suele ser útil para orientar un vector normal al espacio tangente correcto para la superficie que se representa.
Esta instrucción debe usarse con la instrucción texm3x3pad. Los registros de textura deben usar la secuencia siguiente.
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
Este es más detallado sobre cómo se logra la multiplicación 3x3.
La primera instrucción texm3x3pad realiza la primera fila de la multiplicación para buscar u'.
u' = TextureCoordinates(stage m)UVW * t(n)RGB
La segunda instrucción texm3x3pad realiza la segunda fila de la multiplicación para buscar v'.
v' = TextureCoordinates(stage m+1)UVW * t(n)RGB
La instrucción texm3x3spec realiza la tercera fila de la multiplicación para buscar w'.
w' = TextureCoordinates(stage m+2)UVW * t(n)RGB
Por último, las muestras de instrucciones texm3x3tex t(m+2) con (u',v',w') y almacenan el resultado en t(m+2).
t(m+2)RGBA = TextureSample(stage m+2)RGBA using (u' , v' , w' ) as coordinates.
Ejemplos
Este es un sombreador de ejemplo con los mapas de textura identificados y las fases de textura identificadas.
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
En este ejemplo se requiere la siguiente configuración de la fase de textura.
- A la fase 0 se le asigna un mapa de texturas con datos normales. Esto se conoce a menudo como un mapa de golpes. Los datos son normales (XYZ) para cada elemento de textura. El conjunto de coordenadas de textura 0 define cómo muestrear este mapa normal.
- El conjunto de coordenadas de textura 1 se asigna a la fila 1 de la matriz 3x3. Se omite cualquier textura asignada a la fase 1.
- El conjunto de coordenadas de textura 2 se asigna a la fila 2 de la matriz 3x3. Se omite cualquier textura asignada a la fase 2.
- El conjunto de coordenadas de textura 3 se asigna a la fila 3 de la matriz 3x3. Una textura de volumen o cubo debe establecerse en la fase 3 para la búsqueda por el vector 3D transformado.
Temas relacionados