Ich möchte das 3D-Modell von fbx
file lesen und es in openGL es 2.0
engine auf dem iPhone anzeigen (ohne Unity
) und auch Animationen für das gelesene 3D-Objekt anzeigen.
Wie kann ich Animationen von fbx
file bekommen?
Momentan kann ich eine Liste von Posenamen bekommen, wie ich es verstanden habe, mit einer Transformationsmatrix, einer vollständigen Liste von Posen in der Ebene, Stapeln, Layern und vielen Kurven.
Wie können diese Informationen kombiniert werden, um richtige Animationen anzuzeigen?
Ich versuche auch, einige Informationen innerhalb von TakeInfo
zu analysieren, aber das Ergebnis ist etwas seltsam für mich, zum Beispiel:
Hier habe ich start = 0
und end = 0.014
für jeden geparsten Layer, also ist das falsch ( fbx
Datei, die ich anzeigen möchte, enthält 1 Mesh mit einfachen Animationen von 5 Sekunden Dauer).
Aktualisieren
Nach ein paar Stunden Nachforschung bekam ich die nächsten Dinge:
Als Referenz ist dies die Struktur des Testobjekts, das ich anzeigen möchte:
Hier kann man viele Knochen sehen (konkreter - 19) Ich kann (wie oben erwähnt) einen 19 animierten Obj in Liste (wie Namen von Knochen / Obj) und 19 Gruppen von Kurven innerhalb von jeweils 151 Frames (mit Frame-Rate 30 genau 5 Sekunden Anim. - 30 * 5 = 150 +) 1 letzte Identitätsmatrix).
Wenn ich versuche, jede der Kurvengruppen einzeln auf mein Mesh anzuwenden (ich kann nur 1 Mesh analysieren), sehe ich Animationen von verschiedenen Mesh-Bereichen, die auf alle Meshs angewendet werden (zB vertikale Rotation oder horizontale Translation), also I denke, dass diese Kurven in jeder Gruppe genau auf bestimmte Knochen angewendet werden sollten und als Ergebnis werde ich eine Animation für mein Mesh bekommen. Das Problem ist, dass ich nicht weiß, wie nur ausgewählte Knochenscheitelpunkte nur animiert werden.
Jetzt ist das Problem, wie man diese alle Animationen anwendet, die in getrennte Gruppe spezifisch sind, die zu Knochen zum Gesamtobj ist (weil ich nur ein Ineinandergreifen habe)?
Wie kann ich 1 globale Kurvenliste für jedes Bild aus der Liste mit allen Kurvengruppen erhalten?
Update2
Dank @codetiger Ratschläge folge ich Anweisungen innerhalb des angegebenen Links im Kommentar und mit dieser Technik kann ich eine Liste knochenspezifischer Matts mit Start- und Endzeit und erforderlichen Transformationen abrufen, aber das ist fast das gleiche wie zuvor mit Kurven - der einzige Unterschied, dass ich mit Kurven aus 9 Kurven (translate / scale / rotate für xyz) mattieren sollte, anstatt die volle Matrix zu verwenden, aber das Problem ist immer noch vorhanden - wie kann ich sie in 1 globalen Matrix kombinieren?
Der Code, den ich verwende (fand einige Links dafür):
%Vor%Hier empfange ich 121 statt 151 Matrix - aber die Dauer einiger Matrix-Transformationen dauert mehr als die Dauer von 1 Frame-Draw, also denke ich, dass die Q-ty hier auch richtig ist
%Vor% Ich denke, dass Autodesk SDK
es gibt eine Möglichkeit, eine globale Transformation für jeden DrawCall
Irgendwelche Vorschläge? Ist das möglich?
Bounty für jeden, der beschreiben kann, wie Animationen auf dem iPhone in openGLES 2.0 mit Autodesk SDK angezeigt werden ... ( sorry typo statt Facebook )
Hier, was ich bekommen kann
Ursprüngliches Objekt in blender
Wenn ich Knochen separat zeichne (gleicher VBO mit verschiedenen Transformations- und nur Indices für jeden Knochen entsprechend)
Hier können Sie animiertes Mesh in OpenGL ES rendern. Dadurch erhalten Sie Informationen zu den Details, die Sie aus der Datei lesen müssen.
Methode 1: (GPU-Skinning)
Diese Methode funktioniert nur mit einer begrenzten Anzahl von Bones, basierend auf den Fähigkeiten der Hardware. Normalerweise hängt es von der Anzahl der Matrizen ab, die Sie an den Shader senden können.
Binden Sie die Mesh-Informationen einmal mit BindAttributes an die GPU und senden Sie die Matrizen uniform an den Shader.
Schritt 1: Lies alle Bone Matrix und erstelle ein Array von Matrizen und sende diese Daten in Uniformen an den Shader.
Schritt 2: Berechnen Sie im Vertex Shader die gl_position wie den unteren Shader
%Vor%In diesem Shader habe ich die Gewichtsfarbeninformationen in den Attributen optionalData1 & amp; optionaleDaten2. Die Daten sind wie folgt gepackt: (BoneId1, BoneId2, BoneId3, BoneId4) und (Weight4Bone1, Weight4Bone2, Weight4Bone3, Weight4Bone4). In diesem Fall sind Sie auf maximal 4 Bones beschränkt, die sich auf die Attribute auswirken. Der Fragment-Shader-Teil ist üblich.
Methode 2: (CPU-Skinning)
Wenn Sie mit der Beschränkung beim GPU-Skinning nicht leben können, besteht die einzige Möglichkeit darin, die Berechnungen auf der CPU-Seite durchzuführen.
Schritt 1: Berechnen Sie die Eckpunktposition im aktuellen Rahmen, indem Sie die Matrizen multiplizieren, die zu den Bones gehören, die den Eckpunkt betreffen.
Schritt 2: Sammeln Sie die neuen Positionen für das aktuelle Bild und senden Sie die Informationen an die GPU in Vertex-Attributen.
Schritt 3: Berechnen Sie neue Scheitelpunktpositionen in jedem Bild neu und aktualisieren Sie den Attributpuffer.
Diese Methode bringt die Last der Berechnungen in die CPU.
Tags und Links ios animation objective-c++ opengl-es-2.0 fbx