Вопрос об атрибуте GLSL 2.0 - PullRequest
3 голосов
/ 10 ноября 2010

Что делает оператор [] при обращении к атрибуту vec4?


attribute vec4 a_MatrixWeights;
...
foo(float weight);
...

void main()
{
  foo(a_MatrixWeights[0]);
  foo(a_MatrixWeights[1]);
  foo(a_MatrixWeights[2]);
  foo(a_MatrixWeights[3]);
}

Обращается ли это к отдельным полям vec4 (.x, .y, .z, .w) или это как-то обрабатывает vec4 и массив vec4 и делает что-то еще?

Ответы [ 2 ]

4 голосов
/ 10 ноября 2010

Да, для доступа к отдельным полям.

Синтаксис подписки массива также может применяться к векторам для обеспечения числовой индексации.Так в vec4 поз;pos [2] относится к третьему элементу pos и эквивалентен pos.z [GLSL spec 1.20.8, 5.5 Vector Components]

Также для доступа к столбцам матриц можно использовать подписку на массив:

mat4 m;
vec4 c = m[1]; // access the second column of m
1 голос
/ 10 ноября 2010

Да, это индексирование компонентов x / y / z / w.

...