From c10caad2f97691c3c3be21140fd2e60b28fb3186 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 24 Mar 2011 14:03:51 -0400 Subject: [PATCH] initialize stars; currently behind camera :( --- modes/Starfield.cc | 20 +++++++++++++++----- modes/Starfield.h | 5 +++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/modes/Starfield.cc b/modes/Starfield.cc index e442fb7..a029613 100644 --- a/modes/Starfield.cc +++ b/modes/Starfield.cc @@ -16,7 +16,7 @@ Starfield::Starfield(GnomeScreensaver & gs) m_last_ticks = ticks; srand(time(NULL) + getpid()); for (int i = 0; i < NUM_STARS; i++) - newStar(i, ticks); + newStar(i, ticks + (uint64_t) (i * FLYBY_TICKS / (double)NUM_STARS)); } Starfield::~Starfield() @@ -30,10 +30,17 @@ bool Starfield::expose (GnomeScreensaver & gs) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, gs.getWidth(), gs.getHeight()); - glPushMatrix(); - glTranslatef(0, 0, -30); - m_logobox.draw(); - glPopMatrix(); + for (int i = 0; i < NUM_STARS; i++) + { + glPushMatrix(); + glTranslatef(m_stars[i].x, m_stars[i].y, + (ticks - m_stars[i].create_time) + * (FLYBY_TICKS / (double)MAX_STAR_DIST)); + glRotatef(m_stars[i].rot, + m_stars[i].axis[0], m_stars[i].axis[1], m_stars[i].axis[2]); + m_logobox.draw(); + glPopMatrix(); + } m_last_ticks = gs.getTicks(); @@ -71,4 +78,7 @@ void Starfield::newStar(int idx, uint64_t ticks) { m_stars[idx].create_time = ticks; getRandomAxis(&m_stars[idx].axis); + m_stars[idx].x = ((rand() / (double)RAND_MAX) - 0.5) * STAR_MAXX * 2; + m_stars[idx].y = ((rand() / (double)RAND_MAX) - 0.5) * STAR_MAXY * 2; + m_stars[idx].rot = rand() / (double)RAND_MAX * 360.0; } diff --git a/modes/Starfield.h b/modes/Starfield.h index 8f8708d..9fad64a 100644 --- a/modes/Starfield.h +++ b/modes/Starfield.h @@ -8,6 +8,9 @@ #define NUM_STARS 1000 #define MAX_STAR_DIST 1000 +#define FLYBY_TICKS 3000 +#define STAR_MAXX 500 +#define STAR_MAXY 400 class Starfield : public Mode { @@ -22,6 +25,8 @@ class Starfield : public Mode public: float axis[3]; uint64_t create_time; + float x, y; + float rot; }; protected: LogoBox m_logobox;