我目前在Directx 11的照明方面遇到了问题,实际上是它的环境照明。代码如下:
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;
}然后我将这些值发送到着色器:
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);然后,我得到了以下内容:

为什么?
发布于 2012-09-25 22:58:28
我试过你的着色器,似乎可以工作,所以可能有一些变量没有正确传递。
您可以尝试直接将一个变量名设置为颜色输出:
output.color = lightvec;和
output.color = lightcol;作为开始,因此您可以仔细检查值是否正确传递。
https://stackoverflow.com/questions/11797106
复制相似问题