好的,这应该是一个简单的矩阵问题,但是我对矩阵的理解有些有限。这是场景:我有一个 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 中。我究竟做错了什么?