Que signifie «st» dans le contexte d'OpenGL?


19

J'ai vu le terme strevenir plusieurs fois en regardant d'autres shaders de fragments OpenGL. Cependant, je ne sais pas ce qu'il représente ni à quoi il sert. Voici un exemple:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

Je peux comprendre que cela convertit les coordonnées des pixels en coordonnées normalisées de 0,0 à 1,0 au lieu de 640 x 480 (par exemple).

J'ai aussi vu des choses comme position.st.

Qu'est-ce que ça veut dire?

Réponses:


24

Les noms communs pour les composants des coordonnées de texture sont U et V. Cependant, parce que la prochaine lettre utilisée (pour les textures 3D) est W, cela provoque un conflit avec les noms des composants d'une position : X, Y, Z et W .

Pour éviter de tels conflits, la convention d'OpenGL est que les composants des coordonnées de texture sont nommés S, T et R. Ainsi, vous avez des appels de fonction comme ceci:

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

GL_TEXTURE_WRAP_Sfait référence à l'habillage dans le composant S de la coordonnée de texture.

Malheureusement, OpenGL a choisi S, T et R bien avant l' arrivée des masques GLSL et swizzle . R, bien sûr, entre en conflit avec R , G, B et A. Pour éviter de tels conflits, dans GLSL, le masque de balayage des coordonnées de texture utilise S, T, P et Q.

Dans GLSL, vous pouvez utiliser avec XYZW, STPQ ou RGBA. Ils signifient tous exactement la même chose. C'est position.stexactement la même chose que position.xy. Cependant, vous n'êtes pas autorisé à combiner des masques swizzle de différents ensembles. Ce position.xtn'est donc pas permis.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.