three.js - 光线移动时没有场景照明的更新

时间:2013-12-09 11:36:11

标签: dynamic three.js light

我有一个简单的THREE.js场景,我希望点光源可以用相机动态移动。机芯效果很好,但场景中的灯光不会立即更新。当我改变摄像机位置(以及因此轻的位置)时,它需要一些时间(大约2-3秒),直到场景中的照明相对于新的光位置正确呈现。我已经更新了每一帧中灯光的矩阵/矩阵世界。需要进一步更新吗?如何告诉Three.js轻位置已经改变了?

2 个答案:

答案 0 :(得分:2)

没有特别的方法可以告诉THREE.js光源改变了他们的位置。这里重要的是如何更新转换矩阵。我有一个lightGroup(Object3D的实例),它是我场景中所有光源的父节点。根据相机更新lightGroup转换使用此设置:

if (camera !== undefined)
{
    lightGroup.position.x = camera.position.x;
    lightGroup.position.y = camera.position.y;
    lightGroup.position.z = camera.position.z;

    lightGroup.lookAt(camera.target);

    lightGroup.updateMatrix();
    lightGroup.updateMatrixWorld();     
}

转换矩阵的更新就是这里的重点。另一种方法是将相机挂在THREE.js场景图中,并将灯作为其子项附加,如果您想避免单独的lightGroup节点。

顺便说一下:只有在更改场景中的光源数量时,才需要对THREE.js场景进行特定更新。请参阅材料中的https://github.com/mrdoob/three.js/wiki/Updates

答案 1 :(得分:0)

我知道这是旧帖子,但也许有人需要其他解决方案。

使用相机动态移动灯光您只需将它们附加到相机即可。

directionalLight = new THREE.DirectionalLight(0xffffff,0.6);
    directionalLight.position.set(0,20,0);
    directionalLight.rotation.set(+20/180*Math.PI,0,0);
    directionalLight.castShadow = true;
    camera.add(directionalLight);
    
    scene.add(camera);