2011-03-10 4 views
1

안녕하세요 쉐이더를 통해 텍스처를 렌더링하는 데 문제가 있습니다. 왜 그런지 모르겠지만 셰이더 파일은 단순한 phong 조명을 구현하고 간단한 쿼드에서는 텍스처를 보간합니다. 그러나 텍스처와 텍스처가없는 것처럼 조명과 재질 색을 모두 얻습니다. (텍스처는 스톤 텍스처입니다. (PS : WHITE = D3DXCOLOR (1.0F, 1.0F, 1.0F하지만 난 점점 오전 모든 화이트 색상) 여기Direct3D의 텍스처 매핑 문제

다음과 같이

//------------------------------------ 
uniform extern float4x4 matWVP; 
uniform extern float4x4 matITW; 
uniform extern float4x4 matW; 
uniform extern float4 DiffMatr; 
uniform extern float4 DiffLight; 
uniform extern float4 AmbLight; 
uniform extern float4 SpecLight; 
uniform extern float4 AmbMatr; 
uniform extern float3 LightPosW; 
uniform extern float4 SpecMatr; 
uniform extern float SpecPower; 
uniform extern float3 EyePos; 
uniform extern texture Tex; 


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

sampler sTex = sampler_state 
{ 
    Texture = <Tex>; 
    Minfilter = LINEAR; 
    Magfilter = LINEAR; 
    Mipfilter = POINT; 
    AddressU = WRAP; 
    AddressV = WRAP; 
}; 

struct vOut { 
    float4 posH : POSITION0; 
    float3 posW : TEXCOORD0; 
    float3 normW: TEXCOORD1; 
    float2 cTex : TEXCOORD2; 
}; 

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

    V.posH = mul(float4(posL, 1.0f), matWVP); 
    V.posW = mul(float4(posL, 1.0f), matW).xyz; 

    V.normW = mul(float4(normL, 1.0f), matITW).xyz; 
    V.normW = normalize(V.normW); 

    V.cTex = V.cTex; 
    return V; 

} 

float4 PS_Def(float3 posW : TEXCOORD0 
    ,float4 normW : TEXCOORD1 
    ,float2 cTex : TEXCOORD2): COLOR 
{ 
    float3 LightVec = LightPosW - posW; 
    LightVec = normalize(LightVec); 

    float3 RefLightVec = reflect(-LightVec, normW); 

    float3 EyeVec = EyePos - posW; 
    EyeVec = normalize(EyePos - posW); 

    float d = max(0.0f, dot(normW, LightVec)); 
    float s = pow(max(dot(RefLightVec, EyeVec), 0.0f), SpecPower); 

    float3 Diff = d * (DiffMatr * DiffLight).rgb; 
    float3 Amb =  (AmbMatr * AmbLight).rgb; 
    float3 Spec = s * (SpecMatr * SpecLight).rgb; 

    float3 TexColor = tex2D(sTex, cTex.xy).rgb; 
    float3 color = Diff + Amb; 

    return float4(color * TexColor + Spec, DiffMatr.a);; 
} 


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

    } 
} 

조명 및 재질 색상은 쉐이더 파일입니다 , 1.0f))

확산 재료 = 백색; 주변 재질 = 흰색; 경면 재질 = 흰색 * 0.5f;

확산 조명 = 흰색 * 0.8f; 주변 조명 = 흰색 * 0.8f; 경면 조명 = 흰색 * 0.5f; Specular Power = 48.0f; 정점 셰이더에서

도움을 감사합니다, 여러분

답변

1

당신은 내가 하늘의 질감을 전달했다, 내가이 일을 잊고, 아니이

V.cTex = cTex; 
+0

이놈이어야한다

V.cTex = V.cTex; 

이 이 모든 시간. 감사 – DBoxer