我正在使用传感器来控制手部模型的旋转三度。我希望能够对手模型应用偏移量(单击按钮时),以针对任何初始传感器位置差异进行调整。
我正在使用四元数,但我对如何执行此操作尚不完全清楚。
看来,方法应该是获取当前位置,获取当前位置与原始位置[0,0,0,1]之间的差,然后将此偏移量应用于实时传感器值。
到目前为止,我已经尝试过:
// on button click
quaternionOffset.copy(quaternion.multiplyQuaternions(quaternion.inverse(), startPosition))
// on update
quaternion.multiply(quaternionOffset)
初始传感器位置(示例)
起始位置(手指指向前方)
感谢您的帮助
答案 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);
}
的启发