0

3D 地形といくつかの 2D GUI オブジェクトを上に置いた非常に単純な XNA ゲームをセットアップしようとしています。現在アクティブな数少ない 2D GUI の 1 つと思われる Nuclex を選択しました。

私の問題: ゲームに Nuclex の「スクリーン」クラスを追加すると、3D 地形とその上に描画された線が台無しになります -- 3D オブジェクトの 3 つのレイヤーがあります: 地形、地形のワイヤーフレームの輪郭、およびいくつかの「ルート」です。 」 地形を包み込みます。画面が追加されると、部分的に地形に沈んでいるルートが完全に地形の上に表示され、ワイヤフレーム グリッドがより太く表示されます。

これは、Nuclex GuiManager ページのサンプルに従って作成された、私の Game.Initialize メソッドの末尾です。

    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();

それで、私が間違っていることについてのアイデアはありますか?

ありがとう!

4

1 に答える 1

0

そうです、レンダー ステートの方向性を教えてくれた catflier のおかげで、問題を解決できました。XNA4 では、GraphicsDevice オブジェクトでいくつかの状態フラグを直接許可するだけです。* 問題は、Nuclex が密かに GraphicsDevice.DepthStencilState を設定し、使用後に以前の値に戻すのではなくそのままにしておくことです (いたずら!!)。* したがって、解決策は、Draw メソッドの先頭に、次のような行を追加することです。

GraphicsDevice.DepthStencilState = DepthStencilState.Default;
于 2012-09-29T12:25:36.650 に答える