c# - 如何在不使用 XNA 中的 SpriteBatch 的情况下绘制纹理?

标签 c# xna

所以我正在做一个项目,我有一个基于 3d 立方体的世界。我让所有这些都起作用了,我开始了用户界面,当我开始使用 spritebatch 绘制我拥有的光标纹理时,我发现 XNA 没有正确地分层所有模型,一些模型距离较远的将首先绘制,而不是在模型后面。当我取出所有 spritebatch 代码时,就是这样:

        spriteBatch.Begin();
        cursor.draw(spriteBatch);
        spriteBatch.End();

我发现问题马上就解决了。游标是一个对象,绘制方法只是使用spriteBatch.draw();

在我看来,有两种解决方案,我可以找到一种不使用 SpriteBatch 来绘制光标和其他界面的方法,或者 spriteBatch.Begin 中可能有一个参数() 我可以插入来解决问题吗?我不确定该怎么做,还有其他人遇到过这个问题并且知道如何解决吗?

提前致谢。

最佳答案

这没有回答问题!

我不确定您是否可以(或应该)在没有 spritebatch 的情况下绘制 2D,但是在使用 2D spritebatch 和 solution on solution I've found on GameDev 时,我在 3D 模型渲染方面遇到了同样的问题。帮我解决了这个问题:

Your device states are probably wrong. This often happens when mixing 2D and 3D (for example the overload for SpriteBatch.Begin() which takes no arguments sets some device states that are incompatible with 3D rendering. No worries though, all you have to do is to make sure that the following device states are set the way you want them:

GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;

基本上,您首先调用 SpriteBatch 方法进行 2D 绘制,然后调用上述代码(应确保正确的 3D 渲染),然后绘制您的 3D 模型。事实上,我只使用了前两行 - BlendStateDepthStencilState 并且它按预期工作。

关于c# - 如何在不使用 XNA 中的 SpriteBatch 的情况下绘制纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13035694/

相关文章:

C#/XNA - 二维碰撞引擎故障?

c# - 在运行时添加图像

c# - 客户日期开始时间

c# - dropdownlist SelectedIndexChanged 在按钮单击时触发(如果它们具有相同的值)

c# - 使用 A* 并仍然避免碰撞?

Xbox 上提供 C# Marshal 类吗?

c# - 尝试理解模板(XNA 4.0、Windows Phone 7)

c# - 先知断言失败

c# - 向 ASP.Net ReportViewer 添加额外的 userId 参数

c# - 如何在不使用关键字的情况下使用枚举实例化对象时编写更清晰的代码?