aboutsummaryrefslogtreecommitdiff
path: root/src/render.c
diff options
context:
space:
mode:
authortaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-07-26 22:10:20 +0000
committertaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-07-26 22:10:20 +0000
commitabe68923dd00e7585914352fa5fe0cb32bda5697 (patch)
tree34bd6b1b9a54316ff70160b7cfcd8a25c3d4f227 /src/render.c
parent02e398005e6268b32cbd18e7102f9632fc08b61f (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.c51
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);