Visual studio 2012 VS2012明暗器设计器破坏算法?

Visual studio 2012 VS2012明暗器设计器破坏算法?,visual-studio-2012,xna,pixel-shader,Visual Studio 2012,Xna,Pixel Shader,这个函数是由VS2012中的着色器设计器发出的,我遇到了很多麻烦。如果您查看下面的代码,您可以看到VS版本和我的版本之间的差异 在VS版本中,它们不考虑纹理,因此仅由环境光照亮的任何对象的“阴影”面都是灰色的。在我的版本中,你可以看到我添加了pixelcolor(来自纹理),然后效果很好。因为他们在漫反射照明中考虑了像素颜色,所以我不明白为什么他们在环境照明中不考虑像素颜色 因为我是3D新手,我不想假设我很聪明,而VS团队从未测试过这一点。因为它是如此的基本,我想知道我是否错过了什么。想法 fl

这个函数是由VS2012中的着色器设计器发出的,我遇到了很多麻烦。如果您查看下面的代码,您可以看到VS版本和我的版本之间的差异

在VS版本中,它们不考虑纹理,因此仅由环境光照亮的任何对象的“阴影”面都是灰色的。在我的版本中,你可以看到我添加了pixelcolor(来自纹理),然后效果很好。因为他们在漫反射照明中考虑了像素颜色,所以我不明白为什么他们在环境照明中不考虑像素颜色

因为我是3D新手,我不想假设我很聪明,而VS团队从未测试过这一点。因为它是如此的基本,我想知道我是否错过了什么。想法

float3 LambertLighting(
float3 lightNormal,
float3 surfaceNormal,
float3 materialAmbient,
float3 lightAmbient,
float3 lightColor,
float3 pixelColor
 )
{
    // compute amount of contribution per light
    float diffuseAmount = saturate(dot(lightNormal, surfaceNormal));
    float3 diffuse = diffuseAmount * lightColor * pixelColor;

    // combine ambient with diffuse

   // VS Version:
   return saturate((materialAmbient * lightAmbient) + diffuse);

   // MY Version:
   return saturate((materialAmbient * lightAmbient * pixelColor) + diffuse);

}

这一行应该已经考虑了纹理的颜色:

float3 diffuse = diffuseAmount * lightColor * pixelColor;
稍后将其与环境照明混合以获得正确的结果。在您的版本中,将添加纹理颜色两次(一次在漫反射中,一次在环境光中)。 VS版本对应于我见过的各种在线朗伯照明示例,因此这绝对正确

可能出现的问题是,在测试设置中,漫反射颜色为黑色或灰色,这会使像素颜色看起来也是灰色的