在OpenGL的上下文中,“ st”是什么意思?


19

st在查看其他OpenGL片段着色器时,我已经见过几次这个术语。但是,我不知道它代表什么或用途。这是一个例子:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

我可以理解,这是将像素坐标转换为0.0-1.0的规范化坐标,而不是640 x 480(例如)。

我也看过类似的东西position.st

这是什么意思?

Answers:


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分量中。

不幸的是,在GLSL和模糊蒙版出现之前,OpenGL就选择了S,T和R。当然,RR,G,B和A冲突。为了避免此类冲突,在GLSL中,纹理坐标旋转遮罩使用S,T,P和Q。

在GLSL中,您可以选择XYZW,STPQ或RGBA。它们的意思完全相同。因此position.st与完全相同position.xy。但是,您不允许组合来自不同组的防眩目面罩。所以position.xt是不允许的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.