В настоящее время я работаю над анимацией модели с использованием веса суставов и вершин. Мой вопрос не зависит от программы, а основан на GLSL. В мой шейдер загружена следующая информация
uniform mat4 projection,camera,model;
in vec3 vertex;
struct Joint
{
mat4 invBind;
mat4 global;
};
uniform Joint transforms[16];
in ivec4 jointIndices;
in vec4 weights;
Здесь
Соединение в структуре, которая используется для преобразования вершины. Имеет 2 типа информации
invBind: - эта матрица является инверсией локального преобразования связывания соединения в глобальном / модельном пространстве, которое используется для преобразования модели из пространства модели в локальное пространство соединения
global: - эта матрица используется для преобразования вершины из локального пространства соединения в его окончательное глобальное / модельное [или мировое] пространство
глобальный = parent_global_joint_transform * joint_local_bind_transform.
Я загрузил свою модель из файла .dae блендера, и поэтому "joint_local_bind_transform" транспонирован и затем использовал
в ivec4 jointIndices: - список всех возможных суставов, которые влияют на эту вершину
в весах vec4: - вес, связанный с соответствующим суставом, воздействующим на эту вершину
У меня есть массив таких суставов размером 16, потому что в моей модели столько суставов
Итак, со всей этой информацией, как мы вычисляем gl_Position ?. Нужно ли загружать больше информации в виде униформ или атрибутов вершин? Извините за мой нубистский вопрос, но многие уроки не дают прямого ответа.
Было бы неплохо ответить на простой код вершинного шейдера. Спасибо