2012-04-05 2 views
2

잠시 동안은 깨닫지 못했지만 깊이 맵이 엉망입니다. 흑백 픽셀 = 가까운 클리핑면, 흰색 픽셀 = 원거리 클리핑면 - 기본적으로 바닥에서 100x1x100 정사각형으로 걷고 INTO로 들어가면 (99, 0 및 99 좌표에 도달 함) 전체 깊이 맵이 바뀝니다. 화이트. 이는 각 픽셀이 원거리 클리핑 평면에 있음을 나타내며, 원하지 않습니다.C#/XNA/HLSL - 깊이 맵이 엉망이 됨

GraphicsDevice.Clear(Color.White); 
effect.MainEffect.CurrentTechnique = effect.MainEffect.Techniques["DepthProcess"]; 
GraphicsDevice.SetVertexBuffer(line); 
effect.MainEffect.CurrentTechnique.Passes[0].Apply(); 
GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); 

그리고 HLSL 코드 (정점 셰이더, 픽셀 셰이더) : example

이 는 깊이 맵 렌더링 처리 코드

DVOut DVShader(VIn _in) 
{ 
    DVOut o; 
    o.position = mul(_in.position, WorldViewProjection); 
    float a = o.position.z/o.position.w; 
    o.color = float4(a,a,a,1); 
    return o; 
} 

float4 DPShader(DVOut _in) : COLOR 
{ 
    return _in.color; 
} 

technique DepthProcess 
{ 
    pass Pass0 
    { 
     ZEnable = TRUE; 
     ZWriteEnable = TRUE; 
     AlphaBlendEnable = FALSE; 
     VertexShader = compile vs_2_0 DVShader(); 
     PixelShader = compile ps_2_0 DPShader(); 
    } 
} 

이 때문에이되는 1/0 오류? 또는 행렬 곱셈에 문제가 있습니까? 아니면 승/전자?

답변

0

해결되었습니다. 여하튼, 곱셈은 W 구성 요소를 매우 작은 값으로 설정합니다.

균질 분할 대신 10을 나눈 값으로 허용되는 결과를 얻었다.

관련 문제