gl_TexCoord [0]的组件是什么意思?


10

gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].p和之间有什么区别gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z

我了解gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z像素坐标吗?

但是什么gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].p意思,我必须在哪里使用它们?

Answers:


15

区别只是语义上的。任何GLSL载体可以使用被访问x/y/z/wr/g/b/as/t/p/q。典型用途是:

  • xyzw用于空间坐标
  • rgba用于颜色
  • stpq用于纹理坐标
  • 如果上述方法均不适用,则可以使用任何口味,但当可能造成混淆时,var[0]/var[1]/var[2]/var[3]可以使用。

您可以将它们混合在表达式中:foo.x = bar.q或什至foo.xy = bar.gb + baz.st;。主要的限制是混写只能使用同一组的字母来完成,即。 foo.xya之所以无效,是因为它xy来自xyzwa来自rgba


我对纹理坐标的stpq表示法不熟悉(总是看到uv)。我猜p将用于3D纹理,但是在什么情况下会使用q?编辑:没关系,我刚刚找到了答案。那就是使用TextureCubeArrays。
David Gouveia

@DavidGouveia:不,实际上。不同的纹理化功能具有不同的含义。例如,访问sampler2DShadowwith texture表示p坐标是比较值。访问sampler2DShadowwith textureProj表示p坐标是比较值,而q坐标又分为其他三个(比较之前,因此p实际上是comparison * q)。它们没有任何内在的含义。含义因使用方式而异。
Nicol Bolas

@Nicol感谢您清理。实际上,我以前只使用过HLSL,甚至直到那时才真正需要基本的tex2D和texCube内部函数。我没有意识到许多现有的纹理处理功能。(无关:这是您的真实姓名,还是MTG的巨龙?)
David Gouveia
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.