Windows Phone对按钮具有很好的倾斜效果,如下图所示:



是否可以使用SpriteBatch在XNA中重新实现此行为?我可以检测触摸位置并计算矩形拐角应位于的点,但是我不知道如何使用这种变形来渲染图像。

最佳答案

Matrix projection = Matrix.CreateOrthographicOffCenter(0, viewport.Width, viewport.Height, 0, 0, 1);
Matrix halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0);

basicEffect.World = Matrix.Identity;
basicEffect.View = Matrix.Identity;
basicEffect.Projection = halfPixelOffset * projection;

basicEffect.TextureEnabled = true;
basicEffect.VertexColorEnabled = true;

spriteBatch.Begin(0, null, null, null, null, basicEffect);


您可以将BasicEffect传递到SpriteBatch.Begin方法中。这使您可以将自定义着色器与spritebatch一起使用,更有趣的是,您可以控制相机并变换支持SpriteBatch的四边形。上面是默认设置,应该像标准SpriteBatch一样工作,您不能专门更改这些点,但是旋转应该可以达到您想要的效果。

要更改四边形的3D位置,只需更改basicEffect.World矩阵。

例:

basicEffect.View = Matrix.Identity * Matrix.CreateRotationY(.002);

08-08 03:15