oculus1
diff src/main.cc @ 13:464e1d135d68
hurraaaay!
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 21 Sep 2013 03:00:47 +0300 |
parents | d797639e0234 |
children | cceffea995a4 |
line diff
1.1 --- a/src/main.cc Fri Sep 20 10:14:29 2013 +0300 1.2 +++ b/src/main.cc Sat Sep 21 03:00:47 2013 +0300 1.3 @@ -11,6 +11,7 @@ 1.4 static void disp(); 1.5 static void draw_scene(); 1.6 static void draw_teapot(); 1.7 +static void draw_squares(); 1.8 static void draw_grid(float size, float spacing); 1.9 static void idle(); 1.10 static void reshape(int x, int y); 1.11 @@ -32,7 +33,6 @@ 1.12 static int rtarg_width, rtarg_height; 1.13 static unsigned int fbo, tex[2], zbuf; 1.14 1.15 - 1.16 int main(int argc, char **argv) 1.17 { 1.18 glutInitWindowSize(1280, 800); 1.19 @@ -98,6 +98,8 @@ 1.20 rtarg_height = height; 1.21 } 1.22 1.23 + printf("render target: %dx%d\n", rtarg_width, rtarg_height); 1.24 + 1.25 // create render targets for each eye 1.26 GLenum wrap_mode = GL_CLAMP_TO_EDGE; 1.27 if(!GLEW_SGIS_texture_edge_clamp) { 1.28 @@ -142,9 +144,13 @@ 1.29 1.30 cam.track_vr(); 1.31 1.32 - glMatrixMode(GL_PROJECTION); 1.33 + /*glMatrixMode(GL_PROJECTION); 1.34 glLoadIdentity(); 1.35 - gluPerspective(RAD_TO_DEG(vr_get_fov()), (float)rtarg_width / (float)rtarg_height, 0.5, 500.0); 1.36 + float fov = RAD_TO_DEG(vr_get_fov()); 1.37 + gluPerspective(fov, (float)rtarg_width / (float)rtarg_height, 0.25, 500.0);*/ 1.38 + float proj_matrix[16]; 1.39 + 1.40 + float eye_dist = vr_get_eyedist(); 1.41 1.42 glViewport(0, 0, rtarg_width, rtarg_height); 1.43 1.44 @@ -156,10 +162,14 @@ 1.45 1.46 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 1.47 1.48 + glMatrixMode(GL_PROJECTION); 1.49 + vr_get_proj_matrix(proj_matrix, VR_EYE_LEFT); 1.50 + glLoadTransposeMatrixf(proj_matrix); 1.51 + 1.52 glMatrixMode(GL_MODELVIEW); 1.53 glLoadIdentity(); 1.54 + glTranslatef(eye_dist / 2.0, 0, 0); 1.55 cam.use_inverse(); 1.56 - glTranslatef(0.32, 0, 0); 1.57 draw_scene(); 1.58 1.59 1.60 @@ -169,10 +179,14 @@ 1.61 1.62 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 1.63 1.64 + glMatrixMode(GL_PROJECTION); 1.65 + vr_get_proj_matrix(proj_matrix, VR_EYE_RIGHT); 1.66 + glLoadTransposeMatrixf(proj_matrix); 1.67 + 1.68 glMatrixMode(GL_MODELVIEW); 1.69 glLoadIdentity(); 1.70 + glTranslatef(-eye_dist / 2.0, 0, 0); 1.71 cam.use_inverse(); 1.72 - glTranslatef(-0.32, 0, 0); 1.73 draw_scene(); 1.74 1.75 // return to the regular window framebuffer 1.76 @@ -187,6 +201,8 @@ 1.77 1.78 glutSwapBuffers(); 1.79 assert(glGetError() == GL_NO_ERROR); 1.80 + 1.81 + glFinish(); 1.82 } 1.83 1.84 1.85 @@ -195,6 +211,8 @@ 1.86 float lpos[] = {0, 60, 0, 1}; 1.87 glLightfv(GL_LIGHT0, GL_POSITION, lpos); 1.88 1.89 + draw_grid(100.0, 2.5); 1.90 + 1.91 static Vector2 teapos[] = { 1.92 Vector2(-8, 8), Vector2(8, 8), Vector2(8, -8), Vector2(-8, -8) 1.93 }; 1.94 @@ -206,7 +224,7 @@ 1.95 glPopMatrix(); 1.96 } 1.97 1.98 - draw_grid(100.0, 2.5); 1.99 + draw_squares(); 1.100 } 1.101 1.102 static void draw_teapot() 1.103 @@ -225,6 +243,37 @@ 1.104 glFrontFace(GL_CCW); 1.105 } 1.106 1.107 +static void draw_squares() 1.108 +{ 1.109 + static const int num_sq = 4; 1.110 + 1.111 + glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT); 1.112 + glDisable(GL_LIGHTING); 1.113 + 1.114 + glMatrixMode(GL_MODELVIEW); 1.115 + glPushMatrix(); 1.116 + glTranslatef(0, 1, 0); 1.117 + 1.118 + 1.119 + glLineWidth(3.0); 1.120 + glColor3f(1.0, 0.7, 0.2); 1.121 + 1.122 + float zdist = 2.0; 1.123 + for(int i=0; i<num_sq; i++) { 1.124 + glBegin(GL_LINE_LOOP); 1.125 + glVertex3f(-1, -1, -zdist); 1.126 + glVertex3f(1, -1, -zdist); 1.127 + glVertex3f(1, 1, -zdist); 1.128 + glVertex3f(-1, 1, -zdist); 1.129 + glEnd(); 1.130 + 1.131 + zdist += 1.0; 1.132 + } 1.133 + 1.134 + glPopMatrix(); 1.135 + glPopAttrib(); 1.136 +} 1.137 + 1.138 static void draw_grid(float size, float spacing) 1.139 { 1.140 int num_lines = size / spacing;