[Gelöst] Fehler beim laden von meheren Meshes
Verfasst: 20.11.2010, 12:09
Hallo an alle,
ich wollte mein Loader jetzt auf mehere Meshes umstellen, das Ansicht klappt soweit an sich, aber das Model wird völlig falsch dargestellt. Eine Fehlermedlung kommt nicht und alles wird auch ausgelesen. Um zu gucken, ob der Fehler bei mir liegt habe ich das Model mit den AssimpViewer geladen, und da wurde es richtig angezeigt.
Hier ein Bild was ich meine:
http://img257.imageshack.us/i/autoy.png/
Laden tu ich das ganze so:
Ich seh jetzt nichts, was ich da falsch mache, müsste doch alles richtig sein?
Mfg Altair
EDIT:
Ich hab rausgefunden, dass es was mit der Matrix zu tun haben muss, wenn ich nämlich die Matrizen alle auf die Einheitsmatrix setze, wird die Form des Autos zwar richtig angezeigt, aber die Räder sind z.B. auch auf den Ursprung... Mach ich bei den Code da oben irgentwas mit den Matrizen falsch?
EDIT2:
Man musste die Matrizen noch einmal Transposieren (Sag man das so?), aber jetzt ist alles am richtigen Platz und so wie es sein sollte
ich wollte mein Loader jetzt auf mehere Meshes umstellen, das Ansicht klappt soweit an sich, aber das Model wird völlig falsch dargestellt. Eine Fehlermedlung kommt nicht und alles wird auch ausgelesen. Um zu gucken, ob der Fehler bei mir liegt habe ich das Model mit den AssimpViewer geladen, und da wurde es richtig angezeigt.
Hier ein Bild was ich meine:
http://img257.imageshack.us/i/autoy.png/
Laden tu ich das ganze so:
Code: Alles auswählen
ModelData.NumMeshes = 0;
DP::Math::CMatrix4x4 WorldMatrix; // Weltmatrix
SModel Model; // Temponäres Modeldaten
aiMesh** ppMesh = pScene->mMeshes;
aiMaterial** ppMaterial = pScene->mMaterials;
aiNode* pSceneroot = pScene->mRootNode;
aiNode** ppChildren = pSceneroot->mChildren;
aiNode* pChild = NULL;
unsigned int ModelID = 0;
unsigned int MaterialID = 0;
unsigned int I = 0;
bool RootNode = true;
int b = 0;
do
{
if(RootNode)
{
pChild = pSceneroot;
RootNode = false;
}
else
{
pChild = ppChildren[I];
I++;
}
if(!(pChild->mNumMeshes > 0))
continue;
// Überträgti die Werte der Matrix in die andere Matrix
AssimpMatrixToDPMatrix(&pChild->mTransformation, &WorldMatrix);
for(unsigned int i = 0; i < pChild->mNumMeshes; i++)
{
Model.WorldMatrix = WorldMatrix;
ModelID = pChild->mMeshes[i];unsigned int NumVertex = ppMesh[ModelID]->mNumVertices;
ModelData.NumVertices.push_back(NumVertex);
Model.Vertices = new SVertex[NumVertex];
for(unsigned int j = 0; j < NumVertex; j++)
{
Model.Vertices[j].Pos.x = ppMesh[ModelID]->mVertices[j].x;
Model.Vertices[j].Pos.y = ppMesh[ModelID]->mVertices[j].y;
Model.Vertices[j].Pos.z = ppMesh[ModelID]->mVertices[j].z;
}
// Normale, Texturkoordinaten und Materialien auslesen
}
} while(I < pSceneroot->mNumChildren);
Mfg Altair
EDIT:
Ich hab rausgefunden, dass es was mit der Matrix zu tun haben muss, wenn ich nämlich die Matrizen alle auf die Einheitsmatrix setze, wird die Form des Autos zwar richtig angezeigt, aber die Räder sind z.B. auch auf den Ursprung... Mach ich bei den Code da oben irgentwas mit den Matrizen falsch?
EDIT2:
Man musste die Matrizen noch einmal Transposieren (Sag man das so?), aber jetzt ist alles am richtigen Platz und so wie es sein sollte