我正在尝试使用XNA中的spritefont在屏幕上绘制文本。 我可以看到文本出现,但无论我尝试什么,当我绘制文本时总会出现其他问题。
我正在尝试显示FPS。 我已经尝试过几种不同的方式和我所做的各种不同的XNA项目。 将文字绘制到屏幕时发生的一些事情包括 - 顶点被绘制得更远并且在错误的位置,根本没有绘制顶点,线框模式无法打开。 仅仅依赖于我如何渲染文本,我总是最终得到其中一个。 然后,如果我注释掉绘制文本的部分,一切都将恢复正常。
这是一些代码 我在代码顶部的变量是 -
GraphicsDeviceManager graphics;
SpriteFont font;
SpriteBatch spriteBatch;
在我的LoadContent中我有
font = Content.Load<SpriteFont>("SpriteFont1");
RasterizerState rs = new RasterizerState();
rs.FillMode = FillMode.WireFrame;
GraphicsDevice.RasterizerState = rs;
spriteBatch = new SpriteBatch(GraphicsDevice);
这是我的整个Draw方法 -
protected override void Draw(GameTime gameTime)
{
CreateMesh();
GraphicsDevice.Clear(Color.SkyBlue);
effect.Parameters["View"].SetValue(cam.viewMatrix);
effect.Parameters["Projection"].SetValue(projectionMatrix);
effect.CurrentTechnique = effect.Techniques["Technique1"];
effect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, vertices.Count, 0, indices.Length / 3);
spriteBatch.Begin();
spriteBatch.DrawString(font, frameRate.ToString(), new Vector2(1, 1), Color.Black);
spriteBatch.End();
frameCounter++;
base.Draw(gameTime);
}
这是我发现最接近工作的方式,但由于某种原因,无论我尝试做什么,它都会使线框不起作用,我真的需要线框。
编辑: 我在程序运行时调试了填充模式,并且在使用精灵字体时由于某种原因将其设置为固定。 我可以在绘制顶点之前每帧重置填充模式,但我真的不必这样做。
答案 0 :(得分:1)
您应该在绘制somthing win线框模式之前应用光栅化器状态,而不仅仅是在load方法中...因为batch.Begin()方法将设置默认的光栅化器状态
如果你想使用其他光栅化器状态进行spritebatch,你应该提供一个
spritebatch.Begin(SortMode,...,,.., rs );
你的代码应该这样改变:
static RasterizerState rs = new RasterizerState() { FillMode = FillMode.Wireframe; }
protected override void Draw(GameTime gameTime)
{
CreateMesh();
GraphicsDevice.Clear(Color.SkyBlue);
GraphicsDevice.RasterizerState = rs;
effect.Parameters["View"].SetValue(cam.viewMatrix);
effect.Parameters["Projection"].SetValue(projectionMatrix);
effect.CurrentTechnique = effect.Techniques["Technique1"];
effect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, vertices.Count, 0, indices.Length / 3);
....
答案 1 :(得分:0)
使用SpriteBatch
将渲染状态更改为3D图形不再有效的点,除非您将渲染状态更改回3D友好状态。有关详细信息,请参阅此文章。
http://blogs.msdn.com/b/shawnhar/archive/2006/11/13/spritebatch-and-renderstates.aspx