我写了一些自定义着色器,但不想丢失phong
或lambert
等素材中的所有着色/闪电内容。所以我正在寻找扩展原生材料的方法。我想,为此,我可以使用THREE.ShaderMaterial
的数据运行THREE.ShaderLib['lambert']
。所以我就是这样做的:
class LandscapeMaterial extends THREE.ShaderMaterial{
constructor(config){
var getShader = function( shaderStr ) {
return shaderStr.replace( /#include\s+\<(\S+)\>/gi, function( match, p1 ){
var chunk = THREE.ShaderChunk[ p1 ];
return chunk ? chunk : "";
});
};
var lambertShader = THREE.ShaderLib['lambert'];
var uniforms = lambertShader.uniforms;
var params = {
side: THREE.DoubleSide,
uniforms: uniforms,
vertexShader: getShader(lambertShader.vertexShader),
fragmentShader: getShader(lambertShader.fragmentShader),
};
super(params);
}
}
但是这段代码输入了一个错误:WebGL: INVALID_VALUE: uniform3fv: no array
。我该如何解决?