X-Git-Url: http://git.mutantstargoat.com?p=lighthouse;a=blobdiff_plain;f=src%2Fmain.cc;h=6456f655d779ec9dbb91236529d0d1ba97a9ded0;hp=669ede3f0a4e0ba1d6fd73b265cd74d9f3940b58;hb=6c00836edaa1bd464acc2ebffa1d299b2ac53f85;hpb=e288b11ca263beae92f508ca53e1500f0ce68377 diff --git a/src/main.cc b/src/main.cc index 669ede3..6456f65 100644 --- a/src/main.cc +++ b/src/main.cc @@ -15,6 +15,7 @@ #define BEAM_RMIN 0.01 #define BEAM_RMAX 0.125 #define BEAM_ENERGY 0.02 +#define BEAM_LEN 16.0 static bool init(); static void cleanup(); @@ -23,6 +24,7 @@ static void faros(); static void light(); static void ground(); static void backdrop(); +static void xlogo(); static void display(); static void idle(); @@ -34,7 +36,12 @@ static void mmotion(int x, int y); static float cam_theta = 45, cam_phi, cam_dist = 10; static unsigned int sdr_curve_top, sdr_beam, sdr_sky; static unsigned int start_time; -static float beam_rot_speed = 0.1; +static float anim_speed = 0.1; +static unsigned int anim_stop_time; +static unsigned int tmsec; + +static const float sil_color[] = {0.05, 0.02, 0.1, 1.0}; +static const float beam_color[] = {0.5, 0.4, 0.2, 1.0}; int main(int argc, char **argv) { @@ -94,7 +101,7 @@ static void cleanup() static void faros() { - glColor3f(0, 0, 0); + glColor3fv(sil_color); // kormos glPushMatrix(); @@ -171,7 +178,7 @@ static void faros() glScalef(1, 1, 0.45); glutSolidCylinder(1, 1, 4, 16); glPopMatrix(); - + bind_program(0); } @@ -184,6 +191,7 @@ static void light() glTranslatef(0, 4.65, 0.2); bind_program(sdr_beam); + set_uniform_float(sdr_beam, "beam_len", BEAM_LEN); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE); @@ -191,11 +199,11 @@ static void light() for(int i=0; i 0) { + tmsec = anim_stop_time - start_time; + } else { + tmsec = glutGet(GLUT_ELAPSED_TIME) - start_time; + } + float tsec = (float)tmsec / 1000.0; + float tanim = tsec * anim_speed; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); backdrop(); @@ -247,7 +261,7 @@ static void display() glPushMatrix(); - float beam_angle = tsec * beam_rot_speed * 360; + float beam_angle = tanim * 360; glRotatef(beam_angle, 0, 1, 0); light(); @@ -272,11 +286,35 @@ static void reshape(int x, int y) gluPerspective(50, (float)x / (float)y, 0.5, 500); } +static unsigned int calc_timeshift(float prev_speed, float speed) +{ + return tmsec * speed - tmsec * prev_speed; +} + static void keyboard(unsigned char c, int x, int y) { switch(c) { case 27: exit(0); + case ' ': + if(anim_stop_time > 0) { + start_time += glutGet(GLUT_ELAPSED_TIME) - anim_stop_time; + anim_stop_time = 0; + } else { + anim_stop_time = glutGet(GLUT_ELAPSED_TIME); + } + break; + case '=': + //printf("prin %u\n", glutGet(GLUT_ELAPSED_TIME) - start_time); + //start_time += calc_timeshift(anim_speed, anim_speed + 0.1); + anim_speed += 0.1; + break; + case '-': + //start_time += calc_timeshift(anim_speed, anim_speed - 0.1); + anim_speed -= 0.1; + if(anim_speed < 0) + anim_speed = 0; + break; default: break; }