2016-04-10 11 views
0

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:

enter image description here

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.

Antwort

0

Ich habe es geschafft, es zu lösen. Stellt sich heraus, DO müssen die Knoten lesen, auch für eine einfache Bind Pose ohne Animation. Für jeden zukünftigen Leser, der dieses Problem hat, wird jede Knochen-Matrix = root_node_inverse * -Matrix aus der Knoten-Heirechy-Knochen-Offset-Matrix verkettet.

+0

Haben Sie immer noch den Code für dieses Projekt? Ich struggeling mit ähnlichen Problemen :( – Andrea

+0

@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

Verwandte Themen