ftp://netsw.org/x11/tools/desktop/xscreensaver-4.07.tar.gz
[xscreensaver] / hacks / glx / glplanet.c
index 5352a5db53d5dde5148037c0a3239080f2339579..19523a59d91c1a71f08d578402131897e6de0da3 100644 (file)
@@ -167,6 +167,7 @@ ModStruct   planet_description =
 /* structure for holding the planet data */
 typedef struct {
   GLuint platelist;
+  GLuint latlonglist;
   GLuint starlist;
   int screen_width, screen_height;
   GLXContext *glx_context;
@@ -438,31 +439,6 @@ init_sun (ModeInfo * mi)
 
 #define RANDSIGN() ((random() & 1) ? 1 : -1)
 
-static void
-pick_velocity (ModeInfo * mi)
-{
-#if 0
-  planetstruct *gp = &planets[MI_SCREEN(mi)];
-
-  gp->box_width =  15.0;
-  gp->box_height = 15.0;
-  gp->box_depth =  5.0;
-
-  gp->tx = 0.0;
-  gp->ty = 0.0;
-  gp->tz = frand(360);
-
-  gp->dtx = (frand(0.4) + frand(0.3)) * RANDSIGN();
-  gp->dty = (frand(0.4) + frand(0.3)) * RANDSIGN();
-  gp->dtz = (frand(5.0) + frand(5.0));  /* the sun sets in the west */
-
-  gp->dx = (frand(0.2) + frand(0.2)) * RANDSIGN();
-  gp->dy = (frand(0.2) + frand(0.2)) * RANDSIGN();
-  gp->dz = (frand(0.2) + frand(0.2)) * RANDSIGN();
-#endif
-}
-
-
 void
 reshape_planet (ModeInfo *mi, int width, int height)
 {
@@ -527,8 +503,6 @@ init_planet (ModeInfo * mi)
   }
   gp = &planets[screen];
 
-  pick_velocity (mi);
-
   if ((gp->glx_context = init_GL(mi)) != NULL) {
        reshape_planet(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
   }
@@ -594,6 +568,8 @@ init_planet (ModeInfo * mi)
   glEnable(GL_CULL_FACE);
   glCullFace(GL_BACK); 
 
+  /* construct the polygons of the planet
+   */
   gp->platelist = glGenLists(1);
   glNewList (gp->platelist, GL_COMPILE);
   glColor3f (1,1,1);
@@ -602,15 +578,27 @@ init_planet (ModeInfo * mi)
   glRotatef (90, 1, 0, 0);
   unit_sphere (resolution, resolution, wire);
   mi->polygon_count += resolution*resolution;
-#if 0
-  if (!wire)
-    {
-      glDisable(GL_LIGHTING);
-      glScalef(1.01,1.01,1.01);
-      unit_sphere (12, 24, 1);
-      glEnable(GL_LIGHTING);
-    }
-#endif
+  glPopMatrix ();
+  glEndList();
+
+  /* construct the polygons of the latitude/longitude/axis lines.
+   */
+  gp->latlonglist = glGenLists(1);
+  glNewList (gp->latlonglist, GL_COMPILE);
+  glPushMatrix ();
+  if (do_texture) glDisable (GL_TEXTURE_2D);
+  if (do_light)   glDisable (GL_LIGHTING);
+  glColor3f (0.1, 0.3, 0.1);
+  glScalef (RADIUS, RADIUS, RADIUS);
+  glScalef (1.01, 1.01, 1.01);
+  glRotatef (90, 1, 0, 0);
+  unit_sphere (12, 24, 1);
+  glBegin(GL_LINES);
+  glVertex3f(0, -2, 0);
+  glVertex3f(0,  2, 0);
+  glEnd();
+  if (do_light)   glEnable(GL_LIGHTING);
+  if (do_texture) glEnable(GL_TEXTURE_2D);
   glPopMatrix ();
   glEndList();
 }
@@ -657,11 +645,13 @@ draw_planet (ModeInfo * mi)
   glRotatef (gp->z * 360, 0.0, 0.0, 1.0);
   if (do_rotate && !gp->button_down_p)
     {
-      gp->z += 0.01;
-      if (gp->z > 1) gp->z -= 1;
+      gp->z -= 0.01;     /* the sun sets in the west */
+      if (gp->z < 0) gp->z += 1;
     }
 
   glCallList (gp->platelist);
+  if (gp->button_down_p)
+    glCallList (gp->latlonglist);
   glPopMatrix();
 
   if (mi->fps_p) do_fps (mi);