XNA странная 3D живопись при рисовании текста - PullRequest
4 голосов
/ 15 ноября 2010

Я работаю над игрой 3D Spaceship с XNA 3.1

Я пытался отделить свой код рисования от логики игры (хотя XNA делает это почти).

Я используюспециальный статический класс, который рисует мои модели на экране ... основной класс Game использует этот код при рисовании:

protected override void Draw(GameTime gameTime)
    {
        graphics.GraphicsDevice.Clear(Color.Black);

        // Draws the stage (the skybox and objects like rocks)
        stageManager.Draw(gameTime, GraphicsDevice, camera);


        // Draws each player and each Enemy on stage given the camera
        foreach (Player p in players)
            p.Draw(camera);

        foreach(Enemy e in enemies)
            e.Draw(camera);

        if(Configuration.Debug)
            col.renderColBoundings(GraphicsDevice, camera);

        GraphicHelper.drawOverlayText("50", "10"); // "Error" line...

        base.Draw(gameTime);
    }

Но когда я рисую текст, происходит что-то странное ... Вот изображение ( оригинал ):

1 Ответ

8 голосов
/ 15 ноября 2010

Странный рендеринг, который вы видите, заключается в том, что буфер глубины отключен. Он отключается при использовании SpriteBatch. Это известная странность API XNA 3.1. По крайней мере, XNA 4.0 делает это более очевидным.

Вот объяснение того, какие состояния визуализации изменяются SpriteBatch в XNA 3.1 И здесь то же самое для XNA 4.0 .

Решение состоит в том, чтобы после использования SpriteBatch вернуть состояния рендеринга обратно в желаемое состояние. В этом случае, по крайней мере, установите:

GraphicsDevice.RenderState.DepthBufferEnable = true;

(Там также могут быть некоторые другие состояния, которые вы хотите изменить обратно.)

...