]> git.mxchange.org Git - simgear.git/blob - Scenery/astro.c
Initial revision.
[simgear.git] / Scenery / astro.c
1 /**************************************************************************
2  * astro.c
3  *
4  * Written by Durk Talsma. Started November 1997, for use with the flight
5  * gear project.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License as
9  * published by the Free Software Foundation; either version 2 of the
10  * License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  *
21  * $Id$
22  * (Log is kept at end of this file)
23  **************************************************************************/
24
25
26 #include <math.h>
27 #include <stdio.h>
28 #include <string.h>
29 #include <time.h>
30
31 #include <GL/glut.h>
32
33 #include "astro.h"
34 #include "moon.h"
35 #include "orbits.h"
36 #include "planets.h"
37 #include "stars.h"
38 #include "sun.h"
39
40 #include "../constants.h"
41 #include "../general.h"
42
43 #include "../Main/views.h"
44 #include "../Aircraft/aircraft.h"
45 #include "../Time/fg_time.h"
46
47 static double prevUpdate = 0;
48
49
50 /* Initialize Astronomical Objects */
51 void fgAstroInit() {
52     struct fgTIME *t;
53     t = &cur_time_params;
54
55     /* Initialize the orbital elements of sun, moon and mayor planets */
56     fgSolarSystemInit(*t);
57
58     /* Intialize the moon's position */
59     fgMoonInit(); 
60
61     /* Initialize the sun's position */
62     fgSunInit();       
63
64     /* Initialize the Stars subsystem  */
65     fgStarsInit();             
66 }
67
68
69 /* Render Astronomical Objects */
70 void fgAstroRender() {
71     struct FLIGHT *f;
72     struct VIEW *v;
73     struct fgTIME *t;
74     double angle;
75
76     f = &current_aircraft.flight;
77     t = &cur_time_params;
78     v = &current_view;
79
80     /* a hack: Force sun and moon position to be updated on an hourly basis */
81     if (((t->gst - prevUpdate) > 1) || (t->gst < prevUpdate)) {
82         prevUpdate = t->gst;
83         fgSunInit();
84         fgMoonInit();
85     }
86
87     /* Disable fog effects */
88     glDisable( GL_FOG );
89
90     /* reverse light direction so the moon is displayed properly */
91     glLightfv( GL_LIGHT0, GL_POSITION, t->sun_vec_inv );
92
93     glPushMatrix();
94
95     /* Translate to view position */
96     glTranslatef( v->view_pos.x, v->view_pos.y, v->view_pos.z );
97
98     /* Rotate based on gst (side real time) */
99     angle = t->gst * 15.041085; /* should be 15.041085, Curt thought it was 15*/
100 #ifdef DEBUG
101     printf("Rotating astro objects by %.2f degrees\n",angle);
102 #endif
103     glRotatef( angle, 0.0, 0.0, -1.0 );
104
105     /* render the stars */
106     fgStarsRender();
107
108     /* render the moon */
109     fgMoonRender();
110
111     /* render the sun */
112     fgSunRender();
113
114     glPopMatrix();
115
116     /* reenable fog effects */
117     glEnable( GL_FOG );
118 }
119
120
121 /* $Log$
122 /* Revision 1.1  1997/11/25 23:20:22  curt
123 /* Initial revision.
124 /*
125  */