HLSL float4加上返回所有的0.0f向量,意外的结果

编辑:添加图片在底部显示当前的问题。

我在我的hlsl像素着色器中有以下几行,其中颜色和高光都是float4。

color = color * textureColor; // Add specular component and clamp color = saturate(color + specular); 

运行VS2013graphicsdebugging器和debugging到像素着色器我看到镜面通过(0.0f,0.0f,0.0f,0.0f),我期望的像素我检查,因为它不在viewDirection的镜面reflection部分,但float4添加后,最终的颜色为零。

我完全错过了什么吗? 我会假设以下math:

  color (0.65f, 0.0f, 0.0f, 1.0f) + specular (0.0f, 0.0f, 0.0f, 0.0f) result = (0.65f, 0.0f, 0.0f, 1.0f) 

任何想法将不胜感激。 我有一种感觉,我错过了一些非常简单的东西。

编辑:

  // If I remove the specular and return color after multi by tex Sample, // I get the following expected result color = color * textureColor; 

结果没有镜面反射

 // As soon as I add the specular component back in color = saturate(color + specular); 

结果与高光

最后还是花点时间回去再深入研究一下。 最后,这是两个简单的问题。 首先我的着色器常量缓冲区variables顺序没有匹配我用来映射的结构。 一旦这个问题得到纠正,黑色部分就被纠正了,但是仍然有大的白色斑点被计算出来,而不是预期的镜面辉光。 这是通过将视图方向vector除以其长度来校正的。