Was bedeuten die Komponenten von gl_TexCoord [0]?

10

Was sind die Unterschiede zwischen gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].pund gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z?

Ich verstehe, dass das gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].zPixelkoordinaten sind?

Aber was gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].pbedeutet und wo muss ich sie verwenden?

G-71
quelle

Antworten:

15

Der Unterschied ist nur semantisch . Jeder GLSL Vektor kann zugegriffen werden unter Verwendung von x/y/z/w, r/g/b/aoder s/t/p/q. Typische Verwendung ist:

  • xyzwfür Raumkoordinaten
  • rgbafür Farben
  • stpqfür Texturkoordinaten
  • Wenn keines der oben genannten Punkte zutrifft, kann jedes Aroma verwendet werden. Wenn es jedoch verwirrend sein var[0]/var[1]/var[2]/var[3]kann , kann es stattdessen verwendet werden.

Sie können sie in Ausdrücken mischen: foo.x = bar.qoder sogar foo.xy = bar.gb + baz.st;. Die Haupteinschränkung besteht darin, dass das Swizzling nur mit Buchstaben derselben Gruppe durchgeführt werden kann, d. H. foo.xyaist ungültig, weil es xyvon xyzwund anach mischt rgba.

Sam Hocevar
quelle
Ich bin nicht mit der bekannten stpq Notation für Texturkoordinaten (immer gesehen uv statt). Ich vermute, p würde für 3D-Texturen verwendet, aber in welcher Situation würde q verwendet werden? Edit: Egal, ich habe gerade meine Antwort gefunden. Das wäre mit TextureCubeArrays.
David Gouveia
@ DavidGouveia: Nein, eigentlich. Die verschiedenen Texturierungsfunktionen haben unterschiedliche Bedeutungen. Wenn Sie beispielsweise auf a sampler2DShadowmit zugreifen, texturebedeutet dies, dass die p- Koordinate der Vergleichswert ist. Der Zugriff auf a sampler2DShadowmit textureProjbedeutet, dass die p- Koordinate der Vergleichswert ist und die q- Koordinate in die anderen drei geteilt wird ( vor dem Vergleich, also ist p tatsächlich comparison * q). Sie haben keine intrinsische Bedeutung; Die Bedeutung ändert sich je nachdem, wie sie verwendet werden.
Nicol Bolas
@Nicol Danke, dass du das geklärt hast. Ich habe vorher eigentlich nur HLSL verwendet und selbst dort brauchte ich nur die grundlegenden Eigenschaften von tex2D und texCube. Ich war mir der Vielzahl der vorhandenen Texturierungsfunktionen nicht bewusst. (Unabhängig: Ist das Ihr richtiger Name oder nur der Drache von MTG?)
David Gouveia