2012-08-03 6 views
1

현재 주변 조명 인 Directx 11의 조명에 문제가 있습니다.C++ Directx 11 Ambient Lighting

ambLight.LightVector = D3DXVECTOR4(1.0f, 1.0f, 1.0f, 0.0f); 
ambLight.LightColor = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f); 
ambLight.AmbientColor = D3DXCOLOR(0.2f, 0.2f, 0.2f, 1.0f); 

ShaderManager.UpdateSubresourceDiffuseShader(devcon); 

을 그리고 난 다음 얻을 :

cbuffer ConstantBuffer 
{ 
    float4x4 final; 
    float4x4 rotation; // the rotation matrix 
    float4 lightvec;  // the light's vector 
    float4 lightcol;  // the light's color 
    float4 ambientcol; // the ambient light's color 
} 

struct VOut 
{ 
    float4 color : COLOR; 
    float4 position : SV_POSITION; 
}; 

VOut VShader(float4 position : POSITION, float4 normal : NORMAL) 
{ 
    VOut output; 

    output.position = mul(final, position); 

    // set the ambient light 
    output.color = ambientcol; 

    // calculate the diffuse light and add it to the ambient light 
    float4 norm = normalize(mul(rotation, normal)); 
    float diffusebrightness = saturate(dot(norm, lightvec)); 
    output.color += lightcol * diffusebrightness; 

    return output; 
} 

float4 PShader(float4 color : COLOR) : SV_TARGET 
{ 
    return color; 
} 

그런 다음 내가 쉐이더에 값을 보내 a busy cat http://i49.tinypic.com/2j105fs.png

왜 여기 코드는?

답변

0

쉐이더를 사용해 보았는데 작동하는 것처럼 보였으므로 일부 변수가 올바르게 전달되지 않을 수 있습니다. 당신이 체크 값이 제대로 전달 배가 할 수 있도록 시작으로

output.color = lightvec; 

output.color = lightcol; 

: 당신이 시도 할 수

직접 컬러 출력에 하나의 변수 이름을 설정합니다.