THREE.js - 四元数偏移/校准

问题描述 投票:1回答:2

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

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

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

到目前为止我试过这个:

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

初始传感器位置(示例) 原位(手指指向前方)

感谢您的帮助

three.js quaternions
2个回答
1
投票

我认为你的方法是正确的,只要确保你不小心在输入四元数中应用了主四元数:

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);
}

0
投票
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);
}

受到https://stackoverflow.com/a/22167097/1162838的启发

© www.soinside.com 2019 - 2024. All rights reserved.