读书人

XNA4.0 画线,该如何解决

发布时间: 2012-09-13 09:51:53 作者: rapoo

XNA4.0 画线
已知多个点的坐标 怎么在xna中代码实现首尾连接 并在winform中画出来 给出可以运行的最简单的代码就行

例:已知点A(0,0,1) B(0,1,0) C(1,0,0) D(1,1,1) 连接ABCD并在winform中画出来

[解决办法]

C# code
        GraphicsDeviceManager graphics;        VertexPositionColor[] verts;        BasicEffect ef;        public Game1()        {            graphics = new GraphicsDeviceManager(this);            Content.RootDirectory = "Content";        }        protected override void Initialize()        {            base.Initialize();        }        protected override void LoadContent()        {            verts = new VertexPositionColor[4];            verts[0] = new VertexPositionColor(new Vector3(0, 0, 1), Color.Red);            verts[1] = new VertexPositionColor(new Vector3(0, 1, 0), Color.Red);            verts[2] = new VertexPositionColor(new Vector3(1, 0, 0), Color.Red);            verts[3] = new VertexPositionColor(new Vector3(1, 1, 1), Color.Red);            short[] userindex = { 0, 1, 1, 2, 2, 3, 3, 0 };            VertexBuffer vb = new VertexBuffer(GraphicsDevice, typeof(VertexPositionColor), verts.Length, BufferUsage.None);            vb.SetData(verts);            GraphicsDevice.SetVertexBuffer(vb);            IndexBuffer indexbuffer = new IndexBuffer(GraphicsDevice, IndexElementSize.SixteenBits, userindex.Length, BufferUsage.None);            indexbuffer.SetData(userindex);            GraphicsDevice.Indices = indexbuffer;            ef = new BasicEffect(GraphicsDevice);            ef.World = Matrix.Identity;            ef.View = Matrix.CreateLookAt(new Vector3(0, 0, 4), new Vector3(0, 0, -1), Vector3.Up);            ef.Projection = Matrix.CreatePerspective((float)GraphicsDevice.Viewport.Width / GraphicsDevice.Viewport.Height, 1, 1.125f, 10);            ef.VertexColorEnabled = true;            foreach (EffectPass pass in ef.CurrentTechnique.Passes)                pass.Apply();        }        protected override void UnloadContent()        {                    }        protected override void Update(GameTime gameTime)        {            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)                this.Exit();            base.Update(gameTime);        }        protected override void Draw(GameTime gameTime)        {            GraphicsDevice.Clear(Color.CornflowerBlue);            GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.LineList, 0, 0, verts.Length, 0, 4);            base.Draw(gameTime);        } 

读书人网 >C#

热点推荐