着色器中的Threejs正常值设置为0

时间:2014-11-21 19:02:22

标签: three.js webgl shader fragment-shader vertex-shader

我正在努力让tutorial工作,但我遇到了两个问题,其中一个可以找到here。另一个是以下内容。

为方便起见,这是应该起作用的代码,这里是jsfiddle

顶点着色器:

uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
attribute vec3 position;
uniform vec3 normal;
varying vec3 vNormal;

void main() {
    test = 0.5;
    vNormal = normal;
    gl_Position = projectionMatrix *
                modelViewMatrix *
                vec4(position,1.0);
}

片段着色器:     变化的mediump vec3 vNormal;

void main() {
    mediump vec3 light = vec3(0.5, 0.2, 1.0);

    // ensure it's normalized
    light = normalize(light);

    // calculate the dot product of
    // the light to the vertex normal
    mediump float dProd = max(0.0, dot(vNormal, light));

    // feed into our frag colour
    gl_FragColor = vec4(dProd, // R
                        dProd, // G
                        dProd, // B
                        1.0);  // A
}

顶点着色器中normal的值或片段着色器中至少vNormal的值似乎为0.应该显示的球体保持黑色。只要我手动更改gl_FragColor的值,球体就会改变颜色。谁能告诉我为什么这不起作用?

1 个答案:

答案 0 :(得分:6)

在你的顶点着色器中,vec3 normal应该是一个属性(因为每个顶点都有一个法线)而不是一个统一的:

attribute vec3 normal;

Here是您代码的工作版本。