diff options
author | taw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5> | 2008-07-26 22:10:20 +0000 |
---|---|---|
committer | taw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5> | 2008-07-26 22:10:20 +0000 |
commit | abe68923dd00e7585914352fa5fe0cb32bda5697 (patch) | |
tree | 34bd6b1b9a54316ff70160b7cfcd8a25c3d4f227 /src/render.c | |
parent | 02e398005e6268b32cbd18e7102f9632fc08b61f (diff) |
Camera position stuff
git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@174 84d2e878-0bd5-11dd-ad15-13eda11d74c5
Diffstat (limited to 'src/render.c')
-rw-r--r-- | src/render.c | 51 |
1 files changed, 42 insertions, 9 deletions
diff --git a/src/render.c b/src/render.c index 95ac6ef..b3a32cb 100644 --- a/src/render.c +++ b/src/render.c @@ -443,10 +443,10 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC static void render_draw_line(GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2) { - GLfloat col[] = {0.0, 0.3, 0.0, 1.0}; + GLfloat col[] = {0.0, 1.0, 0.0, 1.0}; glMaterialfv(GL_FRONT, GL_EMISSION, col); - glColor3f(0.0, 0.0, 0.0); + glColor3f(0.0, 1.0, 0.0); glBegin(GL_LINES); glVertex3f(x1, y1, z1); @@ -656,6 +656,9 @@ void render_draw(Game *game, Uint32 t) { RenderContext *r; GLfloat amb[] = { 0.0, 0.0, 0.0, 1.0 }; + GLfloat fx, fy, fz, ux, uy, uz; + GLfloat fxt, fyt, fzt; + GLfloat uxt, uyt, uzt; r = game->render; @@ -700,6 +703,7 @@ void render_draw(Game *game, Uint32 t) { glEnd(); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + if ( r->shaders ) glUseProgram(0); } @@ -711,13 +715,42 @@ void render_draw(Game *game, Uint32 t) { gluPerspective(50.0, (GLfloat)r->width/(GLfloat)r->height, 0.1, 100.0); /* Depth buffer 10cm to 100m */ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - gluLookAt(game->lander->x-(game->view_dist*sinf(game->lander->yaw)), - game->lander->y-(game->view_dist*cosf(game->lander->yaw)), - game->lander->z, /* Look from */ - game->lander->x, game->lander->y, game->lander->z, /* Look at */ - 0.0, 0.0, 1.0); /* Up */ - //glRotatef(rad2deg(game->view_yaw), 0.0, 0.0, 1.0); - glRotatef(rad2deg(-game->view_angle), 1.0, 0.0, 0.0); + + fx = 0.0; + fy = -game->view_dist; + fz = 0.0; + ux = 0.0; + uy = 0.0; + uz = 1.0; + + fxt = fx; fyt = fy; fzt = fz; + uxt = ux; uyt = uy; uzt = uz; + fx = fxt; + fy = fyt*cos(game->view_angle) + fzt*sin(game->view_angle); + fz = fyt*sin(game->view_angle) + fzt*cos(game->view_angle); + ux = uxt; + uy = uyt*cos(game->view_angle) - uzt*sin(game->view_angle); + uz = -uyt*sin(game->view_angle) + uzt*cos(game->view_angle); + + fxt = fx; fyt = fy; fzt = fz; + uxt = ux; uyt = uy; uzt = uz; + fx = fxt*cos(game->view_yaw+game->lander->yaw) + fyt*sin(game->view_yaw+game->lander->yaw); + fy = -fxt*sin(game->view_yaw+game->lander->yaw) + fyt*cos(game->view_yaw+game->lander->yaw); + fz = fzt; + ux = uxt*cos(game->view_yaw+game->lander->yaw) - uyt*sin(game->view_yaw+game->lander->yaw); + uy = -uxt*sin(game->view_yaw+game->lander->yaw) + uyt*cos(game->view_yaw+game->lander->yaw); + uz = uzt; + + ux = 0.0; + uy = 0.0; + uz = 1.0; + fx += game->lander->x; + fy += game->lander->y; + fz += game->lander->z; + + gluLookAt(fx, fy, fz, game->lander->x, game->lander->y, game->lander->z, ux, uy, uz); + //gluLookAt(0.0, 0.0, -0.0, 0.0, 0.0, -5.0, 0.0, 1.0, 0.0); + if ( r->shaders ) glUseProgram(r->lighting_program); if ( r->shaders ) render_setuni(game->render->lighting_program, "texture", 0); /* GL_TEXTURE0 */ if ( r->shaders ) render_setuni(game->render->lighting_program, "texture_only", 0); |