aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWebFreak001 <gh@webfreak.org>2020-06-11 23:15:51 +0200
committerdec05eba <dec05eba@protonmail.com>2020-06-13 07:21:25 +0200
commit4ca4bd4aea0ff94bae0802805c0ddfff97666689 (patch)
treed793863616ffaaf851820da166c054e71ca444f8
parent31a071d0fac616dd2b68e6c2e8afb8d3a891afbc (diff)
use quaternions for resetting rotation
now uses yaw, pitch and roll for resetting rotation this is something very opinionated, but is useful for example when lying down and looking up
-rw-r--r--src/main.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 46e06ff..8e0aeee 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -216,8 +216,8 @@ private: // OpenGL bookkeeping
glm::vec3 current_pos = glm::vec3(0.0f, 0.0f, 0.0f);
glm::vec3 hmd_pos = glm::vec3(0.0f, 0.0f, 0.0f);
- float hmd_rot = 0.0f;
- float m_reset_rotation = 0.0f;
+ glm::quat hmd_rot = glm::quat(0.0f, 0.0f, 0.0f, 1.0f);
+ glm::quat m_reset_rotation = glm::quat(0.0f, 0.0f, 0.0f, 0.0f);
struct VertexDataScene
{
@@ -905,7 +905,7 @@ bool CMainApplication::HandleInput()
// m_resetPos = m_mat4HMDPose;
hmd_pos = current_pos;
m_bResetRotation = false;
- m_reset_rotation = hmd_rot;
+ m_reset_rotation = glm::inverse(hmd_rot);
}
vr::VRInputValueHandle_t ulHapticDevice;
@@ -1952,7 +1952,7 @@ glm::mat4 CMainApplication::GetCurrentViewProjectionMatrix( vr::Hmd_Eye nEye )
//memcpy(&m_mat4HMDPose[0], &pp[0], sizeof(pp));
glm::mat4 hmd_pose = m_mat4HMDPose;
hmd_pose = glm::translate(hmd_pose, hmd_pos);
- hmd_pose = glm::rotate(hmd_pose, m_reset_rotation, glm::vec3(0.0f, 1.0f, 0.0f));
+ hmd_pose = hmd_pose * mat4_cast(m_reset_rotation);
if( nEye == vr::Eye_Left )
{
matMVP = m_mat4ProjectionLeft * m_mat4eyePosLeft * hmd_pose;
@@ -1993,8 +1993,8 @@ void CMainApplication::UpdateHMDMatrixPose()
current_pos.y = m_rTrackedDevicePose[nDevice].mDeviceToAbsoluteTracking.m[1][3];
current_pos.z = m_rTrackedDevicePose[nDevice].mDeviceToAbsoluteTracking.m[2][3];
- glm::vec3 *vec_z = (glm::vec3*)&m_rTrackedDevicePose[nDevice].mDeviceToAbsoluteTracking.m[2];
- hmd_rot = atan2(vec_z->z, vec_z->x) - half_pi;
+ glm::mat4 *mat = (glm::mat4*)&m_rTrackedDevicePose[nDevice].mDeviceToAbsoluteTracking;
+ hmd_rot = glm::quat_cast(*mat);
m_rDevClassChar[nDevice] = 'H';
break;
}