Co oznacza „st” w kontekście OpenGL?

19

Widziałem ten termin stkilka razy, gdy patrzyłem na inne shadery fragmentów OpenGL. Nie wiem jednak, co to oznacza ani do czego służy. Oto przykład:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

Rozumiem, że to przekształca współrzędne pikseli w znormalizowane współrzędne 0,0 - 1,0 zamiast 640 x 480 (na przykład).

Widziałem też takie rzeczy position.st.

Co to znaczy?

Edward Loveall
źródło

Odpowiedzi:

24

Wspólne nazwy komponentów współrzędnych tekstury to U i V. Jednak ponieważ następna litera (dla tekstur 3D) to W, powoduje konflikt z nazwami komponentów pozycji : X, Y, Z i biała .

Aby uniknąć takich konfliktów, konwencja OpenGL mówi, że składniki współrzędnych tekstury są nazywane S, T i R. Zatem masz wywołania funkcji takie jak to:

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

Gdzie GL_TEXTURE_WRAP_Sodnosi się do zawijania w składniku S współrzędnej tekstury.

Niestety OpenGL wybrał S, T i R na długo przed pojawieniem się GLSL i masek swizzle . R oczywiście powoduje konflikty z R , G, B i A. Aby uniknąć takich konfliktów, w GLSL maska ​​zamiany współrzędnych tekstury używa S, T, P i Q.

W GLSL możesz zamienić na XYZW, STPQ lub RGBA. Wszystkie oznaczają dokładnie to samo. Więc position.stjest dokładnie taki sam jak position.xy. Nie można jednak łączyć masek swizzle z różnych zestawów. Więc position.xtnie jest dozwolone.

Nicol Bolas
źródło