有没有办法阻止定向光照射特定物体?我想这也适用于聚光灯。这样做的原因是我想使用两个方向灯,但是一个灯照射在一个物体上以使其“自我遮蔽”,并且不希望它发光以干扰另一个物体。
目前我有一个单向指示灯:
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版本。
答案 0 :(得分:6)
您希望限制灯光影响的对象。直到three.js支持“图层”的时间,其中灯光只影响其自身图层中的对象,您可以通过解决方法实现您想要的效果:两个单独的场景和两个渲染过程
renderer.autoClear = false;
...
renderer.clear();
renderer.render( scene1, camera );
renderer.render( scene2, camera );
如果你有透明物体,他们必须在第二个场景中。此外,一个对象只能在一个场景中,因此如果你想在两个场景中都需要复制一个灯光。
three.js r.70