MonoGame: проблема с рендерингом 3d модели и spritebatch - PullRequest
0 голосов
/ 29 июня 2019

Я хочу нарисовать некоторую отладочную информацию на экране, но это вызывает проблему с моделью рендеринга. Я нашел некоторые решения в интернете, но они не работают. Может быть, я слишком глуп, но я не знаю, что случилось. Вот метод Draw:

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

        spriteBatch.Begin();
        player.Draw(dt);
        spriteBatch.DrawString(gamefont, "render Time :" + gameTime.ElapsedGameTime.TotalSeconds, new Vector2(0, 85), Color.White);
        spriteBatch.End();

        effect.View = player.view;
        effect.Projection = player.projection;
        effect.Texture = dirtTexture;

        GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
        GraphicsDevice.BlendState = BlendState.Opaque;
        GraphicsDevice.DepthStencilState = DepthStencilState.Default;

        foreach (EffectPass p in effect.CurrentTechnique.Passes)
        {
            p.Apply();
            effect.World = player.world;
            GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, buffer.VertexCount / 3);
        }



        base.Draw(gameTime);
    }

Вот как это выглядит

1 Ответ

0 голосов
/ 02 июля 2019

Нормы треугольников (передняя грань) отрисовываются задом наперед.Это определяется порядком вершин в вершинном буфере.

К счастью, мы можем указать порядок в GraphicsDevice.Просто добавьте строку:

GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;

Если это дает тот же результат, используйте:

GraphicsDevice.RasterizerState = RasterizerState.CullClockwise;
...