XNA 4.0绘制旋转/扭曲纹理

时间:2011-10-06 08:25:05

标签: c# graphics 3d xna

大家好日子。 我希望你能帮助我解决我的问题。

有没有办法像这样转换或直接渲染精灵?

example 不使用3d。我知道它可以在3d中轻松完成,但我正在研究的项目根本不使用3d,所以我真的不想仅仅因为那个小东西而包含3d ......

(示例图片来自某个随机游戏)

基本上我需要的是: 将精灵作为一个矩形,然后以自由的方式对其进行变换,这意味着我可以将该精灵的点设置为任何协调,而不仅仅是矩形。

提前致谢。

1 个答案:

答案 0 :(得分:1)

该图像中使用的技术是光线投射2d。这是第一次使用wolfenstein 3d,并在2D上实现虚假的3D。

在这里你可以找到一个tutotial http://lodev.org/cgtutor/

虽然这不是你想要的。

实现您想要的最佳方法是定义两个三角形并使用带有basiceffect的GraphicsDevice.DrawUserPrimitives来绘制它。

   // Init Triangles with four points A,B,C and D

   VertexPOsitionTexture[] Vertex = new VertexPositionTexture[6];
   Vertex[0].Position = (A.X,A.Y,0);
   Vertex[1].Position = (B.X,B.Y,0);
   Vertex[2].Position = (C.X,C.Y,0);
   Vertex[3].Position = (C.X,C.Y,0);
   Vertex[4].Position = (B.X,B.Y,0);
   Vertex[5].Position = (D.X,D.Y,0);

   Vertex[0].Texture= (0,0);
   Vertex[1].Texture= (1,0);
   Vertex[2].Texture= (0,1);
   Vertex[3].Texture= (0,1);
   Vertex[4].Texture= (1,0);
   Vertex[5].Texture= (1,1);

   // Init Effect from http://blogs.msdn.com/b/shawnhar/archive/2010/04/05/spritebatch-and-custom-shaders-in-xna-game-studio-4-0.aspx

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


   BasicEffect effect = new BasicEffect();

   effect.Texture = your texture;
   effect.TextureEnabled = true;
   effect.World = Matrix.Identity;
   effect.View = Matrix.Identity;
   effect.Projection = halfPixelOffset * projection;

   // Draw Triangles
   effect.Apply():
   GraphicsDevice.DrawUserPrimitives<VertexPositionTexture>(vertex, TriangleList, ...,...);

这段代码必须被理解为伪代码,它没有经过测试,但它显示了要完成的相关操作。