MonoGame:渲染 3d 模型和 spritebatch 的问题
MonoGame: problem with rendering 3d model and spritebatch
我想在屏幕上绘制一些调试信息,但这会导致渲染模型出现问题。我在互联网上找到了一些解决方案,但它不起作用。也许我太笨了,但我不知道出了什么问题。
这是绘制方法:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.DarkCyan);
spriteBatch.Begin();
player.Draw(dt);
spriteBatch.DrawString(gamefont, "render Time :" + gameTime.ElapsedGameTime.TotalSeconds, new Vector2(0, 85), Color.White);
spriteBatch.End();
effect.View = player.view;
effect.Projection = player.projection;
effect.Texture = dirtTexture;
GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
foreach (EffectPass p in effect.CurrentTechnique.Passes)
{
p.Apply();
effect.World = player.world;
GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, buffer.VertexCount / 3);
}
base.Draw(gameTime);
}
Here how it look like
三角形法线(正面)被向后绘制。这是由顶点缓冲区中的顶点顺序定义的。
幸运的是,我们可以在GraphicsDevice
中指定顺序。只需添加行:
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
如果结果相同,请使用:
GraphicsDevice.RasterizerState = RasterizerState.CullClockwise;
我想在屏幕上绘制一些调试信息,但这会导致渲染模型出现问题。我在互联网上找到了一些解决方案,但它不起作用。也许我太笨了,但我不知道出了什么问题。 这是绘制方法:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.DarkCyan);
spriteBatch.Begin();
player.Draw(dt);
spriteBatch.DrawString(gamefont, "render Time :" + gameTime.ElapsedGameTime.TotalSeconds, new Vector2(0, 85), Color.White);
spriteBatch.End();
effect.View = player.view;
effect.Projection = player.projection;
effect.Texture = dirtTexture;
GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
foreach (EffectPass p in effect.CurrentTechnique.Passes)
{
p.Apply();
effect.World = player.world;
GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, buffer.VertexCount / 3);
}
base.Draw(gameTime);
}
Here how it look like
三角形法线(正面)被向后绘制。这是由顶点缓冲区中的顶点顺序定义的。
幸运的是,我们可以在GraphicsDevice
中指定顺序。只需添加行:
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
如果结果相同,请使用:
GraphicsDevice.RasterizerState = RasterizerState.CullClockwise;