2011-09-28 4 views
3

XNA에서 올바른 순서로 3D 모델을 그리는 데 문제가 있습니다. 이 보이도록 공을 아래로하고 곧 지형을 교차으로 이동 http://imgur.com/wGPIkl&L5AY1XNA의 3D 모델 순서 지정

은 관점이 변화하고 있습니다 :

PIC1 : http://imgur.com/wGPIk&L5AY1l PIC2

는 여기에 문제를 설명하는 두 개의 이미지입니다 마치 공이 지형 뒤에있는 것처럼.

내가 그림의 순서를 변경하는 경우, 그것은 공 모양을가

누군가는이 문제를 해결하는 방법을 설명시겠습니까 .. 지형의 모든 시간의 상단에? 사전

답변

10

문제에

덕분에 모서리에 FPS 카운터를 그리는의 SpriteBatch 호출이다.

그래픽 장치의 상태가 변경됩니다. 2D 오브젝트 (이 경우 왼쪽 상단 모서리의 프레임 속도 카운터)를 그릴 때마다 장치 상태를 복원해야합니다.

SpriteBatch.End()를 호출 한 후,이 코드를 추가 device는 당신이 그리고있는 현재 GraphicsDevice에 대한 참조입니다

device.DepthStencilState = DepthStencilState.Default; 

.

+1

그건 완전히 트릭을했습니다 :) 정말 고마워요! – dsk

+0

@ dsk 나는 며칠 동안 같은 문제를 잠시 뒤로 보냈다. 내 대답을 받아 들일 수 있니? 나는 포인트를 좋아한다! –

+0

나는 받아들이 기 위해 4 분을 기다려야했다;) – dsk

1

이것은 Z 버퍼 문제와 같습니다. Zbuffer가 활성화되어 작동하는지 확인 했습니까? David Lively가 말한 것을 시도해보십시오. 그게 효과가 있다면, 당신은 SpriteBatch 클래스의 Begin and End 호출에서 3D 모델을 그리지 않았는지 확인하십시오. Begin은 2D 객체를 그리기위한 장치를 준비합니다. 3D 도면을 호출하려고하면이 기능이 작동하지 않습니다. End는 2D로 설정된 모든 것이 설정되지 않았으며 Begin 호출 이전의 상태로 되돌아갑니다.

+0

처음이 문제가 발생했을 때 z 버퍼 문제라고 생각했습니다. (그리고, 기술적으로, 그것은 그렇습니다). +1하지만 SpriteBatch는 전체 그래픽 상태를 복원하지 않습니다. 그 힘과 편리함의 절충안 중 하나입니다. –