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



我正在尝试让本教程工作,但我遇到了两个问题,其中一个可以在这里找到。另一个如下。

为了方便起见,这是应该工作的代码,这是一个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);
}

片段着色器: 变化的介质 vec3 v正常;

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的值,球体就会改变颜色。谁能告诉我为什么这不起作用?

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

attribute vec3 normal;

这是代码的工作版本。

最新更新