Que signifient les composants de gl_TexCoord [0]?

10

Quelles sont les différences entre gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].pet gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z?

Je comprends que ce gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].zsont des coordonnées de pixels?

Mais que gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].psignifient-ils et où dois-je les utiliser?

G-71
la source

Réponses:

15

La différence n'est que sémantique . Tout vecteur GLSL est accessible à l' aide x/y/z/w, r/g/b/aou s/t/p/q. L'utilisation typique est:

  • xyzwpour les coordonnées spatiales
  • rgbapour les couleurs
  • stpqpour les coordonnées de texture
  • si rien de ce qui précède ne s'applique, n'importe quelle saveur peut être utilisée, mais lorsqu'elle peut prêter à confusion, elle var[0]/var[1]/var[2]/var[3]peut être utilisée à la place.

Vous pouvez les mélanger dans des expressions:, foo.x = bar.qou même foo.xy = bar.gb + baz.st;. La principale restriction est que le swizzling ne peut être effectué qu'en utilisant des lettres du même groupe, c'est-à - dire. foo.xyan'est pas valide car il se mélange xyde xyzwet ade rgba.

sam hocevar
la source
Je ne connais pas la notation stpq pour les coordonnées de texture (j'ai toujours vu uv à la place). Je suppose que p serait utilisé pour les textures 3D, mais dans quelle situation q serait-il utilisé? Edit: Peu importe, je viens de trouver ma réponse. Ce serait, avec TextureCubeArrays.
David Gouveia
@DavidGouveia: Non, en fait. Les différentes fonctions de texturation ont des significations différentes. Par exemple, l'accès à a sampler2DShadowavec texturesignifie que la coordonnée p est la valeur de comparaison. L'accès à a sampler2DShadowavec textureProjsignifie que la coordonnée p est la valeur de comparaison et que la coordonnée q est divisée en les trois autres ( avant la comparaison, donc p est en fait comparison * q). Ils n'ont aucune signification intrinsèque ; le sens change en fonction de leur utilisation.
Nicol Bolas
@Nicol Merci d'avoir clarifié cela. En fait, je n'ai utilisé que HLSL auparavant et même là-bas, je n'avais vraiment besoin que des intrinsèques de base tex2D et texCube. Je n'étais pas au courant de la multitude de fonctions de texturation existantes. (Sans lien: est-ce votre vrai nom, ou juste le dragon de MTG?)
David Gouveia