https://learnopengl.com/Guest-Articles/ ... -Animation
Общий вопрос:
Как прикрепить оружие к «руке персонажа»?
Хотя анимация работает для всех персонажей и анимаций на веб-сайте mixamorg, включая несколько анимаций, мне сложнее всего время пытаюсь взять отдельную модель и прикрепить ее к РУКЕ/Руке персонажа.
Код: Выделить всё
void ArmedAnimatedModel::attachHand(const glm::vec3& playerPosition) {
std::string boneName = "mixamorig_RightHand";
std::string parentBoneName = "mixamorig_RightForeArm";
Bone* bone = GetBoneByName(boneName);
Bone* parentBone = GetBoneByName(parentBoneName);
glm::mat4 childfinalBoneMatrix = GetFinalBoneMatrixByID(bone->GetBoneID());
glm::mat4 parentfinalBoneMatrix = GetFinalBoneMatrixByID(parentBone->GetBoneID());
// Combine the parent and child bone transformations maybe?
glm::mat4 finalBoneMatrix = childfinalBoneMatrix;
glm::mat4 weaponModelMatrix = glm::mat4(1.0f);
weaponModelMatrix = glm::scale(weaponModelMatrix, glm::vec3(0.01f));
weaponModelMatrix = glm::translate(weaponModelMatrix, glm::vec3(X,Y,Z));
LogMatrix(weaponModelMatrix, "final Weapon Model matrix");
weaponModel->GetShader()->use();
LogMatrix(finalBoneMatrix, "finalBoneMatrix");
auto transforms = finalBoneMatrix;
weaponModel->GetShader()->setMat4("finalBoneMatrix", transforms);
GLint uniformLocation = glGetUniformLocation(weaponModel->GetShader()->ID,
"finalBoneMatrix");
glUniformMatrix4fv(uniformLocation, 1, GL_FALSE,&transforms[0][0]);
GLuint modelLoc = glGetUniformLocation(weaponModel->GetShader()->ID, "model");
glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(weaponModelMatrix));
weaponModel->Draw();
}
#version 330 core
layout(location = 0) in vec3 aPos; // Vertex position
layout(location = 1) in vec3 aNormal; // Vertex normal
layout(location = 2) in vec2 aTexCoord; // Texture coordinates
out vec2 TexCoord;
out vec3 Normal;
out vec3 FragPos;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform mat4 finalBoneMatrix;
void main()
{
vec4 totalPosition = vec4(0.0f);
Normal = mat3(transpose(inverse(model))) * aNormal; // Correct normal transformat
ion
TexCoord = aTexCoord;
vec4 localPosition = finalBoneMatrix * vec4(aPos,1.0f);
totalPosition += localPosition;
mat4 viewModel = view * model;
gl_Position = projection * viewModel * totalPosition; // Final position in clip s
pace
}
ЛЮБАЯ помощь приветствуется! Я занимаюсь этим дольше, чем хотелось бы признать!
Я пробовал много альтернативных подходов, включая умножение родительских матриц на дочерние, но мне так и не удалось найти правильное расположение руки в МИРОВОМ пространстве или модели. Пространство.
Я знаю, что кости правильные, потому что они правильные относительно друг друга И анимация работает без сбоев...
Подробнее здесь: https://stackoverflow.com/questions/790 ... acter-hand