我正在使用传感器来控制手模型的旋转。我希望能够在手模型上应用偏移(按钮点击)以调整任何初始传感器位置差异。
我正在使用四元数,我不清楚如何做到这一点。
似乎该方法应该是获得当前位置,获得当前位置和原始位置[0,0,0,1]之间的差异,并将该偏移应用于实时传感器值。
到目前为止我试过这个:
// on button click
quaternionOffset.copy(quaternion.multiplyQuaternions(quaternion.inverse(), startPosition))
// on update
quaternion.multiply(quaternionOffset)
初始传感器位置(示例) 原位(手指指向前方)
感谢您的帮助
我认为你的方法是正确的,只要确保你不小心在输入四元数中应用了主四元数:
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);
}
let baseQuaternion = new THREE.Quaternion();
let diff;
function changeHandler(value) {
if (!diff) {
diff = baseQuaternion.multiply(value.inverse());
}
let calibrated = new THREE.Quaternion();
calibrated.multiplyQuaternions(diff, value);
object.setRotationFromQuaternion(calibrated);
}