Created
August 19, 2013 04:24
-
-
Save vaskaloidis/6265757 to your computer and use it in GitHub Desktop.
C++ 3D City Building Fly-Through
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include GLUT/glut.h | |
#include iostream | |
#include stdlib.h | |
#include math.h | |
#include cmath | |
using namespace std; | |
class wcPt2D // class to represent a 2D point | |
{ | |
public: | |
GLfloat x, y, z; | |
}; | |
wcPt2D look; | |
wcPt2D eye; | |
GLfloat yScale; | |
GLfloat xScale; | |
GLfloat yTranslate; | |
GLfloat xTranslate; | |
GLfloat zTranslate; | |
GLfloat color1, color2, color3; | |
/* Lights */ | |
GLfloat globalAmbient[]={.0, .0, .0, 1.0}; // Global lighting | |
/* Light 0 is the overhead light */ | |
GLfloat light0_ambient[]={.1, .1, .1, 1.0}; | |
GLfloat light0_diffuse[]={.5, .5, .5, 1.0}; | |
GLfloat light0_specular[]={.1, .1, .1, 1.0}; | |
GLfloat light0_position[]={0.0, 1.5 , 0.0, 0.0}; // change last value to 1.0 to make this positional | |
/* Light 1 is the bottom light */ | |
GLfloat light1_ambient[]={.1, .1, .1, 1.0}; | |
GLfloat light1_diffuse[]={.5, .5, .5, 1.0}; | |
GLfloat light1_specular[]={.1, .1, .1, 1.0}; | |
GLfloat light1_position[]={0.0, -1.5 , 0.0, 0.0}; // change last value to 1.0 to make this positional | |
/* Light 3 is right spotlight */ | |
GLfloat light3_ambient[]={.1, .1, .1, 1.0}; | |
GLfloat light3_diffuse[]={.5, .5, .5, 1.0}; | |
GLfloat light3_specular[]={.1, .1, .1, 1.0}; | |
GLfloat dirVectorLight3[]={0.0, 0.0, 0.0}; | |
GLfloat light3_position[]={0.0, 0.0, 0.0, 1.0}; | |
/* Light 4 is right spotlight */ | |
GLfloat light4_ambient[]={.5, .5, .5, 1.0}; | |
GLfloat light4_diffuse[]={.5, .5, .5, 1.0}; | |
GLfloat light4_specular[]={.1, .1,.1, 1.0}; | |
GLfloat dirVectorLight4[]={0.0, 0.0, 0.0}; | |
GLfloat light4_position[]={0.0, 0.0, 0.0, 1.0}; | |
/* Materials */ | |
//http://www.opengl.org/archives/resources/code/samples/sig99/advanced99/notes/node153.html | |
//Brass | |
GLfloat matBrass_specular[]={.992157, .941176, .807843, 1.0}; | |
GLfloat matBrass_diffuse[]={.780392, .568627, .113725, 1.0}; | |
GLfloat matBrass_ambient[]={.329412, .223529, .027451, 1.0}; | |
GLfloat matBrass_shininess={27.8974}; | |
//Chrome | |
GLfloat matChrome_specular[]={.774597, .458561, .200621, 1.0}; | |
GLfloat matChrome_diffuse[]={.4, .4, .4, 1.0}; | |
GLfloat matChrome_ambient[]={.25, .25, .25, 1.0}; | |
GLfloat matChrome_shininess={76.8}; | |
//Jade | |
GLfloat matJade_specular[]={.316228, .316228, .316228, .95}; | |
GLfloat matJade_diffuse[]={.54, .89, .63, .95}; | |
GLfloat matJade_ambient[]={.135, .2225, .1575, .95}; | |
GLfloat matJade_shininess={12.8}; | |
//Polished | |
GLfloat matPolished_specular[]={.774597, .774597, .774597, 1.0}; | |
GLfloat matPolished_diffuse[]={.4, .4, .4, 1.0}; | |
GLfloat matPolished_ambient[]={.25, .25, .25, 1.0}; | |
GLfloat matPolished_shininess={76.8}; | |
//Gold | |
GLfloat matGold_specular[]={.628281, .555802, .366065, 1.0}; | |
GLfloat matGold_diffuse[]={.75164, .60648, .22648, 1.0}; | |
GLfloat matGold_ambient[]={.24725, .1995, .0745, 1.0}; | |
GLfloat matGold_shininess={51.2}; | |
//Ruby | |
GLfloat matRuby_specular[]={.727811, .626959, .626959, .55}; | |
GLfloat matRuby_diffuse[]={.61424, .04136, .04136, .55}; | |
GLfloat matRuby_ambient[]={.1745, .01175, .01175, .55}; | |
GLfloat matRuby_shininess={76.8}; | |
bool start, initial; | |
void init(void) | |
{ | |
glEnable(GL_CULL_FACE); | |
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
glPolygonMode(GL_BACK, GL_FILL); | |
glPolygonMode(GL_FRONT, GL_FILL); | |
//glEnable(GL_COLOR_MATERIAL); | |
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, globalAmbient); | |
glShadeModel(GL_SMOOTH); /* enable smooth shading */ | |
glClearColor (0.0, 0.0, 0.0, 1.0); | |
glColor3f (1.0, 1.0, 1.0); | |
glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); | |
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse); | |
glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular); | |
glLightfv(GL_LIGHT0, GL_POSITION, light0_position); | |
glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient); | |
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse); | |
glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular); | |
glLightfv(GL_LIGHT1, GL_POSITION, light1_position); | |
light4_position[0]=2.0; | |
light4_position[1]=0.0; | |
light4_position[2]=1.0; | |
light4_position[3]=1.0; | |
glLightf (GL_LIGHT4, GL_SPOT_CUTOFF, 40.0); | |
glLightf(GL_LIGHT4, GL_SPOT_EXPONENT, 10.5); | |
glLightfv(GL_LIGHT4, GL_AMBIENT, light4_ambient); | |
glLightfv(GL_LIGHT4, GL_DIFFUSE, light4_diffuse); | |
glLightfv(GL_LIGHT4, GL_SPECULAR, light4_specular); | |
glLightfv(GL_LIGHT4, GL_POSITION, light4_position); | |
light3_position[0]=2.0; | |
light3_position[1]=0.0; | |
light3_position[2]=1.0; | |
light3_position[3]=1.0; | |
glLightf (GL_LIGHT3, GL_SPOT_CUTOFF, 40.0); | |
glLightf(GL_LIGHT3, GL_SPOT_EXPONENT, 10.5); | |
glLightfv(GL_LIGHT3, GL_AMBIENT, light3_ambient); | |
glLightfv(GL_LIGHT3, GL_DIFFUSE, light3_diffuse); | |
glLightfv(GL_LIGHT3, GL_SPECULAR, light3_specular); | |
glLightfv(GL_LIGHT3, GL_POSITION, light3_position); | |
start = true; | |
look.x = 3; | |
look.y = 14; | |
look.z = 20; | |
eye.z = 20; | |
eye.x = 0; | |
zTranslate = 0; | |
xTranslate = 0; | |
initial = true; | |
glClearColor (0.0, 0.0, 0.0, 0.0); | |
glShadeModel (GL_SMOOTH); | |
glEnable(GL_LIGHTING); | |
//glEnable(GL_DEPTH_TEST); | |
} | |
void aCube(string color) // draw the cube | |
{ | |
glPolygonMode(GL_FRONT, GL_FILL); // front is solid fill | |
glPolygonMode(GL_BACK, GL_LINE); // back is wireframe | |
GLfloat x1[] = {-1, 1, -1}; // left back top | |
GLfloat x2[] = {-1, 1, 1}; // left front top | |
GLfloat x3[] = {1, 1, 1}; // right front top | |
GLfloat x4[] = {1, 1, -1}; // right back top | |
GLfloat x5[] = {-1, -1, -1}; // left back bottom | |
GLfloat x6[] = {-1, -1, 1}; // left front bottom | |
GLfloat x7[] = {1, -1, 1}; // right front bottom | |
GLfloat x8[] = {1, -1, -1}; // right back bottom | |
glBegin(GL_QUADS); | |
//Top | |
if(color == "aComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matBrass_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrass_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrass_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matBrass_shininess); | |
} else if(color == "bComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
color3 = .2; | |
} else if(color == "cComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matRuby_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matRuby_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matRuby_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matRuby_shininess); | |
} else if(color == "dComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matPolished_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matPolished_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matPolished_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matPolished_shininess); | |
} else if(color == "eComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
} | |
glNormal3f(0,1,0); | |
glVertex3fv(x1); | |
glVertex3fv(x2); | |
glVertex3fv(x3); | |
glVertex3fv(x4); | |
//Bottom | |
if(color == "aComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matBrass_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrass_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrass_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matBrass_shininess); | |
} else if(color == "bComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
color3 = .2; | |
} else if(color == "cComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matRuby_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matRuby_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matRuby_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matRuby_shininess); | |
} else if(color == "dComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matPolished_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matPolished_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matPolished_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matPolished_shininess); | |
} else if(color == "eComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
} | |
glNormal3f(0,-1,0); | |
glVertex3fv(x5); | |
glVertex3fv(x8); | |
glVertex3fv(x7); | |
glVertex3fv(x6); | |
//Back | |
if(color == "aComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matBrass_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrass_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrass_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matBrass_shininess); | |
} else if(color == "bComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
color3 = .2; | |
} else if(color == "cComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matRuby_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matRuby_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matRuby_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matRuby_shininess); | |
} else if(color == "dComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matPolished_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matPolished_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matPolished_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matPolished_shininess); | |
} else if(color == "eComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
} | |
glNormal3f(0,0,-1); | |
glVertex3fv(x1); | |
glVertex3fv(x4); | |
glVertex3fv(x8); | |
glVertex3fv(x5); | |
//Front | |
if(color == "aComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matBrass_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrass_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrass_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matBrass_shininess); | |
} else if(color == "bComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
color3 = .2; | |
} else if(color == "cComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matRuby_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matRuby_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matRuby_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matRuby_shininess); | |
} else if(color == "dComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matPolished_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matPolished_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matPolished_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matPolished_shininess); | |
} else if(color == "eComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
} | |
glNormal3f(0,0,1); | |
glVertex3fv(x2); | |
glVertex3fv(x6); | |
glVertex3fv(x7); | |
glVertex3fv(x3); | |
//Left | |
if(color == "aComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matBrass_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrass_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrass_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matBrass_shininess); | |
} else if(color == "bComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
color3 = .2; | |
} else if(color == "cComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matRuby_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matRuby_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matRuby_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matRuby_shininess); | |
} else if(color == "dComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matPolished_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matPolished_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matPolished_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matPolished_shininess); | |
} else if(color == "eComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
} | |
glNormal3f(-1,0,0); | |
glVertex3fv(x2); | |
glVertex3fv(x1); | |
glVertex3fv(x5); | |
glVertex3fv(x6); | |
//Right | |
if(color == "aComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matBrass_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrass_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrass_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matBrass_shininess); | |
} else if(color == "bComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
color3 = .2; | |
} else if(color == "cComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matRuby_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matRuby_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matRuby_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matRuby_shininess); | |
} else if(color == "dComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matPolished_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matPolished_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matPolished_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matPolished_shininess); | |
} else if(color == "eComplex"){ | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matJade_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matJade_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matJade_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matJade_shininess); | |
} | |
glNormal3f(1,0,0); | |
glVertex3fv(x4); | |
glVertex3fv(x3); | |
glVertex3fv(x7); | |
glVertex3fv(x8); | |
glEnd(); | |
} | |
void B_Complex(){ | |
glTranslatef(2, 0, -8); | |
glScalef(1, 2, 1); | |
aCube("bComplex"); | |
} | |
void A_Complex(){ | |
glTranslatef(-3, 0, 0); | |
glScalef(1, 3, 2); | |
aCube("aComplex"); | |
} | |
void C_Complex(){ | |
glTranslatef(-5, 0, -10); | |
glScalef(1, 5, 1); | |
aCube("cComplex"); | |
} | |
void D_Complex(){ | |
glTranslatef(1, 0, -14); | |
glScalef(2, 4, 1); | |
aCube("dComplex"); | |
} | |
void complex(){ | |
glTranslatef(5, 0, -3); | |
glScalef(1, 3, 2); | |
glRotated(2, 0, 0, 0); | |
aCube("eComplex"); | |
} | |
void DrawCube(void) | |
{ | |
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
glEnable(GL_LIGHTING); /* turn lights on */ | |
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); | |
glEnable(GL_LIGHT0); | |
//glEnable(GL_LIGHT1); | |
glEnable(GL_LIGHT2); | |
glEnable(GL_LIGHT3); | |
glEnable(GL_LIGHT4); | |
//glMatrixMode(GL_MODELVIEW); | |
//glutSolidSphere (1.0, 20, 16); | |
A_Complex(); | |
glColor3f(.0, .0, .0); | |
glLoadIdentity(); | |
gluLookAt(look.x, look.y, look.z, eye.x, 0, -20, 0, 1, 0); | |
glPushMatrix(); | |
glBegin(GL_QUADS); | |
glMaterialfv(GL_FRONT, GL_SPECULAR, matBrass_specular); | |
glMaterialfv(GL_FRONT, GL_AMBIENT, matBrass_ambient); | |
glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrass_diffuse); | |
glMaterialf(GL_FRONT, GL_SHININESS, matBrass_shininess); | |
glNormal3f(10, 0, 1); | |
glVertex3f(-10, -3, -15); | |
glVertex3f(-10, -3, 11); | |
glVertex3f(10, -3, 11); | |
glVertex3f(10, -3, -15); | |
glEnd(); | |
glPopMatrix(); | |
glPushMatrix(); | |
A_Complex(); | |
glPopMatrix(); | |
glPushMatrix(); | |
B_Complex(); | |
glPopMatrix(); | |
glPushMatrix(); | |
C_Complex(); | |
glPopMatrix(); | |
glPushMatrix(); | |
D_Complex(); | |
glPopMatrix(); | |
glPushMatrix(); | |
complex(); | |
glPopMatrix(); | |
glutSwapBuffers(); | |
} | |
void reshape(int x, int y) | |
{ | |
if (y == 0 || x == 0) return; //Nothing is visible then, so return | |
//Set a new projection matrix | |
glMatrixMode(GL_PROJECTION); | |
glLoadIdentity(); | |
gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,200); | |
glMatrixMode(GL_MODELVIEW); | |
//glViewport(0,0,x,y); //Use the whole window for rendering | |
glLoadIdentity(); | |
} | |
void timer(int input){ | |
if(start){ | |
if(look.z > -12){ | |
look.z -= .05; | |
if(look.z < 9){ | |
if(look.x > 0){ | |
look.x -= .05; | |
} | |
} | |
if(look.y > 4){ | |
look.y -= .05; | |
} | |
} | |
if(look.z < -9){ | |
eye.x += .5; | |
look.x += .2; | |
if(look.x > 7){ | |
start = false; | |
} | |
} | |
} else { | |
eye.x = 0; | |
eye.z = 0; | |
eye.y = 0; | |
look.y = 10; | |
look.z = 20; | |
look.x = 0; | |
} | |
cout << "z - " << look.z << endl; | |
cout << "x - " << look.x << endl; | |
glutTimerFunc(30, timer, 1); | |
glutPostRedisplay(); | |
} | |
void key(unsigned char key, int x, int y){ | |
switch(key){ | |
case 'g': { | |
start = true; | |
glutPostRedisplay(); | |
break; | |
} | |
} | |
DrawCube(); | |
} | |
void animation(void) | |
{ | |
DrawCube(); | |
} | |
int main(int argc, char** argv){ | |
glutInit(&argc, argv); | |
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); | |
glutInitWindowPosition(10, 10); | |
glutInitWindowSize(1000, 800); | |
glutCreateWindow(argv[0]); | |
init(); | |
glEnable(GL_DEPTH_TEST); | |
glutDisplayFunc(DrawCube); | |
glutReshapeFunc(reshape); | |
glutKeyboardFunc(key); | |
glutIdleFunc(animation); | |
glutTimerFunc(50, timer, 1); | |
glutMainLoop(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment