2009-10-09 3 views
1

Я новичок в 3D-графике и изучаю xna и csharp.xna: display 2d спрайты за 3d объектом

У меня есть 3d-объект, который я хочу нарисовать перед 2-м фоном, 3D-объект прост, это просто линия. Я сделал это из 2-мерного VertexPositionColor [].

, а затем я нарисовал его с помощью PrimitiveType.LineStrip.

а также у меня есть Texture2D, который я отобразил с помощью Spritebatch.draw.

Что происходит, линия отображается в задней части фона, поэтому я не вижу никакой линии.

, но если бы я прокомментировал spritebatch.draw, я вижу линию там.

, пожалуйста, помогите ..

ответ

2

У вас проблема с z-буфером. В каком порядке вы делаете 2D и 3D-чертежи? 2D должен прийти первым, я бы предположил. Кроме того, вы должны проверить how to make render states work при смешивании операций SpriteBatch и 3D.

+0

Я тоже думал об этом. когда я применил код, все равно он ничего не повлиял – r4ccoon

1

Мне удалось исправить это. весь метод 3D-рисования должен быть после spritebatch.begin и end.

, что я сделал, было положить effect.begin и pass.begin после spritebatch.begin и конец

вот код для метода вытягивания на Game1.cs (имя файла по умолчанию при использовании мастера)

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

     spriteBatch.Begin();    
     GameEngine.Draw(GameEngine,gameTime); 
     spriteBatch.End(); 

     //resetRenderState3D(); 
     GameEngine.Draw3D(GameEngine, gameTime); 

     base.Draw(gameTime); 
    } 
+1

Так что вы в основном говорите, что мой ответ был прав ...? ;) –

+0

Да, это было правильно. лол. но после некоторого изменения кода мне пришлось применить (раскомментировать resetRenderState3D) состояние сброса повторно. странный .. но он сработал. – r4ccoon

+0

Хорошо. Да, странно. Возможно, разрешение на сохранение экземпляра спрайта будет иметь тот же эффект, что и сброс состояния рендеринга ... –

Смежные вопросы