2015-09-11 8 views
1

Когда я попытался добавить текст в свою программу MonoGame, у меня возникла проблема. Он прекратил рендеринг 3D-объектов должным образом, обрезая передние грани на некоторых, не отображая других вообще.Почему реализация текста оказывает негативное влияние на 3D-модели в Visual Studio XNA?

Я попытался положить конец партии после составления модели тоже, к тому же эффекту

public override void Draw(GameTime gameTime) 
    { 
     spriteBatch.Begin(); 
     string output = "Score"; 

     spriteBatch.DrawString(spriteFont, output, Vector2.Zero, Color.LightGreen, 
      0, Vector2.Zero, 1.0f, SpriteEffects.None, 0.5f); 

     spriteBatch.End(); 
     foreach (BasicModel model in models) 
     { 
      model.Draw(((Game1)Game).GraphicsDevice, ((Game1)Game).mainCamera); 
     } 
     base.Draw(gameTime); 
    } 

Почему моя реализация текста прищурив свои 3D модели?

+1

Последним параметром в 'DrawString()' метод является глубиной. '0,5f' означает, что вы делаете это прямо посередине между ближайшей планетой и планетой. Может быть, ваш визуализированный текст просто пересекает ваши объекты в сцене? Попробуйте значение «0.0f» только для проверки и проверки, если результат изменится. – LInsoDeTeh

+0

Попытка. нет успеха. Thx для предложения, я упустил это. – Corpserule

ответ

2

SpriteBatch.Begin() изменяет некоторые графические состояния визуализации конвейера таким образом, который лучше всего подходит для рендеринга 2D, но не для 3D-рендеринга.

Итак, после рендеринга 2d вам необходимо сбросить эти состояния для 3D-рендеринга.

GraphicsDevice.BlendState = BlendState.Opaque; 
GraphicsDevice.DepthStencilState = DepthStencilState.Default; 

Теперь ваш 3D нарисует штраф. See this link for more info.

Добавить эти 2 линии между spriteBatch.End() и вашим foreach()