将位置设置为其他对象的位置在THREE.js中不起作用
问题描述:
我正在尝试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 - 甚至是艰难的我只需将其设置为指向相同的值?
答
尝试
spotLight.position.set(camera.position.x, camera.position.y, camera.position.z)
位置是只读的
答
由于Spotlight和相机是对象(Object3D),你可以聚光灯简单地添加到相机。照相机将移动,旋转等,而无需进一步进行位置复制。在这种情况下,您必须将光线相对于相机进行定位:
camera.add(spotLight);
spotLight.position.set(0,0,1);
spotLight.target = camera;
但是,如何让它自动跟着相机呢?我必须在渲染循环中调用它吗? – user3820008 2014-12-02 13:40:42
当摄像头位置变化似乎足够了......我是three.js的新手,所以我不知道是否存在自动执行此操作的情况。 – AllForum 2014-12-02 13:48:19
当相机位置改变时:'spotLight.position.copy(camera.position)'。 – WestLangley 2014-12-02 14:58:57