首页 > 解决方案 > THREE.js - 四元数偏移/校准

问题描述

我正在使用传感器来控制手模型在三中的旋转。我希望能够对手模型应用偏移量(单击按钮)以调整任何初始传感器位置差异。

我正在使用四元数,但我并不完全清楚如何做到这一点。

似乎方法应该是获取当前位置,获取当前位置与起始位置 [0,0,0,1] 之间的差异,并将此偏移量应用于实时传感器值。

到目前为止,我已经尝试过:

// on button click 
quaternionOffset.copy(quaternion.multiplyQuaternions(quaternion.inverse(), startPosition))
// on update
quaternion.multiply(quaternionOffset)

开始
初始传感器位置(示例) 初始

开始
位置(手指指向前方)

感谢您的帮助

标签: three.jsquaternions

解决方案


我认为您的方法是正确的,只要确保您不会在输入四元数内意外应用主四元数:

var inputQuaternion = new THREE.Quaternion();
var homeQuaternion = new THREE.Quaternion();

document.addEventListener('click', function () {
  // set the current rotation as home
  homeQuaternion.copy(inputQuaternion).inverse();
});

function updateFromSensor(quaternion) {
  inputQuaternion.copy(quaternion);
  object.quaternion.multiplyQuaternions(inputQuaternion, homeQuaternion);
}

推荐阅读