我试图为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。
谢谢!