根据相机视图变化计算对象旋转
Calculate object rotation from camera view change
我需要计算 3D 对象的旋转 space。我正在尝试使用 threejs,但一直无法弄清楚。
我需要的是:(rotationX, rotationY, rotationZ),以度为单位。
我有开始的相机视图:
(位置[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');
这里的方法就是获取两个代表物体旋转的四元数。这也可以使用 .quaternion() 直接从对象中获取
自:
QStart * QTransition = QResult
导致
QTransition = QResult * inverse(QStart)
我需要计算 3D 对象的旋转 space。我正在尝试使用 threejs,但一直无法弄清楚。 我需要的是:(rotationX, rotationY, rotationZ),以度为单位。
我有开始的相机视图: (位置[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');
这里的方法就是获取两个代表物体旋转的四元数。这也可以使用 .quaternion() 直接从对象中获取 自:
QStart * QTransition = QResult
导致
QTransition = QResult * inverse(QStart)