首页 > 其他 > 详细

xna 4.0 在3D 场景中用spritebatch 写2D文字3D显示不正常的问题

时间:2014-01-14 21:21:59      阅读:587      评论:0      收藏:0      [点我收藏+]

     用SpriteBatch 在3D场景中写文字时,会把GraphicsDevice中的参数改掉,因此为了正确显示3D场景,需要在spriteBatch.end() 结束后,把改动过的参数恢复回来。

    具体代码如下: 

    

// Draw info
           spriteBatch.Begin();
           string str = "Avatar position " + avatarPosition.ToString();
           Vector2 ms = Font.MeasureString(str);
           Vector2 position;
           position.X = (this.Window.ClientBounds.Width - ms.X) / 2.0f;
           position.Y = 0;
           spriteBatch.DrawString(Font, str, position, Color.BlueViolet);
           str = "Avatar direction" + avatarDirection.ToString();
           position.Y = position.Y + 20;
           spriteBatch.DrawString(Font, str, position, Color.BlueViolet);
 
           str = "Camera Target" + camera.Target.ToString();
           position.Y = position.Y + 20;
           spriteBatch.DrawString(Font, str, position, Color.BlueViolet);
 
           str = "Camera Position" + camera.Position.ToString();
           position.Y = position.Y + 20;
           spriteBatch.DrawString(Font, str, position, Color.BlueViolet);
 
           str = " Avatar rotation radion" + avatarLeftRightRot.ToString();
           position.Y = position.Y + 20;
           spriteBatch.DrawString(Font, str, position, Color.BlueViolet);
           spriteBatch.End();

  恢复原来的参数:

bubuko.com,布布扣
GraphicsDevice.BlendState = BlendState.Opaque;
            GraphicsDevice.DepthStencilState = DepthStencilState.Default;
            GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;

            // TODO: Add your drawing code here
            basicEffect.VertexColorEnabled = false;
            basicEffect.TextureEnabled = true;
            basicEffect.Texture = textureFloor;
            basicEffect.World = Matrix.Identity;
            basicEffect.View = camera.ViewMatrix;
            basicEffect.Projection = camera.ProjectionMatrix;

            foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                device.SetVertexBuffer(groundVertexBuf);
                device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
            }
bubuko.com,布布扣

比较下 恢复GraphicsDevices之前和之后的状态

bubuko.com,布布扣bubuko.com,布布扣

看,这回地板出来了吧!

本人邮箱: pony1976@sina.com  ,欢迎转载,请保留邮箱。

参考文章链接:

http://blogs.msdn.com/b/shawnhar/archive/2010/06/18/spritebatch-and-renderstates-in-xna-game-studio-4-0.aspx?CommentPosted=true#commentmessage

xna 4.0 在3D 场景中用spritebatch 写2D文字3D显示不正常的问题

原文:http://www.cnblogs.com/xna40/p/3513092.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!