我注意到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) 我有一个专用的网络工作人员,在收到启动信号后,它会进入一个长循环,并且根据某些启动设置,该循环将在给定的执行点“屈服”。
这是我的代码的简化版本
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 ×2
ecmascript-6 ×1
opengl-es ×1
shader ×1
three.js ×1
web-worker ×1
webgl ×1
yield ×1