自定义标准三个着色器

时间:2014-05-17 17:08:40

标签: three.js shader

我正在尝试在几个已经构建的材料上实现剪裁。

在我看来,使用shaderMaterial重新实现已经使用标准材料的所有内容太难了,所以我正在寻找更好的方法。

目前,我在三个webglrenderer中设置了一个回调函数initMaterial

var code = chunks.join();

// CSI - Custom Shader Injection
if (material.onCustomShaderBuild)   material.onCustomShaderBuild (code, material);
// CSI - Custom Shader Injection

var program;
// Check if code has been already compiled

现在我的回调是

    function myCsiFunction (code)
    {
        var myUniforms = {
        uClipPlane:   { type: "v4", value: new THREE.Vector4( 0.0, 0.0, -1.0, -300.0) }, 
        clipOffset:  { type: "f", value: -40.0 },
    };

    this.uniforms = THREE.UniformsUtils.merge ([this.uniforms, myUniforms]);
    this.vertexShader = this.vertexShader.replace (
          "#ifdef", 
          "varying float vClip;\n uniform vec4 uClipPlane;\n #ifdef");
    this.vertexShader = this.vertexShader.replace (
          "void main() {", 
          "void main() {    vec4 pos4 = modelViewMatrix * vec4( position, 1.0 ); vClip = dot ( uClipPlane, pos4); ");

    this.fragmentShader = this.fragmentShader.replace (
          "#ifdef", 
          "varying float vClip;\n uniform float clipOffset;\n #ifdef");
    this.fragmentShader = this.fragmentShader.replace (
          "void main() {", 
          "void main() { if (vClip < clipOffset) discard; ");
}

现在它正在使用几种标准材料;但我不喜欢修改三个来源......

我三岁时很新,所以我可能会忽略一些内置的可能性。

我可以使用未经修改的标准三获得相同(或类似)的结果吗?

0 个答案:

没有答案