2011-03-11 3 views
3

안녕 얘들 아 내 데모에서 일부 지형에 멀티 텍스처링과 안개를 구현하려고하지만 분명히 텍스처가 표시되지 않기 때문에 어딘가에 잘못 될 것입니다. 유일한 것 렌더링되는 것은 지형의 안개 색상입니다.HLSL 멀티 텍스처링 Direct3D에서 안개 문제

무엇이든지 텍스처링의 흔적은 여기에 FX 파일입니다 : 당신이 볼 수

//------------------------------------ 
//Stuff for the Terrain 
uniform extern float4x4 MatVP; 
uniform extern float3 SunPos; 
uniform extern texture Tex0; 
uniform extern texture Tex1; 
uniform extern texture Tex2; 
uniform extern texture TexGS; 
uniform extern float3 EyePos; 


//------------------------------------ 

sampler sTex0 = sampler_state 
{ 
    Texture = <Tex0>; 
    MagFilter = LINEAR; 
    MinFilter = ANISOTROPIC; 
    MaxAnisotropy = 8; 
    MipFilter = LINEAR; 
    AddressU = WRAP; 
    AddressV = WRAP; 
}; 

sampler sTex1 = sampler_state 
{ 
    Texture = <Tex1>; 
    MagFilter = LINEAR; 
    MinFilter = ANISOTROPIC; 
    MaxAnisotropy = 8; 
    MipFilter = LINEAR; 
    AddressU = WRAP; 
    AddressV = WRAP; 
}; 
sampler sTex2 = sampler_state 
{ 
    Texture = <Tex2>; 
    MagFilter = LINEAR; 
    MinFilter = ANISOTROPIC; 
    MaxAnisotropy = 8; 
    MipFilter = LINEAR; 
    AddressU = WRAP; 
    AddressV = WRAP; 
}; 
sampler sTexGS = sampler_state 
{ 
    Texture = <TexGS>; 
    MinFilter = LINEAR; 
    Magfilter = LINEAR; 
    Mipfilter = POINT; 
    AddressU = WRAP; 
    AddressV = WRAP; 
}; 

const float3 FogColor = {0.5f, 0.5f, 0.5f}; 
const float FogStart = 10.0f; 
const float FogRange = 200.0f; 

struct vOut { 
    float4 PosH   : POSITION0; 
    float2 cTexTiled : TEXCOORD0; 
    float2 cTexNonTiled : TEXCOORD1; 
    float shade   : TEXCOORD2; 
    float FogSaturate : TEXCOORD3; 
}; 

//------------------------------------ 
vOut VS_Def(float3 PosW : POSITION0 
, float3 NormW : NORMAL0 
, float2 cTex : TEXCOORD0) 
{ 
    vOut V = (vOut)0; 

    V.PosH = mul(float4(PosW, 1.0f), MatVP); 

    float3 SunVec = normalize(SunPos - EyePos); 
    V.shade = saturate(max(0.0f, dot(NormW, SunVec)) + 0.25f); 

    float Dist = distance(PosW, EyePos); 
    V.FogSaturate = saturate((Dist - FogStart)/FogRange); 

    V.cTexTiled = cTex * 16.0f; 
    V.cTexNonTiled = cTex; 
    return V; 
} 

float4 PS_Def(float2 cTexTiled : TEXCOORD0 
, float2 cTexNonTiled : TEXCOORD1 
, float shade : TEXCOORD2 
, float FogSaturate : TEXCOORD3): COLOR 
{ 
    float3 Tex0 = tex2D(sTex0, cTexTiled).rgb; 
    float3 Tex1 = tex2D(sTex1, cTexTiled).rgb; 
    float3 Tex2 = tex2D(sTex2, cTexTiled).rgb; 
    float3 TexGS= tex2D(sTexGS,cTexNonTiled).rgb; 

    float inv = 1/(TexGS.r + TexGS.g + TexGS.b); 
    Tex0 *= TexGS.r * inv; 
    Tex1 *= TexGS.g * inv; 
    Tex2 *= TexGS.b * inv; 
    float3 TexColor = (Tex0 + Tex1 + Tex2) * shade; 
    float3 FinalColor = lerp(TexColor, FogColor, FogSaturate); 

    return float4(FinalColor, 1.0f); 
} 


//----------------------------------- 
technique DefTech 
{ 
    pass p0 
    {   
     VertexShader = compile vs_2_0 VS_Def(); 
     PixelShader = compile ps_2_0 PS_Def(); 

    } 
} 

, 안개 색상은 회색, 그리고 내가 무엇입니까 전부입니다. 그것은 매우 우울합니다! FogSaturate이 너무 높은, 또는 다른 말로 것을

답변

1

내 생각 엔이 될 것이다 도움에 대한

덕분에, FogRange이 너무 낮습니다, 그래서 LERP 호출은 항상 FogColor를 반환합니다. FogRange를 높게 설정하고 도움이되는지 확인하십시오.

로버트 내가 matVP 같은데요

1

이 (뷰 매트릭스)입니다 * (당신의 투영 행렬) 제대로 지형의 위치를지도하는 세계,보기 및 프로젝션 매트릭스가 필요합니다 그러나. (즉, 지금 당장 당신의 지형을 그리는 위치가 완전히 잘못되었습니다. 그래서 당신은 아무것도 볼 수 없습니다.)

한번에 통과는 :

pEffect->SetMatrix("MatVP", &(matW*matV*matP)); 

이 작동합니다.