2

我想缩放图像,以便图像始终是屏幕的大小,无论它如何旋转。有没有人对此有任何想法?顺便说一句,我正在使用 xna 在 C# 中对此进行编程。

4

2 回答 2

0

您可以应用 RotateTransform 来转换图像,然后将其包含在 LayoutTransform 中以填充容器的尺寸(在本例中为屏幕)。

于 2013-04-07T03:43:48.223 回答
0

也许与此类似,尽管我不确定您希望如何绘制纹理。使用三角形和纹理包裹它们是最简单的。

这就是我在旋转后获得新宽度和新高度的方式:

Matrix origin = Matrix.CreateTranslation(0, 0, 0);
Matrix scale = Matrix.CreateScale(1f);
Matrix rotation = Matrix.CreateRotationZ(MathHelper.ToRadians(rotate));
Matrix translation = Matrix.CreateTranslation(0, 0, 0);

Vector2 pos1 = Vector2.Transform(new Vector2(Texture.Width / 2, Texture.Height / 2), origin * scale * rotation * origin);
Vector2 pos2 = Vector2.Transform(new Vector2(Texture.Width, Texture.Height), origin * scale * rotation * translation);

int width = (int)Math.Abs(pos2.X - pos1.X) * 2;
int height = (int)Math.Abs(pos2.Y - pos1.Y) * 2;

float scaleX = (graphics.PreferredBackBufferWidth / width);
float scaleY = (graphics.PreferredBackBufferHeight / height);

您可能会找到绘制此图的最佳方法,因为翻转 45 度的图像在屏幕上绘制时看起来很奇怪,因此您可能必须将其放大以适合屏幕但仍会旋转。您遗漏了,旋转 180 度或 90 度的图像应该效果更好。

于 2013-04-07T10:26:20.880 回答