Xna变换像photoshop变换工具一样的2D纹理

时间:2013-06-03 10:49:46

标签: xna textures

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

这就是我想在XNA中使用任何纹理http://www.tutorial9.net/tutorials/photoshop-tutorials/using-transform-in-photoshop/

做的所有事情

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

希望你可以帮我一些教程或已经做过的事情:D,我认为顶点有解决方案,但也许。

感谢。

1 个答案:

答案 0 :(得分:2)

在XNA中执行此操作的最简单方法可能是将Matrix传递给SpriteBatch.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度,我推迟了this old answer of mine。你应该能够通过Google找到扭曲矩阵的完整数学。)

请记住,转换发生在世界空间的起源(0,0)附近。例如,如果您希望围绕精灵中心缩放,则需要将该精灵的中心转换为原点,应用比例,然后再将其转换回来。您可以通过乘以矩阵变换来组合矩阵变换。此示例(未经测试)将围绕其中心缩放200x200图像:

Matrix myMatrix = Matrix.CreateTranslation(-100, -100, 0)
                * Matrix.CreateScale(2f, 0.5f, 1f)
                * Matrix.CreateTranslation(100, 100, 0);

注意:即使在2D中,也要避免将Z轴缩放为0。

对于透视,有CreatePerspective。这将创建一个投影矩阵,这是一种特定类型的矩阵,用于将3D场景投影到2D显示器上,因此在设置(例如)BasicEffect.Projection时最好与顶点一起使用。在这种情况下,你最好做正确的3D渲染。

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