Ich habe versucht, meine Skinned Collada Mesh mit Assimp für die letzten paar Tage zu laden, aber habe eine extrem harte Zeit. Momentan versuche ich nur, es in seiner normalen "Pose" ohne irgendwelche Transformationen oder Animationen zu rendern, aber das Mesh kommt sehr deformiert. Ich denke, das Problem liegt in meinen Knochen, nicht in meinen Gewichten, also poste ich nur den Knochenabschnitt.Assimp berechnende Knochen
Hier ist mein Knochen Ladecode:
// this is done for every bone in a for loop:
Bone new_bone;
new_bone.name = std::string(bone->mName.data);
aiMatrix4x4 b_matrix = bone->mOffsetMatrix;
aiMatrix4x4 g_inv = scene->mRootNode->mTransformation;
g_inv.Inverse(); // according to a tutorial, you have to multiply by inverse root
b_matrix = b_matrix * g_inv;
memcpy(new_bone.matrix, &b_matrix, sizeof(float) * 16);
Bones.push_back(new_bone);
Dann mit mir dies einfach mit
glUniformMatrix4fv(MatrixArray, bone_count, GL_FALSE, &MATRIX_BUFFER[0][0][0]);
meine Shader senden und in dem Vertex-Shader anwenden:
mat4 Bone = V_MatrixArray[int(Indicies[0])] * Weights[0];
Bone += V_MatrixArray[int(Indicies[1])] * Weights[1];
Bone += V_MatrixArray[int(Indicies[2])] * Weights[2];
Bone += V_MatrixArray[int(Indicies[3])] * Weights[3];
vec4 v = Bone * vec4(Vertex, 1);
gl_Position = MVP * vec4(v.xyz, 1);
Dieser Code funktioniert meistens, aber mein Netz ist sehr deformiert .... Es sieht so aus:
Nach dem Reserach ive bisher getan:
Ich brauche nicht meine Matrizen transponieren, da assimp verwendet OpenGL Spaltenhaupt
Ich brauche nicht das lesen Knoten der Szene noch seit sie sind für Animation
Bitte korrigieren Sie mich, wenn ich mich in Bezug auf diese letzten 2 Dinge irre.
Haben Sie immer noch den Code für dieses Projekt? Ich struggeling mit ähnlichen Problemen :( – Andrea
@Andrea yup Ich habe es immer noch :), ist es hier: https://github.com/Jas03x/GL_Engine/blob/master/src/ColladaLoader.cpp, https: // github .com/Jas03x/GL_Engine/blob/master/src/Animation.h, https://github.com/Jas03x/GL_Engine/blob/master/src/Bone.h. Leider habe ich meinen Shader nicht, weil ich ihn leider gelöscht habe. Es ist nicht perfekt, aber es funktioniert. Lass es mich wissen, wenn du Fragen hast :) – Jas