diff --git a/window.c b/window.c index e194fd2..b8f4e33 100644 --- a/window.c +++ b/window.c @@ -76,6 +76,7 @@ static int _overview = 0; // boolean to toggle overview (view from the top). static int _p = -1; // the object (sun, planets, pluto) number to move. static float _s = 1.0f; // multiplier for angle (for speeding planets movement and rotation). static float _a = 0.0f; // rotation angle. +static float _r = 0.0f; static Mix_Chunk * bsound = NULL; // background sound. @@ -286,7 +287,6 @@ static void goto_obj(float * mvMat) { /*!\brief la fonction appelée à chaque display. */ void draw(void) { - static float r = 0.0f; static double t0 = 0, t, dt; t = gl4dGetElapsedTime(); dt = (t - t0) / 1000.0; @@ -311,7 +311,7 @@ void draw(void) { // SUN memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */ - rotate(nmv, (r / 24.5f), 0.0f, 1.0f, 0.0f); + rotate(nmv, (_r / 24.5f), 0.0f, 1.0f, 0.0f); translate(nmv, 0.0f, 1.0f, 0.0f); scale(nmv, 2,2,2); transform_n_raster(_sun, nmv, projMat); @@ -321,7 +321,7 @@ void draw(void) { rotate(nmv, (_a / 87.97f), 0.0f, 1.0f, 0.0f); // orbit mouvement translate(nmv, 4.2f, 1.0f, 0.0f); scale(nmv, (1/227.0f) * 12.0f, (1/227.0f) * 12.0f, (1/227.0f) * 12.0f); - rotate(nmv, (r / 59.0f), 0.0f, 1.0f, 0.0f); // rotation + rotate(nmv, (_r / 59.0f), 0.0f, 1.0f, 0.0f); // rotation transform_n_raster(_planet[0], nmv, projMat); // VENUS @@ -329,7 +329,7 @@ void draw(void) { rotate(nmv, (_a / 224.7f), 0.0f, 1.0f, 0.0f); // orbit mouvement translate(nmv, 7.9f, 1.0f, 0.0f); scale(nmv, (1/113.0f) * 12.0f, (1/113.0f) * 12.0f, (1/113.0f) * 12.0f); - rotate(nmv, (r / 243.75f), -0.1773f, -1.0f, 0.0f); // rotation anti-clockwise + rotate(nmv, (_r / 243.75f), -0.1773f, -1.0f, 0.0f); // rotation anti-clockwise transform_n_raster(_planet[1], nmv, projMat); // EARTH @@ -337,7 +337,7 @@ void draw(void) { rotate(nmv, (_a / 365.2425f), 0.0f, 1.0f, 0.0f); translate(nmv, 10.0f, 1.0f, 0.0f); scale(nmv, (1/108.0f) * 12.0f, (1/108.0f) * 12.0f, (1/108.0f) * 12.0f); - rotate(nmv, r, -0.234f, 1.0f, 0.0f); + rotate(nmv, _r, -0.234f, 1.0f, 0.0f); transform_n_raster(_planet[2], nmv, projMat); // Moon @@ -350,19 +350,19 @@ void draw(void) { rotate(nmv, (_a / 686.98f), 0.0f, 1.0f, 0.0f); translate(nmv, 15.2f, 1.0f, 0.0f); scale(nmv, (1/208.0f) * 12.0f, (1/208.0f) * 12.0f, (1/208.0f) * 12.0f); - rotate(nmv, r / 1.0416f, -0.252f, 1.0f, 0.0f); + rotate(nmv, _r / 1.0416f, -0.252f, 1.0f, 0.0f); transform_n_raster(_planet[3], nmv, projMat); memcpy(cpy, nmv, sizeof cpy); // Phobos - rotate(nmv, r * 4.3f, 0.0f, 0.1f, 0.0f); + rotate(nmv, _r * 4.3f, 0.0f, 0.1f, 0.0f); translate(nmv, 10.0f, 1.0f, 0.0f); scale(nmv, (1/5.0f), (1/5.0f), (1/5.0f)); transform_n_raster(_moon[1], nmv, projMat); // Deimos - rotate(cpy, r / 1.5f, 0.0f, 0.1f, 0.0f); + rotate(cpy, _r / 1.5f, 0.0f, 0.1f, 0.0f); translate(cpy, 25.0f, 1.0f, 0.0f); scale(cpy, (1/6.0f), (1/6.0f), (1/6.0f)); transform_n_raster(_moon[2], cpy, projMat); @@ -372,13 +372,13 @@ void draw(void) { rotate(nmv, _a / (12 * 365.2425f), 0.0f, 1.0f, 0.0f); translate(nmv, 30.0f, 1.0f, 0.0f); scale(nmv, (1/9.7f) * 12.0f, (1/9.7f) * 12.0f, (1/9.7f) * 12.0f); - rotate(nmv, r / 0.416f, -0.031f, 1.0f, 0.0f); + rotate(nmv, _r / 0.416f, -0.031f, 1.0f, 0.0f); transform_n_raster(_planet[4], nmv, projMat); memcpy(cpy, nmv, sizeof cpy); // Io - rotate(nmv, r * 3.0f, 0.0f, 0.1f, 0.0f); + rotate(nmv, _r * 3.0f, 0.0f, 0.1f, 0.0f); translate(nmv, 3.0f, 0.0f, 0.0f); scale(nmv, (1/11.2f), (1/11.2f), (1/11.2f)); transform_n_raster(_moon[3], nmv, projMat); @@ -386,7 +386,7 @@ void draw(void) { memcpy(nmv, cpy, sizeof nmv); // Europa - rotate(nmv, r / 2.0f, 0.0f, 0.1f, 0.0f); + rotate(nmv, _r / 2.0f, 0.0f, 0.1f, 0.0f); translate(nmv, 4.0f, 0.0f, 0.0f); scale(nmv, (1/13.2f), (1/13.2f), (1/13.2f)); transform_n_raster(_moon[4], nmv, projMat); @@ -394,7 +394,7 @@ void draw(void) { memcpy(nmv, cpy, sizeof nmv); // Ganymede - rotate(nmv, r / 3.0f, 0.0f, 0.1f, 0.0f); + rotate(nmv, _r / 3.0f, 0.0f, 0.1f, 0.0f); translate(nmv, 5.0f, 0.0f, 0.0f); scale(nmv, (1/9.0f), (1/9.0f), (1/9.0f)); transform_n_raster(_moon[5], nmv, projMat); @@ -402,7 +402,7 @@ void draw(void) { memcpy(nmv, cpy, sizeof nmv); // Callisto - rotate(nmv, r / 5.0f, 0.0f, 0.1f, 0.0f); + rotate(nmv, _r / 5.0f, 0.0f, 0.1f, 0.0f); translate(nmv, 6.0f, 0.0f, 0.0f); scale(nmv, (1/10.0f), (1/10.0f), (1/10.0f)); transform_n_raster(_moon[6], nmv, projMat); @@ -412,13 +412,13 @@ void draw(void) { rotate(nmv, _a / (30 * 365.2425f), 0.0f, 1.0f, 0.0f); translate(nmv, 50.4f, 1.0f, 0.0f); scale(nmv, (1/11.4f) * 12.0f, (1/11.4f) * 12.0f, (1/11.4f) * 12.0f); - rotate(nmv, r / 0.4583f, -0.267f, 1.0f, 0.0f); + rotate(nmv, _r / 0.4583f, -0.267f, 1.0f, 0.0f); transform_n_raster(_planet[5], nmv, projMat); memcpy(cpy, nmv, sizeof cpy); // Enceladus - rotate(nmv, r * 5.0f, 0.0f, 0.1f, 0.0f); + rotate(nmv, _r * 5.0f, 0.0f, 0.1f, 0.0f); translate(nmv, 2.0f, 0.0f, 0.0f); scale(nmv, (1/20.0f), (1/20.0f), (1/20.0f)); transform_n_raster(_moon[7], nmv, projMat); @@ -426,7 +426,7 @@ void draw(void) { memcpy(nmv, cpy, sizeof nmv); // Dione - rotate(nmv, r * 4.0f, 0.0f, 0.01f, 0.0f); + rotate(nmv, _r * 4.0f, 0.0f, 0.01f, 0.0f); translate(nmv, 3.0f, 0.0f, 0.0f); scale(nmv, (1/18.0f), (1/18.0f), (1/18.0f)); transform_n_raster(_moon[8], nmv, projMat); @@ -434,7 +434,7 @@ void draw(void) { memcpy(nmv, cpy, sizeof nmv); // Rhea - rotate(nmv, r * 3.0f, 0.0f, 0.01f, 0.0f); + rotate(nmv, _r * 3.0f, 0.0f, 0.01f, 0.0f); translate(nmv, 4.0f, 0.0f, 0.0f); scale(nmv, (1/15.0f), (1/15.0f), (1/15.0f)); transform_n_raster(_moon[9], nmv, projMat); @@ -442,7 +442,7 @@ void draw(void) { memcpy(nmv, cpy, sizeof nmv); // Titan - rotate(nmv, r / 4.0f, 0.0f, 0.01f, 0.0f); + rotate(nmv, _r / 4.0f, 0.0f, 0.01f, 0.0f); translate(nmv, 6.0f, 0.0f, 0.0f); scale(nmv, (1/10.0f), (1/10.0f), (1/10.0f)); transform_n_raster(_moon[10], nmv, projMat); @@ -450,7 +450,7 @@ void draw(void) { memcpy(nmv, cpy, sizeof nmv); // Iapetus - rotate(nmv, r / 6.0f, 0.0f, 0.01f, 0.0f); + rotate(nmv, _r / 6.0f, 0.0f, 0.01f, 0.0f); translate(nmv, 7.0f, 0.0f, 0.0f); scale(nmv, (1/14.0f), (1/14.0f), (1/14.0f)); transform_n_raster(_moon[11], nmv, projMat); @@ -460,13 +460,13 @@ void draw(void) { rotate(nmv, _a / (84 * 365.2425f), 0.0f, 1.0f, 0.0f); translate(nmv, 65.0f, 1.0f, 0.0f); scale(nmv, (1/26.8f) * 12.0f, (1/26.8f) * 12.0f, (1/26.8f) * 12.0f); - rotate(nmv, r / 0.7083f, -0.978f, 0.0f, 0.0f); + rotate(nmv, _r / 0.7083f, -0.978f, 0.0f, 0.0f); transform_n_raster(_planet[6], nmv, projMat); memcpy(cpy, nmv, sizeof cpy); // Ariel - rotate(nmv, r , 0.01f, 0.0f, 0.0f); + rotate(nmv, _r , 0.01f, 0.0f, 0.0f); translate(nmv, 0.0f, 3.0f, 0.0f); scale(nmv, (1/20.0f), (1/20.0f), (1/20.0f)); transform_n_raster(_moon[12], nmv, projMat); @@ -474,7 +474,7 @@ void draw(void) { memcpy (nmv, cpy, sizeof nmv); // Umbriel - rotate(nmv, r / 2.0f, 0.01f, 0.0f, 0.0f); + rotate(nmv, _r / 2.0f, 0.01f, 0.0f, 0.0f); translate(nmv, 0.0f, 4.0f, 0.0f); scale(nmv, (1/20.0f), (1/20.0f), (1/20.0f)); transform_n_raster(_moon[13], nmv, projMat); @@ -482,7 +482,7 @@ void draw(void) { memcpy (nmv, cpy, sizeof nmv); // Titania - rotate(nmv, r / 3.0f, 0.01f, 0.0f, 0.0f); + rotate(nmv, _r / 3.0f, 0.01f, 0.0f, 0.0f); translate(nmv, 0.0f, 5.0f, 0.0f); scale(nmv, (1/17.0f), (1/17.0f), (1/17.0f)); transform_n_raster(_moon[14], nmv, projMat); @@ -490,7 +490,7 @@ void draw(void) { memcpy (nmv, cpy, sizeof nmv); // Oberon - rotate(nmv, r / 5.0f, 0.01f, 0.0f, 0.0f); + rotate(nmv, _r / 5.0f, 0.01f, 0.0f, 0.0f); translate(nmv, 0.0f, 6.0f, 0.0f); scale(nmv, (1/17.0f), (1/17.0f), (1/17.0f)); transform_n_raster(_moon[15], nmv, projMat); @@ -500,11 +500,11 @@ void draw(void) { rotate(nmv, _a / (165 * 365.2425f), 0.0f, 1.0f, 0.0f); translate(nmv, 75.0f, 1.0f, 0.0f); scale(nmv, (1/27.7f) * 12.0f, (1/27.7f) * 12.0f, (1/27.7f) * 12.0f); - rotate(nmv, r / 0.6f, -0.283f, 1.0f, 0.0f); + rotate(nmv, _r / 0.6f, -0.283f, 1.0f, 0.0f); transform_n_raster(_planet[7], nmv, projMat); // Triton - rotate(nmv, r / 5.0f, 0.0f, 0.01f, 0.0f); + rotate(nmv, _r / 5.0f, 0.0f, 0.01f, 0.0f); translate(nmv, 3.0f, 0.0f, 0.0f); scale(nmv, (1/10.0f), (1/10.0f), (1/10.0f)); transform_n_raster(_moon[16], nmv, projMat); @@ -514,11 +514,11 @@ void draw(void) { rotate(nmv, _a / (248 * 365.2425f), 0.0f, 1.0f, 0.0f); translate(nmv, 85.4f, 1.0f, 0.0f); scale(nmv, (1/500.0f) * 12.0f, (1/500.0f) * 12.0f, (1/500.0f) * 12.0f); - rotate(nmv, r / 6.4, -0.119f, 1.0f, 0.0f); + rotate(nmv, _r / 6.4, -0.119f, 1.0f, 0.0f); transform_n_raster(_planet[8], nmv, projMat); // Charon - rotate(nmv, r / 5.0f, 0.0f, 0.01f, 0.0f); + rotate(nmv, _r / 5.0f, 0.0f, 0.01f, 0.0f); translate(nmv, 3.0f, 0.0f, 0.0f); scale(nmv, (1/13.0f), (1/13.0f), (1/13.0f)); transform_n_raster(_moon[16], nmv, projMat); @@ -530,7 +530,7 @@ void draw(void) { if (!_pause){ _a += ((360.0 * dt) / 60) * _s; // 360 in 1 minute so 1 day = 1 min - r += ((360.0 * dt) / 60) * _s; // 360 in 1 minute so 1 day = 1 min + _r += ((360.0 * dt) / 60) * _s; // 360 in 1 minute so 1 day = 1 min } } @@ -611,6 +611,7 @@ void key(int keycode) { } break; case GL4DK_r: + _a = _r; _p = -1; _pause = 0; _movement = 1;