XNA:向GuiManager.screen添加Nuclex屏幕会破坏3d渲染

时间:2012-09-28 16:57:06

标签: c# xna xna-4.0

我正在尝试设置一个非常简单的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();

那么,关于我做错了什么的想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

是的,所以感谢catflier指出我处于渲染状态的方向,我解决了这个问题: *首先,“RenderState”是XNA3术语; XNA4只是直接在GraphicsDevice对象上允许一些状态标志。 *问题是Nuclex秘密设置了GraphicsDevice.DepthStencilState并将其保留,而不是在使用后将其恢复到之前的值(淘气!!)。 *因此,在Draw方法的顶部,解决方案是添加如下所示的行:

GraphicsDevice.DepthStencilState = DepthStencilState.Default;