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

时间:2018-09-04 20:27:20

标签: three.js quaternions

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

我正在使用四元数,但我对如何执行此操作尚不完全清楚。

看来,方法应该是获取当前位置,获取当前位置与原始位置[0,0,0,1]之间的差,然后将此偏移量应用于实时传感器值。

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

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

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

start
起始位置(手指指向前方)

感谢您的帮助

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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

的启发