2012-02-28 3 views
0

장면의 깊이 맵을 그려 가고 있습니다. 이제 HLSL 파일을 다음과 같은 파일로 만들었습니다. http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Shadow_map.php 모든 것이 잘되었습니다. 하나! 각 픽셀의 정확한 값을 알고 싶으므로 일반 렌더 타겟에서 그리는 대신 Texture2D 인 http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Render_to_texture.php 인 새 렌더 타겟을 만든 다음 스프라이트 배치를 사용하여 그립니다.XNA 심도 맵 겹침 영역 색상

다음!

Correct Depth Image

및 스프라이트를 사용하여 화면에 후 텍스처 그리는 사람이 제공 : I가 화상을 표시 할 때, 즉 첫째, 화면에 직접 묘화 하나는이 출력을 제공한다 : 두 번째 캡처에 몸 뒤에 분명히 몸의 오른쪽 팔, 몸이 겹치는 영역에 존재하지 않는 것처럼 그려지는 Sprite drawn Image

알 수 있습니다.

내가 생각하기에, 정점의 정점이 텍스처에 먼저 그려지며, 먼 거리의 것들은 관찰 된 이미지를 생성하는 더 가까운 것들을 덮어 씁니다.

나는 어떤 의견을 부탁드립니다.

답변

2

SpriteBatchmodifies the graphics device state 사용할 때. 링크 된 기사에서, 여기가 설정 한 것입니다 :

GraphicsDevice.BlendState = BlendState.AlphaBlend; 
GraphicsDevice.DepthStencilState = DepthStencilState.None; 
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise; 
GraphicsDevice.SamplerStates[0] = SamplerState.LinearClamp; 

당신은 아마 다시 기본값으로 깊이 스텐실 상태를 설정 (읽기 깊이 및 쓰기) 할.

GraphicsDevice.DepthStencilState = DepthStencilState.Default; 

렌더링에 필요한 항목에 따라 일부 상태를 설정해야 할 수도 있습니다.

+1

+1 : 완전히 동의합니다. 이 상황에서 나는 보통 SpriteBatch.Begin() 호출 전에 중단 점을 놓고'DepthStencilState','BlendState' 및'RasterizerState'를 확인한 다음'SpriteBatch.End()'호출 후에 모두 중단 점을 재설정합니다. –

+0

은 매력처럼 작동합니다. –