¿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?

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.