扩展three.js本机着色器

时间:2016-03-26 07:30:59

标签: three.js

我写了一些自定义着色器,但不想丢失phonglambert等素材中的所有着色/闪电内容。所以我正在寻找扩展原生材料的方法。我想,为此,我可以使用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。我该如何解决?

0 个答案:

没有答案