小编Mos*_*ouf的帖子

复制MeshLambertMaterial使用ShaderMaterial忽略纹理

我注意到THREE.js在内部使用着色器来创建核心材质"例如MeshLambertMaterial",所以我决定将Lambert着色器从Three.js代码复制到一个新的着色器中并在其上构建.

这是我得到的代码(忠实地从Three.js r66复制)

THREE.MyShader = {

uniforms: THREE.UniformsUtils.merge( [
    THREE.UniformsLib[ "common" ],
    THREE.UniformsLib[ "fog" ],
    THREE.UniformsLib[ "lights" ],
    THREE.UniformsLib[ "shadowmap" ],
    {
        "ambient"  : { type: "c", value: new THREE.Color( 0xffffff ) },
        "emissive" : { type: "c", value: new THREE.Color( 0x000000 ) },
        "wrapRGB"  : { type: "v3", value: new THREE.Vector3( 1, 1, 1 ) }
    }
]),

vertexShader: [

    "#define LAMBERT",

    "varying vec3 vLightFront;",

    "#ifdef DOUBLE_SIDED",

        "varying vec3 vLightBack;",

    "#endif",

    THREE.ShaderChunk[ "map_pars_vertex" ],
    THREE.ShaderChunk[ "lightmap_pars_vertex" ],
    THREE.ShaderChunk[ "envmap_pars_vertex" …
Run Code Online (Sandbox Code Playgroud)

javascript shader opengl-es webgl three.js

8
推荐指数
1
解决办法
3820
查看次数

中断循环的 WebWorker

我有一个专用的网络工作人员,在收到启动信号后,它会进入一个长循环,并且根据某些启动设置,该循环将在给定的执行点“屈服”。

这是我的代码的简化版本

var mode = null;
var generator = null;

function* loop() {

    for(var i=0;i<10000;i++) {
        //Do stuff
        for(var j=0;j<10000;j++) {
            //Do stuff
            if( mode == 'inner' ){
                //Yield after each inner loop iteration
                yield 2;
            }
        }
        if( mode == 'outer' ){
            //Yield after each outer loop iteration
            yield 1;
        }
    }

    /*
    If mode is not inner or outer the function won't yield 
    and will process the whole loop in one shot
    */
    return null;

}

generator = …
Run Code Online (Sandbox Code Playgroud)

javascript yield web-worker ecmascript-6

6
推荐指数
1
解决办法
1891
查看次数