gpt4 book ai didi

javascript - 根据给定的相机旋转和位置计算轨道控制的相机目标

转载 作者:行者123 更新时间:2023-11-30 14:30:46 24 4
gpt4 key购买 nike

我在使用轨道控制时遇到以下问题。我将相机目标设置为 0、0、0。然后在 AJAX 调用后,我手动设置相机位置和旋转。在轨道控制更新调用后,相机的旋转被重置。

我发现发生这种情况是因为当调用轨道控件更新时,相机的旋转是根据相机位置和轨道控件的目标计算的。

有什么办法可以解决吗?

最佳答案

在对相机应用变换之前,我会保存相机和目标之间的距离。之后,我会将目标放在相机前面,并保持相应的距离。

var distance = new THREE.Vector3().subVectors(camera.position, controls.target).length();

// apply transformation - matrix, euler rotation, or quaternion?

var normal = new THREE.Vector3(0,0,-1).applyQuaternion(camera.quaternion);
// instead of quaternion, you could also use .applyEuler(camera.rotation);
// or if you used matrix, extract quaternion from matrix

controls.target = new THREE.Vector3().add(camera.position).add(normal.setLength(distance));

编辑: 您能否另外解释一下为什么在计算法线时使用向量 (0, 0, -1)?

在计算机图形学中,相机的局部坐标系通常是正 x 轴指向右侧,正 y 轴指向上方,因此您所看的方向是负 z 轴。对于上面的计算,我需要相机的方向——从局部空间 (0,0,-1) 到世界空间 (0,0,-1).applyQuaternion( )

enter image description here

关于javascript - 根据给定的相机旋转和位置计算轨道控制的相机目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51211900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com