XNA 4.0 Рисование повернутой / искаженной текстуры - PullRequest
1 голос
/ 06 октября 2011

Добрый день всем.Я надеюсь, что вы можете помочь мне с моим вопросом.

Есть ли способ преобразовать или напрямую отобразить спрайт, как это?

example Без использования 3D.Я знаю, что это легко сделать в 3d, но проект, над которым я работаю, вообще не использует 3d, поэтому я не хочу включать 3d только из-за этой мелочи ...

(пример изображения из какой-то случайной игры)

Итак, в основном то, что мне нужно: взять спрайт в виде прямоугольника, а затем преобразовать его свободным способом, что означает, что я могу установить точки этого спрайта для любогокоординаты, а не просто прямоугольник.

Заранее спасибо.

1 Ответ

1 голос
/ 06 октября 2011

Техника, используемая в этом изображении, это лучевая передача 2d.который был использован впервые с wolfenstein 3d и реализует поддельное 3d поверх 2D.

здесь вы можете найти обучающее http://lodev.org/cgtutor/

, хотя это не то, что вам нужно.

лучший способ достичь желаемого - определить два треугольника и использовать 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, ...,...);

этот код следует понимать как псевдокод, он не тестируется, но показываетсоответствующие действия, которые необходимо выполнить.

...