在查看其他OpenGL片段着色器时,我已经看到st这个词出现了几次。但是,我不知道它代表什么或用途。这是一个示例:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;


我可以理解,这是将像素坐标转换为0.0-1.0的标准化坐标,而不是640 x 480(例如)。 />
我也看过position.st之类的东西。

这是什么意思?

#1 楼

纹理坐标成分的通用名称是U和V。但是,由于(用于3D纹理的)下一个字母是W,因此与位置成分的名称产生冲突:X,Y,Z和W.

为避免此类冲突,OpenGL的约定是将纹理坐标的组件命名为S,T和R。因此,您可以使用如下函数调用:
glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);


GL_TEXTURE_WRAP_S表示包装在纹理坐标的S分量中。 R当然会与R,G,B和A发生冲突。为避免此类冲突,在GLSL中,纹理坐标旋转遮罩使用S,T,P和Q。

在GLSL中,您可以使用XYZW,STPQ或RGBA进行调整。它们都是完全相同的意思。因此,position.stposition.xy完全相同。但是,您不允许组合来自不同组的防眩目面罩。因此,不允许使用position.xt

评论


$ \ begingroup $
哈哈真是一团糟!
$ \ endgroup $
–迈克尔
20 Dec 9'在3:46

$ \ begingroup $
@Michael:这是什么“烂摊子”?
$ \ endgroup $
–尼科尔·波拉斯(Nicol Bolas)
20 Dec 9'在5:11

$ \ begingroup $
他们命名一切的方式。直到看到你的回答,我才感到困惑。
$ \ endgroup $
–迈克尔
20 Dec 9'在6:08