GLSL顶点着色器导致闪烁颜色或全红色



我正在为(here it comes)家庭作业写我的第一个顶点着色器,不能让它正常工作

我需要实现一个顶点着色器(只有一个顶点着色器),而不是完全模仿openGL中的固定功能管道顶点着色器,并使用FFP片段着色器(因此不为FS写任何东西)。我知道内置的均匀变量,我正在使用它们来计算基于openGL照明方程的顶点的最终颜色。为了可读性,我重命名了一些值(normal和lightVec是标准化的):

    //given as part of the assignment, not modifable
    vec4 position = gl_ModelViewMatrix * gl_Vertex;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    //my (partial) code below here
    lightVec = (lightPos - position).xyz;
    distance = length(lightVec);
    vec3 normal = gl_NormalMatrix * gl_Normal;
    //I've stored a lot of the values in variables I defined locally
    //to make the code easier to read.
    //eg - constAtten = gl_LightSource[].constantAttenuation
    atten = 1/max((constAtten + distance*linearAtten + distance*distance*quadAtten),1); 
    ambient = ambInt * matAmbInt * atten;
    diffuse = difCol * matDifInt * max(dot(normal, lightVec),0.0) * atten;
    specular = specInt * matSpecInt * atten * pow(max(dot(normal, (gl_LightSource[i].halfVector).xyz),0.0), gl_FrontMaterial.shininess);

我将场景中每个光的环境,漫反射和镜面相加,并将其存储为"sum",后面跟着:

    gl_FrontColor = gl_FrontMaterial.emission + sum;
    gl_FrontColor.a = 1.0;

每当我移动场景的相机时,结果就是疯狂的闪烁颜色。这是openGL v1.2。

编辑:链接到图片 http://i305.photobucket.com/albums/nn208/wolverine1190/shadercomp_zpsc546ac31.png

每当我移动相机时,左边的颜色就会改变。这是否可能表明法线计算错误,或者可能在我不应该使用的地方使用相机坐标?

=================================================================

我已经修复了这个问题。不太清楚为什么它现在有效,但它确实有效。我放弃了所有内容,并使用相同的方法和计算从头开始重写代码。我所做的不同之处在于:

1)我用构造函数而不是赋值来设置值。例如:我用vec3 test = vec3(someOtherVec3)代替了vec3 test = someOtherVec3。

2)当规范化时,我将变量的规范化结果赋值给自身,而不是仅仅调用normalize()。例如:normal = normalize(normal),而不是normalize(normal);

3)我在每一步直接添加gl_FrontColor,而不是将中间值存储在sum中,并在最后将sum添加到gl_FrontColor。

除此之外,一切都保持不变。我不能确定为什么会这样,所以如果有人知道的话,请给出解释。

从你的描述,我想知道你的颜色是否溢出。如果您尝试:

    gl_FrontColor = clamp(gl_FrontMaterial.emission + sum, 0.0, 1.0);

相关内容

  • 没有找到相关文章

最新更新