4 Stimmen

2D-Knochensystem in XNA

Ich versuche, ein 2D-Knochensystem in XNA zu schreiben.

Mein erster Gedanke war, Matrizen zu verwenden, um die Rotationen und die Positionierung im Bone-Baum zu verfolgen, damit die Elemente leicht angezeigt werden können.

Cool, dachte ich, und dann schlug mir die Bestürzung ins Gesicht, als ich sah, dass Matrizen nur auf einzelne Sprites angewendet werden können batch.Begin Anruf und nicht auf einen Anruf pro Ziehung!

Ich habe einige Leistungstests durchgeführt, um zu prüfen, ob meine Bestürzung berechtigt war, und das war sie, indem ich spritebatch.Begin y End eine Reihe von Zeit sinkt meine Bildrate um einen großen (und inakzeptablen) Betrag.

Bevor ich also ein einzelnes Knochenbild zeichne, muss ich seine endgültige Position und Drehung (und in Zukunft vielleicht auch seine Skalierung) manuell konstruieren. In diesem Fall würden Sie immer noch Matrizen verwenden und irgendwie extrahieren die Informationen am Ende kurz vor dem Zeichnen der Knochen? Wenn ja, haben Sie eine Idee, wie ich die endgültigen Informationen erhalte, die ich brauche? Oder wäre es einfacher, zu versuchen und konstruieren sie alle aus den rohen Positionen und Drehungen der übergeordneten Knoten?

4voto

Ron Warholic Punkte 9894

Ehrlich gesagt würde ich das Sprite-Rendering-Objekt weglassen und zu Screen Space Quads wechseln. Es gibt keine künstlichen Beschränkungen für Screen-Space-Quads und Sie können die Standard-Implementierung von Bone-Systemen verwenden: Traverse nach unten den Baum Anwendung Transformationen, wie Sie gehen, dann Pop sie, wie Sie zurück nach oben den Baum bewegen.

0voto

Cecil Has a Name Punkte 4862

Sind Matrizen nicht ohnehin ein Overkill, wenn man in 2D arbeitet? Ich meine 16 Skalarmultiplikationen für jedes Matrix-Vektor-Produkt, wenn man mit 4 Multiplikationen für die Rotation und 2 Summationen für die Translation auskommen kann?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X