扩展three.js原生着色器

SET*_*SET 5 three.js

我编写了一些自定义着色器,但不想丢失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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此代码会引发错误:WebGL: INVALID_VALUE: uniform3fv: no array. 我如何解决它?