将位置设置为其他对象的位置在 THREE.js 中不起作用

Setting position to position of other object does not work in THREE.js

本文关键字:位置 THREE js 不起作用 对象 设置 其他      更新时间:2023-09-26

我正在尝试Three.js并且我正在尝试将SpotLight放置在相机的位置。我使用以下代码(剥离窗口创建):

$(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)

位置是只读的

由于聚光灯和相机是对象(Object3D),因此您可以简单地将聚光灯添加到相机中。灯光将随相机移动、旋转等,无需任何进一步的位置复制。在这种情况下,您必须将光线相对于相机定位:

camera.add(spotLight);
spotLight.position.set(0,0,1);
spotLight.target = camera;