O que significa "st" no contexto do OpenGL?

18

Eu já vi o termo stsurgir algumas vezes ao olhar para outros shaders de fragmento OpenGL. No entanto, não sei o que significa ou para que é usado. Aqui está um exemplo:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

Eu posso entender que isso está convertendo as coordenadas de pixel em coordenadas normalizadas de 0,0 a 1,0 em vez de 640 x 480 (por exemplo).

Eu também já vi coisas assim position.st.

O que isso significa?

Edward Loveall
fonte

Respostas:

23

Os nomes comuns para os componentes das coordenadas de textura são U e V. No entanto, como a próxima letra usada (para texturas 3D) é W, isso causa um conflito com os nomes dos componentes de uma posição : X, Y, Z e W .

Para evitar esses conflitos, a convenção do OpenGL é que os componentes das coordenadas de textura sejam denominados S, T e R. Assim, você tem chamadas de função como estas:

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

Onde GL_TEXTURE_WRAP_Srefere-se à quebra no componente S da coordenada de textura.

Infelizmente, o OpenGL escolheu S, T e R muito antes de aparecerem as máscaras GLSL e swizzle . R, é claro, entra em conflito com R , G, B e A. Para evitar tais conflitos, no GLSL, a máscara de swizzle de coordenadas de textura usa S, T, P e Q.

No GLSL, você pode misturar com XYZW, STPQ ou RGBA. Todos eles significam exatamente a mesma coisa. Então position.sté exatamente o mesmo que position.xy. No entanto, você não pode combinar máscaras swizzle de diferentes conjuntos. Então position.xtnão é permitido.

Nicol Bolas
fonte