Что означает «st» в контексте OpenGL?

19

Я видел этот термин stнесколько раз, когда смотрел на другие фрагментные шейдеры OpenGL. Тем не менее, я не знаю, что это означает или для чего он используется. Вот пример:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

Я могу понять, что это преобразование координат пикселей в нормализованные координаты 0,0 - 1,0 вместо 640 x 480 (например).

Я также видел такие вещи, как position.st.

Что это означает?

Эдвард Лавалл
источник

Ответы:

24

Общими именами для компонентов текстурных координат являются U и V. Однако, поскольку следующая используемая буква (для 3D-текстур) - W, это вызывает конфликт с именами для компонентов позиции : X, Y, Z и W .

Чтобы избежать таких конфликтов, соглашение OpenGL состоит в том, что компоненты текстурных координат называются S, T и R. Таким образом, у вас есть вызовы функций, подобные этим:

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

Где GL_TEXTURE_WRAP_Sотносится к переносу в компонент S координаты текстуры.

К сожалению, OpenGL выбрал S, T и R задолго до появления маски GLSL и Swizzle . R, конечно, конфликтует с R , G, B и A. Чтобы избежать таких конфликтов, в GLSL в текстовой координатной маске текстуры используются S, T, P и Q.

В GLSL вы можете использовать XYZW, STPQ или RGBA. Все они означают одно и то же. Так position.stточно так же, как position.xy. Тем не менее, вам не разрешено комбинировать маски из разных наборов. Так position.xtчто не допускается.

Николь Болас
источник