这是我创建的第一个3D应用程序,如果这看起来像一个简单的问题,我很抱歉,但我已经搜索了互联网和这些论坛,试图找到答案。
我正在尝试使用spriteBatch.DrawString命令在屏幕上绘制一个简单的字符串。
该应用类似于Minecraft,屏幕上有大量的立方体。为了解决滞后问题,所有立方体都是通过顶点创建的,并且已经实现了硬件实例化。
问题是,当我调用spriteBatch.Begin()时,所有其他多维数据集的显示方式都不同。我知道spritebatch改变了一些状态,因此添加了以下行
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
Bellow是用于绘制播放器的代码
public void Draw(Matrix view, Matrix projection)
{
effect.CurrentTechnique = effect.Techniques["TexturedNoShading"];
effect.Parameters["xView"].SetValue(view);
effect.Parameters["xProjection"].SetValue(projection);
effect.Parameters["xWorld"].SetValue(world);
effect.Parameters["xTexture"].SetValue(texture);
device.SetVertexBuffer(myVertexBuffer);
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
pass.Apply();
device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, vertices.Length, 0, indices.Length / 3);
}
}
这是主类中用于绘制所有内容的代码
RasterizerState rs = new RasterizerState();
rs.CullMode = CullMode.None;
rs.FillMode = FillMode.Solid;
device.RasterizerState = rs;
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
_map.Draw(_camera.GetCamera(), projection);
_player.Draw(_camera.GetCamera(), projection);
spriteBatch.Begin();
spriteBatch.DrawString(Text, "test", new Vector2(100, 100), Color.White);
spriteBatch.End();
我想发布问题的截图以更清楚地显示它,但由于这是我的第一篇文章,我没有权利发布图片。我很高兴通过电子邮件将图像发送给人们。
我很乐意提供任何其他信息,但这似乎是一个简单的问题。
感谢您提供的任何帮助。
Sam Vickery
答案 0 :(得分:0)
我可以看到你设置顶点缓冲区的位置,但看不到你在任何地方设置索引缓冲区了吗?
它通常就在你设置vertexbuffer的地方。像这样:'
device.SetVertexBuffer(myVertexBuffer);
device.Indices = myIndexBuffer;