2012-07-17 2 views
0

쉐이더를 배우려고하고 죽은 단순한 방향성 광원을 얻으려고하지만 나는 단지 검은 색으로 변합니다. 내가 input.Col을 반환하면 모두 정상이므로이 정상적인 계산과 관련이 있다는 것을 알고 있지만 무엇이 잘못 됐는지 전혀 알지 못합니까? 셰이더와 매트 월드를 가져 오거나 설정해야하는 위치를 이해하는 데 어려움을 겪고 있습니다. (꼭 정체성 매트릭스로 설정하려고했습니다.) 아니면 마술처럼 혼자서 설정해야하는 부분인지 이해해야합니다. worldViewProj 나는directx 쉐이더에서 방향성 조명 설정

1) 첫째 픽셀 쉐이더는 빛과 삼각형에서 법선 벡터의 선형 보간을 수행합니다 ... 그럼 당신은 문제의 커플이 코드

float4 vecLightDir = normalize(float4(1.0f, 1.0f, 1.0f,0.0f)); 
float4x4 worldViewProj : WORLDVIEWPROJECTION; 
float4x4 matWorld : WORLD; 

struct VS_IN 
{ 
    float4 Pos : POSITION; 
    float4 Col : COLOR0; 
    float3 Norm : NORMAL; 
}; 

struct PS_IN 
{ 
    float4 Pos : POSITION; 
    float4 Col : COLOR0; 
    float3 Light: TEXCOORD0; 
    float3 Norm : TEXCOORD1; 
}; 

PS_IN VS(VS_IN input) 
{ 
    PS_IN Out = (PS_IN)0; 
    Out.Pos = mul(input.Pos, worldViewProj); 
    Out.Light = normalize(vecLightDir); 
    Out.Norm = -normalize(mul(input.Norm, matWorld)); 
    Out.Col = input.Col; 
    return Out; 
} 

float4 PS(PS_IN input) : COLOR 
{ 
    float4 result=input.Col *(dot(input.Norm,input.Light)); 

    return result; 
} 

technique TVertexAndPixelShader 
{ 
    pass P0 
    { 
     // shaders 
     VertexShader = compile vs_2_0 VS(); 
     PixelShader = compile ps_2_0 PS(); 
    } 
} 

답변

0

에서 설정하고있다. 즉, 라이트 쉐이더에 도달하면 벡터가 더 이상 정규화되지 않습니다.

2) 왜 빛 벡터를 꼭지점 구성 요소의 꼭지점 셰이더를 통과 시키나요? 왜 그것을 픽셀 쉐이더에 상수로 보내고 보간 문제를 우회하지 않습니까?