さて、これは単純なマトリックスの質問であるべきですが、私のマトリックスの理解はやや限られています. シナリオは次のとおりです: 1px x 1px のスプライトがあり、x と y の量 (両側で異なる量) でスケーリングし、そのスプライトを角度で回転させたいと考えています。全体を正確に配置します(左上または中央から、私には違いはありません)。
これまでのところ、私のコードは漠然と近いですが、渡す角度に応じて、ランダムな量だけずれている傾向があります.
私はこれがそれを行うと思います:
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 );
しかし、私はそれが正しい位置にあると思っていても、回転した線のスケールを縮小する傾向があります.
私もこれを試しました:
Matrix m = Matrix.Transformation2D( new Vector2( center.X, center.Y ), 0f,
new Vector2( width, height ), new Vector2( center.X, center.Y ),
angle, Vector2.Zero );
線は正確なサイズと形状で正確に見えますが、正確に配置することはできません。上記の呼び出しの最後に移動ベクトルを使用した場合、または Sprite.Draw を使用して位置を設定した場合、どちらも正しく機能しません。
これはすべてSlimDXにあります。私は何を間違っていますか?