¿Qué significa "st" en el contexto de OpenGL?

19

He visto el término staparecer varias veces al mirar otros sombreadores de fragmentos OpenGL. Sin embargo, no sé qué significa o para qué se utiliza. Aquí hay un ejemplo:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

Puedo entender que esto está convirtiendo las coordenadas de píxeles en coordenadas normalizadas de 0.0 - 1.0 en lugar de 640 x 480 (por ejemplo).

También he visto cosas como position.st.

Qué significa eso?

Edward Loveall
fuente

Respuestas:

24

Los nombres comunes para los componentes de las coordenadas de textura son U y V. Sin embargo, debido a que la siguiente letra utilizada (para texturas 3D) es W, eso causa un conflicto con los nombres de los componentes de una posición : X, Y, Z y W .

Para evitar tales conflictos, la convención de OpenGL es que los componentes de las coordenadas de textura se denominan S, T y R. Por lo tanto, tiene llamadas de función como esta:

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

Donde se GL_TEXTURE_WRAP_Srefiere a envolver en el componente S de la coordenada de textura.

Desafortunadamente, OpenGL eligió S, T y R mucho antes de que aparecieran GLSL y máscaras de swizzle . R, por supuesto, entra en conflicto con R , G, B y A. Para evitar tales conflictos, en GLSL, la máscara de swizzle de coordenadas de textura usa S, T, P y Q.

En GLSL, puedes mezclar con XYZW, STPQ o RGBA. Todos significan exactamente lo mismo. Entonces position.stes exactamente lo mismo que position.xy. Sin embargo, no está permitido combinar máscaras swizzle de diferentes conjuntos. Entonces position.xtno está permitido.

Nicol Bolas
fuente