O que significam os componentes de gl_TexCoord [0]?

10

Quais são as diferenças entre gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].pe gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z?

Eu entendo que gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].zsão coordenadas de pixel?

Mas o que gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].psignifica e onde devo usá-los?

G-71
fonte

Respostas:

15

A diferença é apenas semântica . Qualquer vetor GLSL pode ser acessado usando x/y/z/w, r/g/b/aou s/t/p/q. O uso típico é:

  • xyzwpara coordenadas espaciais
  • rgbapara cores
  • stpqpara coordenadas de textura
  • se nenhuma das opções acima se aplica, qualquer sabor pode ser usado, mas, quando confuso, var[0]/var[1]/var[2]/var[3]pode ser usado.

Você pode misturá-los em expressões:, foo.x = bar.qou mesmo foo.xy = bar.gb + baz.st;. A principal restrição é que o swizzling só pode ser feito usando letras do mesmo grupo, ou seja. foo.xyaé inválido porque combina xyde xyzwe apara rgba.

sam hocevar
fonte
Eu não estou familiarizado com a notação stpq para coordenadas de textura (sempre vi uv ). Eu estou supondo que p seria usado para texturas 3D, mas em que situação q seria usado? Edit: Nevermind Acabei de encontrar minha resposta. Isso seria com TextureCubeArrays.
David Gouveia
@DavidGouveia: Não, na verdade. As diferentes funções de texturização têm significados diferentes. Por exemplo, acessar a sampler2DShadowcom texturesignifica que a coordenada p é o valor de comparação. Acessar a sampler2DShadowcom textureProjsignifica que a coordenada p é o valor de comparação e a coordenada q é dividida nas outras três ( antes da comparação, portanto, na verdade , pcomparison * q ). Eles não têm nenhum significado intrínseco ; o significado muda dependendo de como eles são usados.
Nicol Bolas
@ Nicol Obrigado por esclarecer isso. Na verdade, eu só usei o HLSL antes e até mesmo só precisei dos intrínsecos básicos do tex2D e texCube. Eu não sabia da multiplicidade de funções de texturização existentes. (Independente: Esse é o seu nome real, ou apenas o dragão de MTG?)
David Gouveia