1

我想在 XNA 4 上创建与 Photoshop 相同的变换效果:变换工具用于缩放、旋转、倾斜和扭曲您正在使用的任何图形的透视图

这就是我想用任何纹理在 XNA 中做的所有事情http://www.tutorial9.net/tutorials/photoshop-tutorials/using-transform-in-photoshop/

倾斜:倾斜变换垂直或水平倾斜对象。扭曲:扭曲变换允许您在任何方向自由拉伸图像。透视:透视变换允许您向对象添加透视。扭曲对象(我最感兴趣)。

希望你能帮助我一些教程或已经制作的东西:D,我认为顶点有解决方案,但也许。

谢谢。

4

1 回答 1

2

在 XNA 中执行此操作的最简单方法可能是将 a 传递MatrixSpriteBatch.Begin. 这是您要使用的重载:MSDNtransformMatrix参数)。

您也可以使用原始顶点执行此操作,其效果类似于BasicEffect设置其World矩阵。或者通过手动设置顶点位置,也许用Vector3.Transform().

您想要的大多数转换矩阵都是由Matrix.Create*()方法 ( MSDN ) 提供的。例如,CreateScaleCreateRotationZ

没有提供用于创建倾斜矩阵的方法。它应该是这样的:

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 渲染。

对于扭曲,只需使用顶点并将它们手动放置在您需要的任何地方。

于 2013-06-03T11:23:50.690 回答