oculus1
diff src/camera.cc @ 10:b2abb08c8f94
proper FPS-style vr tracking
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Fri, 20 Sep 2013 06:49:39 +0300 |
parents | b66b54a68dfd |
children | 39ec672a5158 |
line diff
1.1 --- a/src/camera.cc Thu Sep 19 06:36:48 2013 +0300 1.2 +++ b/src/camera.cc Fri Sep 20 06:49:39 2013 +0300 1.3 @@ -1,8 +1,10 @@ 1.4 #include "opengl.h" 1.5 #include "camera.h" 1.6 +#include "vr.h" 1.7 1.8 Camera::Camera() 1.9 { 1.10 + roll = 0.0; 1.11 inval_cache(); 1.12 } 1.13 1.14 @@ -75,11 +77,13 @@ 1.15 mat->translate(Vector3(0, 0, -rad)); 1.16 mat->rotate(Vector3(phi, 0, 0)); 1.17 mat->rotate(Vector3(0, theta, 0)); 1.18 + mat->rotate(Vector3(0, 0, roll)); 1.19 } 1.20 1.21 void OrbitCamera::calc_inv_matrix(Matrix4x4 *mat) const 1.22 { 1.23 mat->reset_identity(); 1.24 + mat->rotate(Vector3(0, 0, roll)); 1.25 mat->rotate(Vector3(0, theta, 0)); 1.26 mat->rotate(Vector3(phi, 0, 0)); 1.27 mat->translate(Vector3(0, 0, -rad)); 1.28 @@ -89,6 +93,7 @@ 1.29 { 1.30 theta += y; 1.31 phi += x; 1.32 + roll += z; 1.33 1.34 if(phi < -M_PI / 2) 1.35 phi = -M_PI / 2; 1.36 @@ -107,18 +112,19 @@ 1.37 inval_cache(); 1.38 } 1.39 1.40 - 1.41 void FpsCamera::calc_matrix(Matrix4x4 *mat) const 1.42 { 1.43 mat->reset_identity(); 1.44 mat->translate(Vector3(pos.x, pos.y, pos.z)); 1.45 mat->rotate(Vector3(0, theta, 0)); 1.46 mat->rotate(Vector3(phi, 0, 0)); 1.47 + mat->rotate(Vector3(0, 0, roll)); 1.48 } 1.49 1.50 void FpsCamera::calc_inv_matrix(Matrix4x4 *mat) const 1.51 { 1.52 mat->reset_identity(); 1.53 + mat->rotate(Vector3(0, 0, roll)); 1.54 mat->rotate(Vector3(phi, 0, 0)); 1.55 mat->rotate(Vector3(0, theta, 0)); 1.56 mat->translate(Vector3(-pos.x, -pos.y, -pos.z)); 1.57 @@ -186,3 +192,20 @@ 1.58 1.59 inval_cache(); 1.60 } 1.61 + 1.62 + 1.63 +// --- VR additions --- 1.64 + 1.65 +void VRFpsCamera::track_vr() 1.66 +{ 1.67 + float euler[3]; 1.68 + vr_get_rotation_euler(euler); 1.69 + 1.70 + // input_rotate invalidates cache 1.71 + input_rotate(prev_angles[0] - euler[0], prev_angles[1] - euler[1], prev_angles[2] - euler[2]); 1.72 + 1.73 + prev_angles[0] = euler[0]; 1.74 + prev_angles[1] = euler[1]; 1.75 + prev_angles[2] = euler[2]; 1.76 +} 1.77 +