#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. Я знаю, вот почему это сбивает с толку, людей неправильно учат и неправильно учат, я даже не уверен, правильно ли я их использую.