我想在XNA 4上创建与Photoshop相同的转换效果: 变换工具用于缩放,旋转,倾斜,并且只是扭曲您正在使用的任何图形的透视
这就是我想在XNA中使用任何纹理http://www.tutorial9.net/tutorials/photoshop-tutorials/using-transform-in-photoshop/
做的所有事情倾斜:倾斜变换垂直或水平倾斜对象。 扭曲:扭曲变换允许您自由地在任何方向上拉伸图像。 透视:透视变换允许您向对象添加透视。 翘曲物体(我最感兴趣)。
希望你可以帮我一些教程或已经做过的事情:D,我认为顶点有解决方案,但也许。
感谢。
答案 0 :(得分:2)
在XNA中执行此操作的最简单方法可能是将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度,我推迟了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渲染。
对于扭曲,只需使用顶点并将它们手动放置在您需要的地方。