Verwenden von Lichtern in three.js shader

Ich versuche, von einem Shader in three.js auf die Lichter der Szene zuzugreifen.

Diese Frage ist fast ein Duplikat von Three.js ShaderMaterial Problem mit Lichtern aber die Kommentare zu dieser Frage helfen mir nicht, das Problem zu lösen.

Hier ist der Vertex-Shader:

#if NUM_DIR_LIGHTS > 0
    struct DirectionalLight {
        vec3 direction;
        vec3 color;
        int shadow;
        float shadowBias;
        float shadowRadius;
        vec2 shadowMapSize;
     };
     uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];
#endif
  varying vec3 color;
  void main() {
     float r = directionalLights[0].color.r;
     color = vec3(r,1.0,0.0);
     gl_Position = projectionMatrix * modelViewMatrix * vec4(position , 1.0);
  }

und das relevante ShaderMaterial:

var material = new THREE.ShaderMaterial({
    uniforms: THREE.UniformsLib['lights'],
    vertexShader: document.getElementById('vertexShader').innerHTML,
    fragmentShader: document.getElementById('fragmentShader').innerHTML,
    lights : true
  });

Ich habe den gesamten Beispielcode hier gepostet:https: //jsfiddle.net/zhkvcajs

Entferne denlights : true rendert einen grünen Knoten, aber es wird nicht dasdirectionalLights Informationen, die die Farbe des Knotens ändern sollen. Offenbar,lights : true wird dafür benötigt, verursacht aber einen Fehler.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage