Cosa significa "st" nel contesto di OpenGL?


19

Ho visto il termine stvenire fuori alcune volte guardando altri shader di frammenti OpenGL. Tuttavia, non so che cosa rappresenta o a cosa serve. Ecco un esempio:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

Posso capire che questo sta convertendo le coordinate dei pixel in coordinate normalizzate di 0,0 - 1,0 anziché 640 x 480 (ad esempio).

Ho visto anche cose del genere position.st.

Cosa significa?

Risposte:


24

I nomi comuni per i componenti delle coordinate delle trame sono U e V. Tuttavia, poiché la lettera successiva utilizzata (per le trame 3D) è W, provoca un conflitto con i nomi dei componenti di una posizione : X, Y, Z e W .

Per evitare tali conflitti, la convenzione di OpenGL è che i componenti delle coordinate delle trame sono chiamati S, T e R. Quindi, hai chiamate di funzione come questa:

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

Dove si GL_TEXTURE_WRAP_Sriferisce al wrapping nel componente S della coordinata texture.

Sfortunatamente, OpenGL ha scelto S, T e R molto prima che arrivassero le maschere GLSL e swizzle . R, ovviamente, è in conflitto con R , G, B e A. Per evitare tali conflitti, in GLSL, la maschera di swizzle delle coordinate della trama utilizza S, T, P e Q.

In GLSL, puoi scorrere con XYZW, STPQ o RGBA. Significano tutti esattamente la stessa cosa. Quindi position.stè esattamente lo stesso di position.xy. Tuttavia, non ti è permesso combinare maschere swizzle di diversi set. Quindi position.xtnon è permesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.