我正在尝试设置一个非常简单的XNA游戏,其中包含三维地形和顶部的一些2d GUI对象。我选择了Nuclex,因为它似乎是目前活跃的为数不多的2d GUI之一。
我的问题:在我的游戏中添加一个Nuclex“屏幕”类导致三维地形和顶部绘制的线条搞砸了 - 我有三层三维物体:地形,地形的线框轮廓和一些拥抱地形的“路线”。添加屏幕后,部分淹没在地形中的路径完全显示在地形之上,线框网格显得更粗。
这是我的Game.Initialize方法的尾端,如通过Nuclex GuiManager页面上的示例所做的那样:
InputManager im = new InputManager();
IGraphicsDeviceService igds = Nuclex.Graphics.GraphicsDeviceServiceHelper.MakeDummyGraphicsDeviceService(GraphicsDevice);
gui = new GuiManager(igds, im);
gui.Initialize();
Viewport vp = GraphicsDevice.Viewport;
Screen main_screen = new Screen(vp.Width, vp.Height);
//main_screen.
this.gui.Screen = main_screen;
main_screen.Desktop.Bounds = new UniRectangle(
new UniScalar(0.1f, 0.0f), new UniScalar(0.1f, 0.0f), // x and y
new UniScalar(0.8f, 0.0f), new UniScalar(0.8f, 0.0f) // width and height
);
LabelControl text = new LabelControl("hello");
text.Bounds = new UniRectangle(10, 10, 200, 30);
main_screen.Desktop.Children.Add(text);
Components.Add(gui);
base.Initialize();
那么,关于我做错了什么的想法?
谢谢!
答案 0 :(得分:0)
是的,所以感谢catflier指出我处于渲染状态的方向,我解决了这个问题: *首先,“RenderState”是XNA3术语; XNA4只是直接在GraphicsDevice对象上允许一些状态标志。 *问题是Nuclex秘密设置了GraphicsDevice.DepthStencilState并将其保留,而不是在使用后将其恢复到之前的值(淘气!!)。 *因此,在Draw方法的顶部,解决方案是添加如下所示的行:
GraphicsDevice.DepthStencilState = DepthStencilState.Default;