2009-10-09 6 views
1

저는 3D 그래픽과 xna 및 csharp를 배우는 초보자입니다.xna : 3d 오브젝트 뒤에 2 차원 스프라이트가 표시됩니다.

저는 2 차원 배경 앞에 그려야하는 3d 객체가 있습니다. 3d 객체는 간단합니다. 단지 선입니다. 나는 2 차원의 VertexPositionColor []에서 만들었다.

그리고 PrimitiveType.LineStrip으로 그립니다.

또한 Spritebatch.draw로 표시되는 Texture2D가 있습니다.

무슨 일이 일어나고있는 줄은 배경 뒤쪽에 표시되어 모든 줄을 볼 수 없습니다.

하지만 내가 spritebatch.draw에 댓글을 달았다면 거기에 줄을 볼 수 있습니다.

도와주세요 ..

답변

2

거기에 z- 버퍼 문제가 있습니다. 어떤 순서로 2D 및 3D 드로잉을하고 있습니까? 2D가 먼저 나와야합니다. 또한 SpriteBatch 및 3D 작업을 혼합 할 때 how to make render states work을 확인해야합니다.

+0

나는 그렇게 생각했다. 내가 코드를 적용했을 때 여전히 아무것도 영향을 미치지 않았다. – r4ccoon

1

나는 그것을 고칠 수 있었다. 모든 3D 그리기 방법은 spritebatch.begin 다음에 끝나야합니다. 내가 spritebatch.begin 후 effect.begin 및 pass.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

좋습니다. 네, 이상 해요. 아마도 스프라이트 배치 상태를 렌더링 상태로 저장하면 렌더링 상태를 다시 설정하는 것과 같은 효과가 있습니다 ... –

관련 문제