在 XNA 中执行此操作的最简单方法可能是将 a 传递Matrix
给SpriteBatch.Begin
. 这是您要使用的重载:MSDN(transformMatrix
参数)。
您也可以使用原始顶点执行此操作,其效果类似于BasicEffect
设置其World
矩阵。或者通过手动设置顶点位置,也许用Vector3.Transform()
.
您想要的大多数转换矩阵都是由Matrix.Create*()
方法 ( MSDN ) 提供的。例如,CreateScale
和CreateRotationZ
。
没有提供用于创建倾斜矩阵的方法。它应该是这样的:
Matrix skew = Matrix.Identity;
skew.M12 = (float)Math.Tan(MathHelper.ToRadians(36.87f));
(即倾斜 36.87f 度,这是我从我的旧答案中提取的。您应该能够通过 Google 找到倾斜矩阵的完整数学。)
请记住,变换发生在世界空间的原点 (0,0) 周围。例如,如果您想围绕 sprite 的中心进行缩放,则需要将该 sprite 的中心平移到原点,应用缩放,然后再将其平移回来。您可以通过将矩阵变换相乘来组合它们。此示例(未经测试)将围绕其中心缩放 200x200 图像:
Matrix myMatrix = Matrix.CreateTranslation(-100, -100, 0)
* Matrix.CreateScale(2f, 0.5f, 1f)
* Matrix.CreateTranslation(100, 100, 0);
注意:避免将 Z 轴缩放为 0,即使在 2D 中也是如此。
对于透视有CreatePerspective
。这将创建一个投影矩阵,它是一种特定类型的矩阵,用于将 3D 场景投影到 2D 显示器上,因此在设置 (例如) 时最好与顶点一起使用BasicEffect.Projection
。在这种情况下,您最好进行适当的 3D 渲染。
对于扭曲,只需使用顶点并将它们手动放置在您需要的任何地方。