istereo
changeset 21:75a63f9ab7cc
ha!
author | John Tsiombikas <nuclear@mutantstargoat.com> |
---|---|
date | Wed, 07 Sep 2011 10:49:11 +0300 |
parents | 21d58290e634 |
children | 889dade25667 |
files | src/istereo.c src/sanegl.c |
diffstat | 2 files changed, 43 insertions(+), 20 deletions(-) [+] |
line diff
1.1 --- a/src/istereo.c Wed Sep 07 10:15:35 2011 +0300 1.2 +++ b/src/istereo.c Wed Sep 07 10:49:11 2011 +0300 1.3 @@ -21,13 +21,16 @@ 1.4 unsigned int prog; 1.5 unsigned int tex; 1.6 1.7 -int stereo; 1.8 +int view_xsz, view_ysz; 1.9 + 1.10 +int stereo = 1; 1.11 1.12 /* construction parameters */ 1.13 int sides = 24; 1.14 int segm = 20; 1.15 float ring_height = 0.5; 1.16 1.17 +float split = 0.5; 1.18 1.19 int init(void) 1.20 { 1.21 @@ -44,6 +47,8 @@ 1.22 return -1; 1.23 } 1.24 1.25 + cam_fov(30.0); 1.26 + 1.27 return 0; 1.28 } 1.29 1.30 @@ -57,39 +62,47 @@ 1.31 float pan_x, pan_y, z; 1.32 float tsec = get_sec(); 1.33 1.34 - z = ring_height * (segm - 1); 1.35 + z = ring_height * segm; 1.36 worm(tsec, z, &pan_x, &pan_y); 1.37 1.38 + glClear(GL_COLOR_BUFFER_BIT); 1.39 + 1.40 if(stereo) { 1.41 -#if 0 1.42 + int split_pt = (int)((float)view_ysz * split); 1.43 + 1.44 /* left eye */ 1.45 - glDrawBuffer(GL_BACK_LEFT); 1.46 + glViewport(0, 0, view_xsz, split_pt); 1.47 + cam_aspect((float)split_pt / (float)view_xsz); 1.48 1.49 - glMatrixMode(GL_PROJECTION); 1.50 - glLoadIdentity(); 1.51 + gl_matrix_mode(GL_PROJECTION); 1.52 + gl_load_identity(); 1.53 cam_stereo_proj_matrix(CAM_LEFT); 1.54 + gl_rotatef(-90, 0, 0, 1); 1.55 1.56 - glMatrixMode(GL_MODELVIEW); 1.57 - glLoadIdentity(); 1.58 + gl_matrix_mode(GL_MODELVIEW); 1.59 + gl_load_identity(); 1.60 cam_stereo_view_matrix(CAM_LEFT); 1.61 - glTranslatef(-pan_x, -pan_y, -1.1 * ring_height * segm); 1.62 + gl_translatef(-pan_x, -pan_y, -1.1 * ring_height * segm); 1.63 + /*gl_rotatef(-90, 0, 0, 1);*/ 1.64 1.65 render(tsec); 1.66 1.67 /* right eye */ 1.68 - glDrawBuffer(GL_BACK_RIGHT); 1.69 + glViewport(0, split_pt, view_xsz, view_ysz - split_pt); 1.70 + cam_aspect((float)(view_ysz - split_pt) / (float)view_xsz); 1.71 1.72 - glMatrixMode(GL_PROJECTION); 1.73 - glLoadIdentity(); 1.74 + gl_matrix_mode(GL_PROJECTION); 1.75 + gl_load_identity(); 1.76 cam_stereo_proj_matrix(CAM_RIGHT); 1.77 + gl_rotatef(-90, 0, 0, 1); 1.78 1.79 - glMatrixMode(GL_MODELVIEW); 1.80 - glLoadIdentity(); 1.81 + gl_matrix_mode(GL_MODELVIEW); 1.82 + gl_load_identity(); 1.83 cam_stereo_view_matrix(CAM_RIGHT); 1.84 - glTranslatef(-pan_x, -pan_y, -1.1 * ring_height * segm); 1.85 + gl_translatef(-pan_x, -pan_y, -1.1 * ring_height * segm); 1.86 + /*gl_rotatef(-90, 0, 0, 1);*/ 1.87 1.88 render(tsec); 1.89 -#endif 1.90 } else { 1.91 gl_matrix_mode(GL_MODELVIEW); 1.92 gl_load_identity(); 1.93 @@ -135,8 +148,6 @@ 1.94 1.95 static void render(float t) 1.96 { 1.97 - glClear(GL_COLOR_BUFFER_BIT); 1.98 - 1.99 draw_tunnel(t); 1.100 } 1.101 1.102 @@ -188,6 +199,14 @@ 1.103 } 1.104 gl_end(); 1.105 1.106 + /*gl_begin(GL_QUADS); 1.107 + gl_color3f(1.0, 0.3, 0.2); 1.108 + gl_vertex2f(-100, -100); 1.109 + gl_vertex2f(100, -100); 1.110 + gl_vertex2f(100, 0); 1.111 + gl_vertex2f(-100, 0); 1.112 + gl_end();*/ 1.113 + 1.114 bind_texture(0, 0); 1.115 } 1.116 1.117 @@ -247,7 +266,10 @@ 1.118 1.119 gl_matrix_mode(GL_PROJECTION); 1.120 gl_load_identity(); 1.121 - glu_perspective(45.0, (float)x / (float)y, 1.0, 1000.0); 1.122 + glu_perspective(40.0, (float)x / (float)y, 0.5, 500.0); 1.123 + 1.124 + view_xsz = x; 1.125 + view_ysz = y; 1.126 } 1.127 1.128 static unsigned int get_shader_program(const char *vfile, const char *pfile)
2.1 --- a/src/sanegl.c Wed Sep 07 10:15:35 2011 +0300 2.2 +++ b/src/sanegl.c Wed Sep 07 10:49:11 2011 +0300 2.3 @@ -216,7 +216,8 @@ 2.4 2.5 void glu_perspective(float vfov, float aspect, float near, float far) 2.6 { 2.7 - float x = near * tan(vfov / 2.0); 2.8 + float vfov_rad = M_PI * vfov / 180.0; 2.9 + float x = near * tan(vfov_rad / 2.0); 2.10 gl_frustum(-aspect * x, aspect * x, -x, x, near, far); 2.11 } 2.12