2014-12-02 151 views
1

我正在尝试Three.js,我试图将SpotLight放置在相机的位置。我用下面的代码(剥离窗口创建):将位置设置为其他对象的位置在THREE.js中不起作用

$(document).ready(function() { 
    init(); 
}); 

function init() { 
    var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 1, 1000); 
    camera.position.set(50, 10, 0); 
    camera.lookAt(new THREE.Vector3(0, 0, 0)); 
    var spotLight = new THREE.SpotLight(0xffffff); 
    spotLight.position = camera.position; 
    console.log(camera.position); 
    console.log(spotLight.position); 
} 

我得到的输出camera.position为50,10,0(如预期),但spotLight.position是0,1,0 - 甚至是艰难的我只需将其设置为指向相同的值?

回答

1

尝试

spotLight.position.set(camera.position.x, camera.position.y, camera.position.z) 

位置是只读的

+0

但是,如何让它自动跟着相机呢?我必须在渲染循环中调用它吗? – user3820008 2014-12-02 13:40:42

+0

当摄像头位置变化似乎足够了......我是three.js的新手,所以我不知道是否存在自动执行此操作的情况。 – AllForum 2014-12-02 13:48:19

+1

当相机位置改变时:'spotLight.position.copy(camera.position)'。 – WestLangley 2014-12-02 14:58:57

0

由于Spotlight和相机是对象(Object3D),你可以聚光灯简单地添加到相机。照相机将移动,旋转等,而无需进一步进行位置复制。在这种情况下,您必须将光线相对于相机进行定位:

camera.add(spotLight); 
spotLight.position.set(0,0,1); 
spotLight.target = camera; 
相关问题