add Starfield class

This commit is contained in:
Josh Holtrop 2011-03-24 13:27:58 -04:00
parent c608c75b83
commit 605483b41c
3 changed files with 92 additions and 0 deletions

View File

@ -35,6 +35,7 @@ int main (int argc, char *argv[])
GnomeScreensaver gs(&argc, &argv, configure, expose, update, 12);
Mode *modes[] = {
new Starfield(),
new Spin(),
new Flip()
};

67
modes/Starfield.cc Normal file
View File

@ -0,0 +1,67 @@
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <sys/types.h>
#include <unistd.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "Starfield.h"
Starfield::Starfield()
{
m_last_ticks = 0;
srand(time(NULL) + getpid());
}
Starfield::~Starfield()
{
}
bool Starfield::expose (GnomeScreensaver & gs)
{
if (m_last_ticks == 0)
m_last_ticks = gs.getTicks();
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();
m_last_ticks = gs.getTicks();
return true;
}
bool Starfield::configure (GnomeScreensaver & gs)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, gs.getAspectRatio(), 0.01, 1000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, 0, 0, 0, -1, 0, 1, 0);
return true;
}
bool Starfield::update (GnomeScreensaver & gs)
{
return true;
}
void Starfield::getRandomAxis(float (*axis)[3])
{
double alpha = rand() / (double)RAND_MAX * 2.0 * M_PI;
double beta = rand() / (double)RAND_MAX * M_PI;
(*axis)[0] = cos(alpha) * sin(beta);
(*axis)[1] = sin(alpha) * sin(beta);
(*axis)[2] = cos(beta);
}

24
modes/Starfield.h Normal file
View File

@ -0,0 +1,24 @@
#ifndef STARFIELD_H
#define STARFIELD_H
#include "LogoBox.h"
#include "Mode.h"
#include "GnomeScreensaver.h"
class Starfield : public Mode
{
public:
Starfield();
~Starfield();
bool expose (GnomeScreensaver & gs);
bool configure (GnomeScreensaver & gs);
bool update (GnomeScreensaver & gs);
protected:
LogoBox m_logobox;
uint64_t m_last_ticks;
void getRandomAxis(float (*axis)[3]);
};
#endif /* STARFIELD_H */