Ich arbeite seit wenigen Wochen an einer Spieleengine für iPhone und Co (http://isdge.sf.net) und habe inzwischen wohl schon fast die Hälfte der Zeit in Animationen investiert nur um jetzt festzustellen, dass ich eine ganz wichtige Tatsache völlig missachtet habe. Jedenfalls habe ich die tolle Assimp für einen Konverter zu meinem eigenen Format missbraucht (nachdem ich an den Texturekoordinaten mit Collada total verzwefelt bin) und ziemliche Probleme die Koordinatensysteme "anzugleichen". Ich blicke inzwischen weder durch mein eigenes noch durch das was ich nach dem Importieren (ohne makeLeftHanded) mit Assimp erhalte durch. bei mir ist die y-Achse die, die nach oben zeigt und in der Assimp Dokumentation steht:
und dennoch muss ich y und z vertauschen, wie kann das sein?By default the data is returned in a right-handed coordinate space which for example OpenGL prefers. In this space, +X points to the right, +Z points towards the viewer and and +Y points upwards. In the DirectX coordinate space +X points to the right, +Y points upwards and +Z points away from the viewer.
Reicht es bei den Matrizen in den "Bonespace" diese zu Column-Major umzuordnen und dann matrix*vertex zu berechnen? Bzw Y und Z eben auch noch entsprechend auszutauschen.
Kann ich die quaternions dann auch einfach direkt nutzen?
Quaternions nutze ich nur "intern", d.h. meine Objekte haben alle Eulerwinkel, dann ist doch Gimbal -Lock durchaus wieder ein Problem, oder? Bei meiner Quaternionklasse ist y und z im Vergleich zu dem was ich am Anfang erwartet habe vertauscht.
Jedenfalls denke ich darüber nach, meine Vektor, Quaternion und Matrix Klassen nochmal komplett neu anzufangen. Könnt ihr mir da irgendeine gute Quelle empfehlen die mir nicht noch abverlangt y und z und row und column major selbst zu verdrehen?
Aktuell bin ich einfach nur total verwirrt und versuche da wieder etwas Ordnung hinein zu bringen und wenn ihr mir dabei irgendwie helfen würdet wäre das toll :)
Übrigens sry, wenn dies die falsche Rubrik ist, aber am besten hätte es in alle drei zusammen gepasst.
Nils
So sieht die Berechnung meiner Worldspacematrix für Objekte aus:
Code: Alles auswählen
void sgObject::updateModel()
{
matmodel.makeTranslation(position);
matmodel.scale(scale);
matmodel.rotate(rotation);
matnormal.makeRotation(rotation);
}
und dies die der Quaternions: http://isdge.svn.sourceforge.net/viewvc ... iew=markup
Die Quaternionklasse ist von unterschiedlichen Quellen zusammenkopiert und angepasst, was viel falsches bewirkt haben könnte. Die Matrixklasse ist dagegen aus einem alten Projekt von mir kopiert nd da habe ich etwas selbst nachgedacht und dann herumprobiert bis es passte was also auch in vielen Fehlern geendet haben kann. Die Vektorklasse verlinke ich nicht, da ich mir ziemlich sicher bin, dass dort alles korrekt ist (und selbst wenn dies nicht so sein sollte, ist es für meine aktuellen Probleme irrelevant).
Dies nur für den Fall, dass hier jemand Langeweile und Lust darauf hat sich extrem häßlichen Code anzutun.