Apa arti "st" dalam konteks OpenGL?

18

Saya telah melihat istilah stmuncul beberapa kali ketika melihat shader fragmen OpenGL lainnya. Namun, saya tidak tahu apa artinya atau apa yang digunakan untuk itu. Ini sebuah contoh:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

Saya dapat memahami bahwa ini mengubah koordinat piksel menjadi koordinat normal 0,0 - 1,0 bukannya 640 x 480 (misalnya).

Saya juga pernah melihat hal-hal seperti position.st.

Apa artinya?

Edward Loveall
sumber

Jawaban:

23

Nama umum untuk komponen koordinat tekstur adalah U dan V. Namun, karena huruf berikutnya yang digunakan (untuk tekstur 3D) adalah W, yang menyebabkan konflik dengan nama-nama untuk komponen posisi : X, Y, Z, dan W .

Untuk menghindari konflik seperti itu, konvensi OpenGL adalah bahwa komponen koordinat tekstur diberi nama S, T, dan R. Dengan demikian, Anda memiliki pemanggilan fungsi seperti ini:

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

Dimana GL_TEXTURE_WRAP_Smengacu pada pembungkus komponen S dari koordinat tekstur.

Sayangnya, OpenGL memilih S, T, dan R jauh sebelum GLSL dan topeng swizzle muncul. R, tentu saja, konflik dengan R , G, B, dan A. Untuk menghindari konflik seperti itu, dalam GLSL, tekstur swizzle mask koordinat menggunakan S, T, P , dan Q.

Di GLSL, Anda dapat swizzle dengan XYZW, STPQ, atau RGBA. Mereka semua memiliki arti yang persis sama. Jadi position.stpersis sama dengan position.xy. Namun, Anda tidak diperbolehkan menggabungkan topeng swizzle dari set yang berbeda. Jadi position.xttidak diijinkan.

Nicol Bolas
sumber