diff options
author | taw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5> | 2008-07-26 23:19:32 +0000 |
---|---|---|
committer | taw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5> | 2008-07-26 23:19:32 +0000 |
commit | ed5740b6f667628f344d9dd17686424ce9e2de82 (patch) | |
tree | 124d4fe3fd9d04e8f89550c82e5487491b35e889 /src/render.c | |
parent | 5f8d27519c76fd297eb61144ff38bd5d1afa51bb (diff) |
Initial normal mapping stuff
git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@176 84d2e878-0bd5-11dd-ad15-13eda11d74c5
Diffstat (limited to 'src/render.c')
-rw-r--r-- | src/render.c | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/src/render.c b/src/render.c index b3a32cb..6c7cd5b 100644 --- a/src/render.c +++ b/src/render.c @@ -384,6 +384,12 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 1); + if ( r->shaders && texture->has_normals ) { + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, texture->normalmap); + render_setuni(r->lighting_program, "has_normals", 1); + glActiveTexture(GL_TEXTURE0); + } } else { if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 0); } @@ -406,6 +412,7 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC glDrawArrays(render_gltype(p->type), 0, p->num_vertices); *nvert += p->num_vertices; glDisable(GL_TEXTURE_2D); + render_setuni(r->lighting_program, "has_normals", 0); glPopMatrix(); if ( p->attribs & ATTRIB_SWIRLY ) { @@ -656,9 +663,8 @@ 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 fx, fy, fz; GLfloat fxt, fyt, fzt; - GLfloat uxt, uyt, uzt; r = game->render; @@ -719,43 +725,32 @@ void render_draw(Game *game, Uint32 t) { 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); + gluLookAt(fx, fy, fz, game->lander->x, game->lander->y, game->lander->z, 0.0, 0.0, 1.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); - if ( r->shaders ) render_setuni(game->render->lighting_program, "texture_enabled", 1); - if ( r->shaders ) render_setuni(game->render->lighting_program, "fill_light_enabled", 0); + if ( r->shaders ) { + glUseProgram(r->lighting_program); + render_setuni(game->render->lighting_program, "texture", 0); /* GL_TEXTURE0 */ + render_setuni(game->render->lighting_program, "normalmap", 1); /* GL_TEXTURE1 */ + render_setuni(game->render->lighting_program, "texture_only", 0); + render_setuni(game->render->lighting_program, "texture_enabled", 1); + render_setuni(game->render->lighting_program, "has_normals", 0); + render_setuni(game->render->lighting_program, "fill_light_enabled", 0); + } render_setup_lighting(game); amb[0] = 0.02; amb[1] = 0.02; amb[2] = 0.02; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, amb); |