Хорошо, это должен быть простой вопрос о матрицах, но мое понимание матриц несколько ограничено. Вот сценарий: у меня есть спрайт 1 на 1 пиксель, который я хочу масштабировать до некоторой величины 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. Что я делаю не так?