«Расположение атрибутов вершин всегда состоит из 4 компонентов», Означает ли это, что я могу использовать mat2 в качестве атрибута вершины без каких-либо проблем?? (OpenGL)

#opengl #glsl

Вопрос:

Я знаю, что расположение атрибутов вершин всегда является 4-компонентным, но я не совсем уверен, что это относится и к mat2(и другим типам mat2).

Ответ №1:

Это зависит от того, что вы подразумеваете под «без каких-либо проблем».

Да, mat2 является допустимым типом для атрибута вершины. Однако при использовании в качестве атрибутов все типы матриц обрабатываются как массивы столбцов матрицы. И массивы обрабатываются таким образом, что каждый элемент массива является отдельным атрибутом.

Таким образом, a mat2 считается двумя атрибутами, а не одним (в частности, первыми двумя компонентами каждого атрибута). Если это не проблема для вас, то вы можете это сделать.

Если вы хотите поместить a mat2 в один атрибут, вам придется сделать это вручную:

 layout(location = X) in vec4 matrix_attrib;
...
void main()
{
  mat4 mAttrib(matrix_attrib.xy, matrix_attrib.zw);
}
 

Комментарии:

1. Под этим я подразумеваю, что вам не нужно будет выполнять дополнительную работу с процессором, чтобы установить каждую строку матрицы 4×4 отдельно.

2. спасибо за ответ, именно то, что мне было нужно.

3. эта штука с столбцами строк сбивает с толку, некоторые люди называют ее перевернутой.

4. @NameThatDisplays: Это не сбивает с толку; люди просто объясняют это неправильно .

5. Я знаю, вот почему это сбивает с толку, людей неправильно учат и неправильно учат, я даже не уверен, правильно ли я их использую.