Concluí este ótimo tutorial sobre animação de esqueleto:
https://learnopengl.com/Visitor-Articles/2020/Skeletal-Animation
Tudo funciona como esperado, sem problemas!
Aqui estão quais matrizes eu uso para obter animação esquelética:
ModelMatrix: matriz modelo do modelo do jogador, que traz o vértice do espaço do modelo para o espaço do mundo. InverseBindMatrix (matriz de deslocamento no tutorial): traz o vértice do espaço do modelo para o espaço do osso. FinalBoneMatrix: que é a transformação da pose de animação atual, passada para o vertex shader. Combinado com ModelMatrix, fornece a posição do vértice colocado no espaço mundial.
Como próximo passo, desejo posicionar a câmera na posição da articulação da ‘cabeça’.
Achei que seria simplesmente:
vec3 headPosition = ModelMatrix * FinalBoneMatrixes("head")(3); //col 3 is the interpretation half in 4x4 column main matrix.
mas basta posicionar a câmera na barriga do modelo do jogador. O deslocamento mínimo ocorre, mas claramente a câmera não está ligada e não segue a posição da articulação da cabeça.
Tenho todas as informações disponíveis e pensei ter entendido as transformações envolvidas, mas parece que não é o caso.
Alguém poderia descrever a série de transformações necessárias para obter posições articulares/ósseas no espaço mundial?