我已经阅读了一些涉及XNA的教程(以及它的各种版本),我仍然对绘制基元有点困惑.一切似乎都很复杂.
有人可以使用代码向我展示最简单的XNA实现,即在屏幕上绘制一行或两行吗?也许有一个简短的解释(包括样板)?
我不是游戏程序员,我有很少的XNA经验.我的最终目标是在屏幕上绘制一些线条,我最终将通过旋转等方式(手动)进行转换.然而,对于这第一步......我需要简单画线!我记得在我古老的OpenGL时代,当用一些方法调用绘制一条线时,它是相当简单的.我应该简单地恢复使用非托管Directx呼叫吗?
使用XNA时,所有内容(甚至是2d基元)都必须以3d卡可以理解的方式表示,这意味着一条线只是一组顶点.
MSDN在这里有一个非常好的演练:
http://msdn.microsoft.com/en-us/library/bb196414.aspx#ID2EEF
您会发现渲染原始线需要的代码多于设置纹理四边形并旋转它所需的代码,因为从本质上讲,您在渲染线时也会做同样的事情.
遵循NoHayProblema的回答(我还不能发表评论).
这个答案虽然对于这个老问题来说是正确的,但却是不完整的.Texture2D构造函数返回一个未初始化的纹理,它永远不会在屏幕上绘制.要使用该方法,您需要设置纹理的数据,如下所示:
Texture2D SimpleTexture = new Texture2D(GraphicsDevice, 1, 1, false, SurfaceFormat.Color); Int32[] pixel = {0xFFFFFF}; // White. 0xFF is Red, 0xFF0000 is Blue SimpleTexture.SetData(pixel, 0, SimpleTexture.Width * SimpleTexture.Height); // Paint a 100x1 line starting at 20, 50 this.spriteBatch.Draw(SimpleTexture, new Rectangle(20, 50, 100, 1), Color.Blue);
考虑到将数据写入像素的方式必须与纹理的SurfaceFormat一致.该示例有效,因为纹理被格式化为RGB.旋转可以在spriteBatch.Draw中应用,如下所示:
this.spriteBatch.Draw (SimpleTexture, new Rectangle(0, 0, 100, 1), null, Color.Blue, -(float)Math.PI/4, new Vector2 (0f, 0f), SpriteEffects.None, 1f);
找到了http://www.bit-101.com/blog/?p=2832的教程
它在XNA 4.0中使用BasicEffect(着色器)和内置的绘图用户原语
我发现一些有用的代码示例:
加载内容方法
basicEffect = new BasicEffect(GraphicsDevice); basicEffect.VertexColorEnabled = true; basicEffect.Projection = Matrix.CreateOrthographicOffCenter (0, GraphicsDevice.Viewport.Width, // left, right GraphicsDevice.Viewport.Height, 0, // bottom, top 0, 1);
绘制方法
basicEffect.CurrentTechnique.Passes[0].Apply(); var vertices = new VertexPositionColor[4]; vertices[0].Position = new Vector3(100, 100, 0); vertices[0].Color = Color.Black; vertices[1].Position = new Vector3(200, 100, 0); vertices[1].Color = Color.Red; vertices[2].Position = new Vector3(200, 200, 0); vertices[2].Color = Color.Black; vertices[3].Position = new Vector3(100, 200, 0); vertices[3].Color = Color.Red; GraphicsDevice.DrawUserPrimitives(PrimitiveType.LineList, vertices, 0, 2);
如果这有助于你,那就玩得开心并投票.也访问了我得到的教程.
好吧,你可以用一种非常简单的方式做到这一点,而不会进入3D可怕的矢量东西.
只需创建一个快速纹理,例如:
Texture2D SimpleTexture = new Texture2D(GraphicsDevice, 1, 1, false, SurfaceFormat.Color);
然后使用该纹理绘制一条线:
this.spriteBatch.Draw(SimpleTexture, new Rectangle(100, 100, 100, 1), Color.Blue);
我希望这有帮助