Three.js:PointLight改变距离

时间:2016-03-31 08:52:48

标签: three.js distance lighting

我制作了一个带有three.js的场景,其中我使用了PointLight。

var distance = 10000;
var intensity = 10;
var decay = 0;
var hex = 0xFFFFFF;
var light1 = new THREE.PointLight(hex, intensity, distance, decay);

我想使用阴影,所以我添加了

light1.shadow.camera.near = 200;
light1.shadow.camera.far = 10000;
light1.shadow.camera.fov = 90;
light1.shadow.bias = -0.00022;
light1.shadow.mapSize.width = 1024;
light1.shadow.mapSize.height = 1024;

直到这里一切都很完美。但是,只要我列入下一行:

light1.castShadow = true;

然后距离明显从10000变为1000 如果我拨打从light1到控制台的距离,它仍然是10000
即使它与画布中的不一样。
(我已将其更改为~50位数字,但距离没有变化)

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:0)

您可以尝试通过THREE.Texture()创建阴影,这样阴影将是一个独立的元素,不应该影响PointLight的位置。

var shadowTexture = new THREE.Texture(canvas);
shadowTexture.needsUpdate = true;
var shadowMaterial = new THREE.MeshBasicMaterial({map: shadowTexture, opacity: 0.5});
var shadowGeo = new THREE.PlaneBufferGeometry(100, 100, 100, 1);

// Locate the position of the shadows
mesh = new THREE.Mesh(shadowGeo, shadowMaterial);
mesh.position.y = 0;
mesh.rotation.x = - Math.PI / 2;
scene.add( mesh );

我将阴影应用于PlaneGeometry,因为我认为阴影是在场景中投射的。在任何情况下,还要看一下有关场景中阴影的this example