根据摄影机视图更改计算对象旋转

Calculate object rotation from camera view change

本文关键字:计算 对象 旋转 摄影机 视图      更新时间:2023-09-26

我需要计算对象在三维空间中的旋转。我正在尝试使用threejs,但一直没能弄清楚。我需要的是:(旋转X,旋转Y,旋转Z),以度为单位。

我有一个开始的相机视图:(位置[x,y,z],目标[x,y-z],向上[x,y/z])

以及结束摄影机视图:(位置[x,y,z],目标[x,y-z],向上[x,y/z])

如有任何帮助,我们将不胜感激。

我现在不能测试这个,我也没有使用three.js的经验,但逻辑应该是这样的:

var m1 = new THREE.Matrix4();
m1.lookAt(pos1, tar1, up1);
var q1 = new THREE.Quaternion();
q1.setFromRotationMatrix(m1);
var m2 = new THREE.Matrix4();
m2.lookAt(pos2, tar2, up2);
var q2 = new THREE.Quaternion();
q2.setFromRotationMatrix(m2);

q1.inverse();
var q3 = q2.multiply(q1);

var a = new THREE.Euler();
a.setFromQuaternion(q3, 'XYZ');

这里的方法只是获得表示对象旋转的两个四元数。这也可以使用.tquaternion()直接从对象中获取自:

QStart * QTransition = QResult

导致

QTransition = QResult * inverse(QStart)