Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 三.js灯及;阴影_Javascript_Three.js_Shadow_Light - Fatal编程技术网

Javascript 三.js灯及;阴影

Javascript 三.js灯及;阴影,javascript,three.js,shadow,light,Javascript,Three.js,Shadow,Light,我对init和animate过程中的一些东西很好奇。我们可以改变像灯光和阴影这样的东西,我注意到如果我在初始点使用较大的值,开始时的fps会下降得很厉害。所以我在动画制作过程中用一些代码测试了当我在每个循环中一步一步地设置值时的效果。我的意思是,不管怎样,一切都是这样。“程序”始终循环我们场景中的所有内容 但我问自己“场景设置真的更好吗?!” 你说什么?!你知道有没有什么复杂的场景会发生这样的事情,然后又不更新这样的值?!我的意思是,在启动时,不像一个游戏,我们只是渲染我们看到的,而不是整个场景

我对init和animate过程中的一些东西很好奇。我们可以改变像灯光和阴影这样的东西,我注意到如果我在初始点使用较大的值,开始时的fps会下降得很厉害。所以我在动画制作过程中用一些代码测试了当我在每个循环中一步一步地设置值时的效果。我的意思是,不管怎样,一切都是这样。“程序”始终循环我们场景中的所有内容

但我问自己“场景设置真的更好吗?!”

你说什么?!你知道有没有什么复杂的场景会发生这样的事情,然后又不更新这样的值?!我的意思是,在启动时,不像一个游戏,我们只是渲染我们看到的,而不是整个场景

我也很好奇你如何能/会解决这个问题:

 var cam, light, d, rend;
var ambLone = 0x444444, 
    ambLoneI = 0.2, 
    ambLtwo = 0x666666,
    ambLtwoI = 0.5, 
    lC = 0xdfebff, 
    lN = 2.75,
    lF = 1000,
    lightPx = 700,
    lightPy = 500,
    lightPz = 500,
    lightSCmin = 1,
    lightSCmax = 1000,
    lightSCF = 100,
    lightSCN = lightSCmin;
在init()中;->

在动画中();->

requestAnimationFrame(动画);
if(lightSCF==lightSCmax){
lightSCF=1000;
light.shadow.mapSize.width=5120;
light.shadow.mapSize.height=5120;
log('Light设置为:'+lightSCF+Light.shadow.mapSize.width);
}否则如果(lightSCF
我不知道这是否导致了您的问题,但是您的
shadow.mapSize的值很奇怪。文档说
值必须是2的幂
,如果你的设备能够使用大纹理,你应该检查
WebGLRenderer.capabilities.maxTextureSize

scenes.add( new THREE.AmbientLight( ambLone, ambLoneI ) );
            scenes.add( new THREE.AmbientLight( ambLtwo, ambLtwoI ) );
            light = new THREE.DirectionalLight( lC, lN, lF );
            light.position.set( lightPx, lightPy, lightPz );
            light.position.multiplyScalar( 1.3 );
            light.castShadow = true;
            light.shadow.mapSize.width = 1024;
            light.shadow.mapSize.height = 1024;
            d = 1000;
            light.shadow.camera.left = - d;
            light.shadow.camera.right = d;
            light.shadow.camera.top = d;
            light.shadow.camera.bottom = - d;
            light.shadow.camera.far = lightSCF;
            light.shadow.camera.near = lightSCN;
            var helper = new THREE.CameraHelper( light.shadow.camera );

            scenes.add( light, helper );
requestAnimationFrame( animate );

    if (lightSCF === lightSCmax) {
        lightSCF = 1000;
        light.shadow.mapSize.width = 5120;
        light.shadow.mapSize.height = 5120;
        console.log( 'Light is set to: ' + lightSCF + light.shadow.mapSize.width);
    } else if(lightSCF < lightSCmax){
        lightSCF = lightSCF + 1;
        light.shadow.mapSize.width = light.shadow.mapSize.width + 4.5;
        light.shadow.mapSize.height = light.shadow.mapSize.width + 4.5;
        light.shadow.camera.far = lightSCF;
        light.shadow.camera.updateProjectionMatrix();
        console.log( 'Light is now: ' + lightSCF + ' ' + light.shadow.mapSize.width );
    } else {
        console.log( 'whatever... ');
    }

render();