YAAQ - Yet another assimp question
Verfasst: 15.03.2015, 22:50
Hallo ASSIMPler!
Ich habe mal wieder ne Frage zu Assimp.
Mein letztes Problem (Alter Compiler + Seltsame Preprozessor-Effekte) habe ich lösen können. Zum Teil benutze ich nun die Binaries bzw. benutze auf anderen Rechnern nun einen halbwegs aktuellen Compiler.
Zur Zeit spiele ich mit IrrEdit/CopperCube 5 rum und habe folgende Probleme/Effekte:
A) Erstes Problem: Assimp Library (precompiled binary) lädt "irr"-Szene nicht, Assimp-Viewer schon:
Ich habe eine einfache Szene genbaut, welche welche um Grunde nur 6 Meshes (Cubes) enhält. Nun exportiere ich das ganze aus dem Irrlicht-Editor mit als Irrlicht-Szene.
Das Ergebnis ist ein Haupt-File (XML: *.irr), welches im Grunde auf die 6 Meshes verweist, welche in einem Unterverzeichnis ebenfalls als XML-Files (*.irrmesh) abgelegt sind.
Versuche ich das ganze mit meinem eigenen Tool zu laden, welches den Assimp-Importer benutzt, bekomme ich eine Szene geladen, welche "HasMeshes() == false" zurückgibt.
Lade ich die selbe(!) Datei mit dem Assimp-Viewer, läd er das ganze Konstrukt und ich sehe wieder meine Klötzchen.
B) Hilflösung zu A): Zusätzlicher Umweg über OBJ-Export im Assimp-Viewer:
Ich kann nun, wenn ich das Ganze im Assimp-Viewer sehe, als OBJ exportieren. DANACH kann ich das OBJ mit meinem eigenen, Assimp-Lib basierten Tool nun auch lesen und in meine Engine laden.
Ich muss aber immer den manuellen Konvertierungsschritt gehen, was ziemlich nervt, zumal es 2x über Assimp geht, wobei ja einmal reichen sollte.
Hier nochmal die Pipeline: 1) Coppercube/IrrEdit Szene -> 2) export als *.IRR-Szene -> 3) laden im Assimp Viewer -> 4) export aus Assimp-Viewer als *.OBJ -> 5) laden im eigenen Assimp-basierten Tool -> 6) konvertierung ins eigene Format -> 7) laden in die eigene Engine
Nun meine erste Frage/Problem:
Ich würde mir gerne Schritt 3 und 4 sparen, zumal Schritt 5 ja auch Assimp ist. :-/ Was kann ich tun? Fehlt in meinem eigenen Loader ein Parameter für den Assimp-Importer? Es meldet mir halt eben sang und klanglos ein HasMeshes() -> false zurück.
C) Zweites Problem - Verkehrte Welt:
Nun gibts an der aktuellen Verfahrensweise noch ein weiteres Problem:
Wenn ich die Szene im Assimp-Viewer ansehe, sehe ich, dass er mit der Positionierung bzw. Rotation eines Cubes nicht klar kommt. Man sieht im Bild (Szene im Coppercube), das die "Rampe" von der Mitte des Bodens hoch zur Seitlichen Wand geht. Im Assimp ist es eher so, dass sie Rampe vom Rand unten in die Mitte des Raums hochsteigt. Alle anderen Relationen sind davon aber nicht betroffen. Sowohl der Boden bleibt "unten" und auch die anderen Wände bleiben, wo sie sind. Ich habe bereits versucht, nach dem Laden durch Assimp (mit "OBJ-Umweg") Koordinaten an verschiednene Achsen zu spiegeln, um den Effekt auszugleiche. Ohne Erfolg. Ich denke, dass da eher eine Rotation falsch interpretiert wird, oder? Die Rampe ist das einzige Objekt, was eine Rotation hat. Alle anderen Objekte sind haben ihre entsprechende Form und sind lediglich Axis aligned angeordnet.
Wenns ichs dann vom OBJ im mein Format konvertiere, wirds dann auch so falsch, wie im Assimp-Viewer dargestellt, in der eigenen Engine angezeigt.
Mit Seitenverkehrtkeit kann ich gut leben, aber nicht, wenn er Rotationen im Verhätnis zu anderen Entities in der Szene so falsch schluckt und Objekte falsch dreht bzw. platziert.
Anbei noch ein paar Bilder, um das besser zu illustrieren. Man beachte die "gelbe Rampe"..
Kann ich da was machen, um A) das Model direkt mit der Assimp-Lib zu laden und B) die Rotation richtig gefressen wird? Hat jemand ne Idee?
Besten Danke schonmal für Hinweise,
Top-OR
PS: Ich kann die Irrlicht-Szene-Datei(en) auch gerne zur "Ausprobieren" rumschicken bzw. attachen. Sagt bescheid, wenn das sinnvoll erscheinen sollte.
Edit: habe mal ein paar Typos korrigiert.
Ich habe mal wieder ne Frage zu Assimp.
Mein letztes Problem (Alter Compiler + Seltsame Preprozessor-Effekte) habe ich lösen können. Zum Teil benutze ich nun die Binaries bzw. benutze auf anderen Rechnern nun einen halbwegs aktuellen Compiler.
Zur Zeit spiele ich mit IrrEdit/CopperCube 5 rum und habe folgende Probleme/Effekte:
A) Erstes Problem: Assimp Library (precompiled binary) lädt "irr"-Szene nicht, Assimp-Viewer schon:
Ich habe eine einfache Szene genbaut, welche welche um Grunde nur 6 Meshes (Cubes) enhält. Nun exportiere ich das ganze aus dem Irrlicht-Editor mit als Irrlicht-Szene.
Das Ergebnis ist ein Haupt-File (XML: *.irr), welches im Grunde auf die 6 Meshes verweist, welche in einem Unterverzeichnis ebenfalls als XML-Files (*.irrmesh) abgelegt sind.
Versuche ich das ganze mit meinem eigenen Tool zu laden, welches den Assimp-Importer benutzt, bekomme ich eine Szene geladen, welche "HasMeshes() == false" zurückgibt.
Lade ich die selbe(!) Datei mit dem Assimp-Viewer, läd er das ganze Konstrukt und ich sehe wieder meine Klötzchen.
B) Hilflösung zu A): Zusätzlicher Umweg über OBJ-Export im Assimp-Viewer:
Ich kann nun, wenn ich das Ganze im Assimp-Viewer sehe, als OBJ exportieren. DANACH kann ich das OBJ mit meinem eigenen, Assimp-Lib basierten Tool nun auch lesen und in meine Engine laden.
Ich muss aber immer den manuellen Konvertierungsschritt gehen, was ziemlich nervt, zumal es 2x über Assimp geht, wobei ja einmal reichen sollte.
Hier nochmal die Pipeline: 1) Coppercube/IrrEdit Szene -> 2) export als *.IRR-Szene -> 3) laden im Assimp Viewer -> 4) export aus Assimp-Viewer als *.OBJ -> 5) laden im eigenen Assimp-basierten Tool -> 6) konvertierung ins eigene Format -> 7) laden in die eigene Engine
Nun meine erste Frage/Problem:
Ich würde mir gerne Schritt 3 und 4 sparen, zumal Schritt 5 ja auch Assimp ist. :-/ Was kann ich tun? Fehlt in meinem eigenen Loader ein Parameter für den Assimp-Importer? Es meldet mir halt eben sang und klanglos ein HasMeshes() -> false zurück.
C) Zweites Problem - Verkehrte Welt:
Nun gibts an der aktuellen Verfahrensweise noch ein weiteres Problem:
Wenn ich die Szene im Assimp-Viewer ansehe, sehe ich, dass er mit der Positionierung bzw. Rotation eines Cubes nicht klar kommt. Man sieht im Bild (Szene im Coppercube), das die "Rampe" von der Mitte des Bodens hoch zur Seitlichen Wand geht. Im Assimp ist es eher so, dass sie Rampe vom Rand unten in die Mitte des Raums hochsteigt. Alle anderen Relationen sind davon aber nicht betroffen. Sowohl der Boden bleibt "unten" und auch die anderen Wände bleiben, wo sie sind. Ich habe bereits versucht, nach dem Laden durch Assimp (mit "OBJ-Umweg") Koordinaten an verschiednene Achsen zu spiegeln, um den Effekt auszugleiche. Ohne Erfolg. Ich denke, dass da eher eine Rotation falsch interpretiert wird, oder? Die Rampe ist das einzige Objekt, was eine Rotation hat. Alle anderen Objekte sind haben ihre entsprechende Form und sind lediglich Axis aligned angeordnet.
Wenns ichs dann vom OBJ im mein Format konvertiere, wirds dann auch so falsch, wie im Assimp-Viewer dargestellt, in der eigenen Engine angezeigt.
Mit Seitenverkehrtkeit kann ich gut leben, aber nicht, wenn er Rotationen im Verhätnis zu anderen Entities in der Szene so falsch schluckt und Objekte falsch dreht bzw. platziert.
Anbei noch ein paar Bilder, um das besser zu illustrieren. Man beachte die "gelbe Rampe"..
Kann ich da was machen, um A) das Model direkt mit der Assimp-Lib zu laden und B) die Rotation richtig gefressen wird? Hat jemand ne Idee?
Besten Danke schonmal für Hinweise,
Top-OR
PS: Ich kann die Irrlicht-Szene-Datei(en) auch gerne zur "Ausprobieren" rumschicken bzw. attachen. Sagt bescheid, wenn das sinnvoll erscheinen sollte.
Edit: habe mal ein paar Typos korrigiert.