Was bedeutet "st" im Kontext von OpenGL?

18

Ich habe den Begriff steinige Male gesehen, als ich mir andere OpenGL-Fragment-Shader ansah. Ich weiß jedoch nicht, wofür es steht oder wofür es verwendet wird. Hier ist ein Beispiel:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

Ich kann verstehen, dass dies die Pixelkoordinaten in normalisierte Koordinaten von 0,0 - 1,0 anstelle von 640 x 480 (zum Beispiel) umwandelt.

Ich habe auch Dinge wie gesehen position.st.

Was bedeutet es?

Edward Loveall
quelle

Antworten:

23

Die gebräuchlichen Namen für die Komponenten der Texturkoordinaten sind U und V. Da jedoch der nächste verwendete Buchstabe (für 3D-Texturen) W ist, entsteht ein Konflikt mit den Namen für die Komponenten einer Position : X, Y, Z und W .

Um solche Konflikte zu vermeiden, lautet die OpenGL-Konvention, dass die Komponenten der Texturkoordinaten S, T und R heißen. Sie haben also Funktionsaufrufe wie diesen:

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

Wobei GL_TEXTURE_WRAP_Ssich auf das Einschließen der S-Komponente der Texturkoordinate bezieht.

Leider wählte OpenGL S, T und R lange bevor GLSL- und Swizzle-Masken auftauchten . R steht natürlich in Konflikt mit R , G, B und A. Um solche Konflikte zu vermeiden, verwendet die Texturkoordinaten-Swizzle-Maske in GLSL S, T, P und Q.

In GLSL können Sie mit XYZW, STPQ oder RGBA arbeiten. Sie bedeuten alle genau dasselbe. So position.stist genau das gleiche wie position.xy. Es ist jedoch nicht erlaubt, Swizzle-Masken aus verschiedenen Sets zu kombinieren. Ist position.xtalso nicht erlaubt.

Nicol Bolas
quelle