【问题标题】:Custom phong shader自定义 phong 着色器
【发布时间】:2018-04-01 16:57:43
【问题描述】:

我需要为我的地形网格创建一个相当简单的着色器。着色器必须根据世界地图(图像)的颜色使用不同的漫反射和法线纹理,必须接收阴影并使用灯光。

默认 phong 着色器包含许多包含,我可以在哪里更改或只查看它们的代码?如何复制 phong 着色器代码并创建新的THREE.ShaderMaterial

我已经尝试使用onBeforeCompile 修改这样的着色器:

var material = new THREE.MeshPhongMaterial( {
    map: grassTexture
} );
material.onBeforeCompile = function ( shader ) {
    shader.fragmentShader = shader.fragmentShader.replace(
        'gl_FragColor = vec4( outgoingLight, diffuseColor.a );',
        [
            'gl_FragColor = vec4( 0.1, 0.1, 0.5, 1.0 );'
        ].join( '\n' )
    );
    console.log(shader.fragmentShader);
};

但我还需要将多个纹理加载到着色器中,如何更改 phong 的制服?

【问题讨论】:

    标签: javascript three.js shader


    【解决方案1】:

    请看下面的例子:

    https://threejs.org/examples/webgl_materials_modified.html

    它展示了如何访问预定义材料的制服。如果您想添加新制服,请这样做:

    material.onBeforeCompile = function ( shader ) {
    
        shader.uniforms.time = { value: 0 };
        shader.vertexShader = 'uniform float time;\n' + shader.vertexShader;
    
    }
    

    【讨论】:

    • 在使用这个功能之前一定要祈祷:)
    • 花了一些时间来了解着色器的工作原理,但现在好多了:imgur.com/a/G6dXR 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2013-05-09
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多