我编写了一些自定义着色器,但不想丢失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. 我如何解决它?