vrchess
diff src/vr/vr.c @ 11:5dc4e2b8f6f5
LibOVR is broken
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 23 Aug 2014 00:24:20 +0300 |
parents | e3f0ca1d008a |
children |
line diff
1.1 --- a/src/vr/vr.c Fri Aug 22 20:11:15 2014 +0300 1.2 +++ b/src/vr/vr.c Sat Aug 23 00:24:20 2014 +0300 1.3 @@ -2,6 +2,7 @@ 1.4 #include <string.h> 1.5 #include "vr.h" 1.6 #include "vr_impl.h" 1.7 +#include "mathutil.h" 1.8 1.9 1.10 static void swap_buffers(void); 1.11 @@ -133,37 +134,49 @@ 1.12 { 1.13 if(vrm && vrm->translation) { 1.14 vrm->translation(eye, vec); 1.15 - return 0; 1.16 + return 1; 1.17 } 1.18 vec[0] = vec[1] = vec[2] = 0.0f; 1.19 - return -1; 1.20 + return 0; 1.21 } 1.22 1.23 int vr_view_rotation(int eye, float *quat) 1.24 { 1.25 if(vrm && vrm->rotation) { 1.26 vrm->rotation(eye, quat); 1.27 - return 0; 1.28 + return 1; 1.29 } 1.30 quat[0] = quat[1] = quat[2] = 0.0f; 1.31 quat[3] = 1.0f; 1.32 - return -1; 1.33 + return 0; 1.34 } 1.35 1.36 int vr_view_matrix(int eye, float *mat) 1.37 { 1.38 + int have_trans, have_rot; 1.39 float offs[3], quat[4]; 1.40 + float rmat[16], tmat[16]; 1.41 1.42 if(vrm && vrm->view_matrix) { 1.43 vrm->view_matrix(eye, mat); 1.44 return 1; 1.45 } 1.46 1.47 - if(!vr_view_translation(eye, offs) && !vr_view_rotation(eye, quat)) { 1.48 + have_trans = vr_view_translation(eye, offs); 1.49 + have_rot = vr_view_rotation(eye, quat); 1.50 + 1.51 + if(!have_trans && !have_rot) { 1.52 return 0; 1.53 } 1.54 - /* TODO construct matrix */ 1.55 - return 0; 1.56 + 1.57 + offs[0] = -offs[0]; 1.58 + offs[1] = -offs[1]; 1.59 + offs[2] = -offs[2]; 1.60 + 1.61 + translation_matrix(offs, tmat); 1.62 + rotation_matrix(quat, rmat); 1.63 + mult_matrix(mat, tmat, rmat); 1.64 + return 1; 1.65 } 1.66 1.67 int vr_proj_matrix(int eye, float znear, float zfar, float *mat)