0

我正在尝试为 THREE.js 阴影编写一个自定义着色器,但对 GLSL 是新手,入门时遇到了一些麻烦。我认为最好的方法是从产生与默认函数相同的阴影的“身份”函数开始,ShaderMaterial然后慢慢破解这些函数。但我似乎无法让它工作。这是我尝试过的:

      // vertex function
      void main() {
        gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1 ); 
      }

      // fragment function
      uniform vec3 shadowColor;
      void main() {
        gl_FragColor = vec4(shadowColor, 1);
      }  

uniforms只是提供黑色作为阴影颜色:

       uniforms: {
          shadowColor: {
                type: 'c',
                value: new THREE.Color(0x000000)
          }
        },
        vertexShader: vshader,
        fragmentShader: fshader,
        side: THREE.DoubleSide,
        blending: THREE.AdditiveBlending,
        transparent: true
    });

这不会产生任何阴影,尽管它可以正确触发,我知道,因为我可以将输出更改为gl_FragColor任意 HSL 值并看到整个视图用该颜色着色。显然,我不理解vertexShader产生与默认输出相同的正确输出。

任何有关标识 vertexShader 和 fragmentShader 的帮助都会真正帮助我用 GLSL 弄湿我的脚。

谢谢!

4

0 回答 0