void rotate_degrees(QuaternionTransform &qt, float amt) { XMVECTOR quat = XMLoadFloat4(&qt.quat); XMVECTOR axis; float angle; XMQuaternionToAxisAngle(&axis, &angle, quat); angle = XMConvertToDegrees(angle); angle += amt; angle = XMConvertToRadians(angle); quat = XMQuaternionRotationAxis(axis, angle); XMStoreFloat4(&qt.quat, quat); }
XMVECTOR HydraManager::getRotation(int controllerIndex) const { if (sixenseIsControllerEnabled(controllerIndex)) { XMVECTOR axis; float angle; XMQuaternionToAxisAngle(&axis, &angle, XMLoadFloat4(&XMFLOAT4(&mAcd.controllers[controllerIndex].rot_quat[0]))); axis = XMVectorSet(-XMVectorGetX(axis), XMVectorGetY(axis), -XMVectorGetZ(axis), 0.0f); XMVECTOR rotationQuat = XMQuaternionRotationAxis(axis, angle); return rotationQuat; } return XMQuaternionIdentity(); }
void to_axis_angle(Vector3& axis, float& angle) const { XMVECTOR a; XMQuaternionToAxisAngle(&a, &angle, *this); axis = a; }