2013-03-14 1 views
2

나는 내 xna 게임에서 안개 효과를 추가하기 위해 얼마간 고생했다. 파일 (.Fx)에서 사용자 정의 셰이더 효과로 작업합니다. "PixelShaderFunction"은 오류없이 작동합니다. 그러나 문제는 내 모든 땅이 동일한 방법으로 색칠되어 있다는 것입니다.. 카메라와 모델 사이의 거리가 인 계산에서 오는 문제라고 생각합니다. 당신의 input.TextureCoordinate 정말 질감 당신이 거리를 잘못 계산하기 위해 시도하는 방법보다, 샘플러 좌표를 나타내는 경우xna에서 안개 효과 모델의 거리를 계산하는 방법은 무엇입니까?

float distance = length(input.TextureCoordinate - cameraPos); 

여기에 "PixelShaderFunction"

// Both techniques share this same pixel shader. 
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0 
{ 
     float distance = length(input.TextureCoordinate - cameraPos); 
     float l = saturate((distance-fogNear)/(fogFar-fogNear)); 
     return tex2D(Sampler, input.TextureCoordinate) * lerp(input.Color, fogColor, l); 
} 

답변

0

내 전체 코드입니다.

float distance = distance(cameraPos, input.Position3D); 
float l = saturate((distance-fogNear)/(fogFar-fogNear)); 
return lerp(tex2D(Sampler, input.TextureCoordinate), fogColor, l); 

이 VertexShaderOutput 선언에 다음을 추가합니다 :

당신은 다음과 같이 PixelShaderFunction의 몸을 변경할 수 있습니다 버텍스 쉐이더에서

float4 Position3D : TEXCOORD1; 

에 곱한 정점의 위치에 Position3D을 채울 세계 행렬 :

output.Position3D = mul(input.pos, matWorld); 
+0

대단히 감사합니다. 귀하의 예는 제 문제에 완벽하게 부합합니다. –

관련 문제