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
Three.js-如何防止灯光照射到物体上_Three.js - Fatal编程技术网

Three.js-如何防止灯光照射到物体上

Three.js-如何防止灯光照射到物体上,three.js,Three.js,有没有办法防止平行光照亮特定物体?我想这也适用于聚光灯。这样做的原因是我想使用两个平行光,但其中一个灯光照射在一个对象上,使其具有“自阴影”,并且不希望该灯光干扰另一个对象 目前,我有一个单一的平行光,声明如下: function addpointlight() { var SHADOW_MAP_WIDTH = 4096, SHADOW_MAP_HEIGHT = 2048; //Enabling this this light just creates serious arti

有没有办法防止平行光照亮特定物体?我想这也适用于聚光灯。这样做的原因是我想使用两个平行光,但其中一个灯光照射在一个对象上,使其具有“自阴影”,并且不希望该灯光干扰另一个对象

目前,我有一个单一的平行光,声明如下:

function addpointlight()
{

    var SHADOW_MAP_WIDTH = 4096, SHADOW_MAP_HEIGHT = 2048;
    //Enabling this this light just creates serious artifacts on the obj I am trying to shadow.
    //var newlight=new THREE.DirectionalLight(0xeeeeee,0.7);
    //newlight.position.set( 0, 100, 300 );
    //newlight.castShadow=false;
    //scene.add(newlight);

// create a directional light
    pointLight = new THREE.DirectionalLight(0xeeeeee,0.80);

    //pointLight.onlyShadow=true;
    pointLight.position.set( 0, 100, 300 );
    pointLight.shadowCameraVisible=true;

    pointLight.shadowCameraNear = 10;
    pointLight.shadowCameraFar = 1500;
    pointLight.shadowCameraFov = 90;
    pointLight.castShadow=true;


    var d = 4;
    pointLight.shadowCameraLeft = -d;
    pointLight.shadowCameraRight = d;
    pointLight.shadowCameraTop = -d;
    pointLight.shadowCameraBottom = d;

    pointLight.shadowBias = 0.00;
    pointLight.shadowDarkness = 0.7;
    pointLight.shadowMapWidth = SHADOW_MAP_WIDTH;
    pointLight.shadowMapHeight = SHADOW_MAP_HEIGHT;

    // add to the scene
    scene.add(pointLight);
}
这盏灯很好地环绕着我想要自阴影的对象,消除了阴影瑕疵。它与正在创建阴影的移动对象一起移动,使用以下方法:-

pointLight.position.set(obj.position.x+40,obj.position.y+5,obj.position.z+300);
pointLight.target=obj;
所以我想创建第二个平行光,它只影响其他物体,而不是这个,这个光不能影响其他物体。 我想制作一把小提琴,但我正在测试的模型和纹理使得它在带宽方面相当大


r70中的three.js版本。

您希望限制灯光影响的对象。在three.js支持“层”(其中灯光只会影响其自身层中的对象)之前,您可以通过解决方案实现所需的功能:两个单独的场景和两个渲染过程

renderer.autoClear = false;

...

renderer.clear();
renderer.render( scene1, camera );
renderer.render( scene2, camera );
如果有透明对象,则它们必须位于第二个场景中。此外,一个对象只能在一个场景中,因此如果希望在两个场景中都复制灯光,则必须复制灯光


three.js r.70

您希望限制灯光影响的对象。在three.js支持“层”(其中灯光只会影响其自身层中的对象)之前,您可以通过解决方案实现所需的功能:两个单独的场景和两个渲染过程

renderer.autoClear = false;

...

renderer.clear();
renderer.render( scene1, camera );
renderer.render( scene2, camera );
如果有透明对象,则它们必须位于第二个场景中。此外,一个对象只能在一个场景中,因此如果希望在两个场景中都复制灯光,则必须复制灯光


three.js r.70

是的,我认为这是唯一的答案。因为我已经按照这些思路进行了思考。我有一种感觉,可以使用着色器来完成。不管怎样,都不理想。我希望我在搜索中遗漏了一些简单的东西。我的临时解决方案只是构建一个场景,其中第二个对象不会进入灯光摄影机的平锥。我想说你的答案一开始就是正确的,但它引出了新的问题,比如如何添加第三个可以在两个场景对象上投射阴影的对象。谢谢你的提示,非常感谢。这使得场景图的使用不直观。还有其他解决方案吗?是的,我认为这是唯一的答案。因为我已经按照这些思路进行了思考。我有一种感觉,这可以通过着色器来完成。不管怎样,都不理想。我希望我在搜索中遗漏了一些简单的东西。我的临时解决方案只是构建一个场景,其中第二个对象不会进入灯光摄影机的平锥。我想说你的答案一开始就是正确的,但它引出了新的问题,比如如何添加第三个可以在两个场景对象上投射阴影的对象。谢谢你的提示,非常感谢。这使得场景图的使用不直观。还有别的解决办法吗?