-1

我只是在处理每个片段照明,在 Visual Studio 2010 C++ 中工作并使用 GLSL,由于某种原因,只有这个片段着色器有问题,我已经通过了有效的片段着色器,我所有的顶点着色器都工作了,所以这与这个特定的人有关。基本上我的着色器看起来像这样:

#version 120

varying vec3 normal;
varying vec3 lightDir;
varying vec4 ambient;
varying vec4 diffuse;

void main()
{
float NdotL = max(dot(lightDir,normalize(normal)),0.0);
gl_FragColor = vec4((NdotL * diffuse.rgb + ambient.rgb),  gl_FrontMaterial.diffuse.a);
}

有没有人有任何想法可以提供帮助?正如我所说,我已经将多个着色器加载到程序中,但只有这家伙不起作用

编辑:将 vec3 切换为浮点数,仍然遇到同样的问题。停!

4

1 回答 1

0

dot(lightDir,normalize(normal)) 是点积。所以它返回一个标量。

max(scalar, scalar)也计算为标量。

所以:

vec3 NdotL = max(dot(lightDir,normalize(normal)),0.0);

尝试将标量分配给向量。这是无效的。

所以你可能想要的是:

float NdotL = max(dot(lightDir,normalize(normal)),0.0);
gl_FragColor = vec4((NdotL * diffuse.rgb + ambient.rgb),  gl_FrontMaterial.diffuse.a);
于 2013-04-12T00:34:46.547 回答