我正在尝试为 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 弄湿我的脚。
谢谢!