Wie zu drehen, skalieren und zu übersetzen einer matrix alle auf einmal in C#?

Okay, das ist etwas, das sollte sein eine einfache matrix-Frage, aber mein Verständnis von Matrizen, die etwas begrenzt ist. Hier ist das Szenario: ich habe eine 1 x 1px sprite, ich will zu skalieren, indem eine gewisse Menge von x und y (unterschiedliche Beträge auf jeder Seite), und dann will ich drehen, dass der sprite durch einen bestimmten Winkel, und dann will ich in der Lage sein, präzise zu positionieren, die ganze Sache (von oben Links oder in der Mitte, macht für mich keinen Unterschied).

Soweit mein code ist vage in der Nähe, aber es neigt dazu, sich durch einige zufällige Menge je nach dem Winkel, ich pass auf.

Ich würde denken, dass dieser es tun würde:

        Point center = new Point( 50, 50 );
        float width = 60;
        float height = 100;
        float angle = 0.5;
        Vector3 axis = new Vector3( center.X, center.Y, 0 );
        axis.Normalize();
        Matrix m = Matrix.Scaling( width, height, 0 ) *
            Matrix.RotationAxis( axis, angle ) *
            Matrix.Translation( center.X, center.Y, 0 );

Aber es neigt zu schrumpfen das Ausmaß der gedreht Zeile Weg nach unten, obwohl ich denke, es ist-Positionierung irgendwie Recht.

Hab ich auch so probiert:

  Matrix m = Matrix.Transformation2D( new Vector2( center.X, center.Y ), 0f,
      new Vector2( width, height ), new Vector2( center.X, center.Y ),
      angle, Vector2.Zero );

Die Zeile sieht genau Recht, mit der exakt richtigen Größe und Form, aber ich kann es nicht positionieren Sie es korrekt an alle. Wenn ich den translationsvektor am Ende des Aufrufs von oben, oder wenn ich eine position mit Sprite.Zeichnen, weder richtig funktioniert.

Dies ist alles in SlimDX. Was mache ich falsch?

InformationsquelleAutor x4000 | 2009-03-11
Schreibe einen Kommentar