Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <GL/glut.h>
- #include <GL/gl.h>
- #include <stdlib.h>
- #include "pomoc/glpomoc.h"
- #include "pomoc/materials.h"
- using namespace std;
- GLPFrame frameCamera; //dla kamery
- GLfloat fPozycja_swiatla[4]={0.0f,30.0f,50.0f,1.0f};
- GLfloat fPozycja_reflektora1[4]={0.0f,30.0f,50.0f,1.0f};
- GLfloat fSlabe_swiatlo[]={0.25f,0.25f,0.25f,1.0f};
- GLfloat fMocne_swiatlo[]={1.0f,1.0f,1.0f,1.0f};
- GLfloat fPozycja_reflektora2[4]={0.0f,30.0f,50.0f,1.0f};
- GLfloat fKierunek_reflektora2[4]={-5.0f,-2.0f,5.0f,1.0f};
- GLfloat fPozycja_reflektora3[4]={0.0f,30.0f,50.0f,1.0f};
- GLfloat fKierunek_reflektora3[4]={2.0f,-2.0f,1.0f,1.0f};
- GLfloat ambient_chrome[]={0.25,0.25,0.25,0.6};
- GLfloat diffuse_chrome[]={0.4,0.4,0.4,0.6};
- GLfloat specular_chrome[]={0.774597,0.774597,0.774597,0.6};
- GLfloat shininess_chrome=76.8;
- GLfloat ambient_gold[]={0.24725,0.1995,0.0745,0.6};
- GLfloat diffuse_gold[]={0.75164,0.60648,0.22648,0.61};
- GLfloat specular_gold[]={0.628281,0.55502,0.36065,0.6};
- GLfloat shininess_gold=51.2;
- const GLfloat * ambient=mtlBrassAmbient;
- const GLfloat * diffuse=mtlBrassDiffuse;
- const GLfloat * specular=mtlBrassSpecular;
- GLfloat shininess=mtlBrassShininess;
- //zmienne wyliczeniowe menu podrecznego
- enum
- {
- BRASS,
- BRONZE,
- POLISHED_BRONZE,
- CHROME,
- COPPER,
- POLISHED_COPPER,
- GOLD,
- POLISHED_GOLD,
- PEWTER,
- SILVER,
- POLISHED_SILVER,
- EKERALD,
- JADE,
- OBSIDIAN,
- PEARL,
- RUBY,
- TURQUOISE,
- BLACK_PLASTIC,
- BLACK_RUBBER,
- //EXIT
- FULL_WINDOW, // obszar renderingu - ca³e okno
- ASPECT_1_1, // obszar renderingu - aspekt 1:1
- EXIT, // wyjœcie
- ORTHO, // rzutowanie ortogonalne
- PERSP // rzutowanie perspektywiczne
- };
- //oswietlenie
- bool swiatlo1=0, swiatlo2=0, swiatlo3=0, swiatlo4=0;
- float rA=0.0f, rB=-5.0f;
- float rCR=0.0f, rCG=0.0f, rCB=0.0f;
- // Wielkoœæ obrotów i przesuniêcia
- GLfloat alfa1 = 0.0f;
- GLfloat alfa2 = 0.0f;
- GLfloat alfa3 = 0.0f;
- float angle1 = 0.0f;
- float angle2 = 0.0f;
- /**/float angle3 = 0.0f;
- float angle4 = 0.0f;
- float angle5 = 0.0f;
- float angle6 = 0.0f;
- float angle7 = 0.0f;
- float angle8 = 0.0f;
- float angle9 = 0.0f;/**/
- float rot1=0.0f, rot2=1.0f, rot3=1.0f;
- // aspekt obrazu
- GLint skala = FULL_WINDOW;
- // rzutowanie
- GLint rzut = PERSP;
- // k¹t rzutowania
- GLdouble fovy = 90;
- //Definiowanie ustawien dotyczacych sposobu rusowania obiektow
- void Ustawienia ()
- {
- // Czarne t³o
- glClearColor(0.0f,0.0f,0.0f,1.0f);
- // Model cieniowania kolorów - p³aski
- glShadeModel(GL_SMOOTH);
- //Nawiniêcie wielok¹tów
- glFrontFace(GL_CCW);
- //Inicjowanie kamery
- glpInitFrame (&frameCamera);
- // W³¹czenie lub wy³¹czenie mechanizmu eliminowania ukrytych powierzchni
- glEnable(GL_CULL_FACE);
- // W³¹czenie lub wy³¹czenie mechanizmu sprawdzania g³êbi
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_COLOR_MATERIAL);
- glEnable(GL_LIGHTING);
- // Je¿eli ten znacznik bêdzie ustawiony, to wielok¹ty zwrócone
- // ty³em do widza bêd¹ rysowane tylko w postaci szkieletu
- glPolygonMode(GL_BACK,GL_LINE);
- glPolygonMode(GL_FRONT,GL_FILL);
- glpMoveFrameForward(&frameCamera, -100.0f);
- glpMoveFrameUp(&frameCamera, 10.0f);
- }
- //Wyjscie z programu
- void Wyjscie (void)
- {
- }
- //Rysowanie podloza
- void Podloze ()
- {
- GLfloat Range = 20.0f;
- GLfloat Tlo_x;
- GLfloat Tlo_z;
- GLfloat red = 0.1f;
- GLfloat green = 0.1f;
- GLfloat blue = 0.1f;
- // glColor3f (red, green, blue);
- for (Tlo_x = -Range * 5; Tlo_x <= Range * 5; Tlo_x += 2.0)
- {
- glColor4f (0.8f, 0.1f, 0.1f, 0.6f);
- for (Tlo_z = -Range * 5; Tlo_z <= Range * 5; Tlo_z += 2.0)
- {
- if (red == 0.1f)
- {
- red = 0.8f;
- green = 0.1f;
- blue = 0.1f;
- }
- else
- {
- red = 0.1f;
- green = 0.1f;
- blue = 0.8f;
- }
- glColor4f (red, green, blue, 0.6f);
- glBegin (GL_QUADS);
- //wektory normalne wskazujace gore
- glNormal3f (0.0f, 1.0f, 0.0f);
- glVertex3f (Tlo_x, 0.0f, Tlo_z);
- glVertex3f (Tlo_x, 0.0f, Tlo_z + 2.0f);
- glVertex3f (Tlo_x + 2.0f, 0.0f, Tlo_z + 2.0f);
- glVertex3f (Tlo_x + 2.0f, 0.0f, Tlo_z);
- glEnd ();
- }
- }
- }
- float s1=0, s2=0, s3=0;
- //Rysowaie aktorow na scenie
- void Rys_aktorow (GLint czy_cien)
- {
- glPushMatrix();
- glutSolidCube(10.0f);
- glTranslatef(s1,s2,s3);
- glPopMatrix();
- GLfloat fKierunek_reflektora1[4]={rA,-2.0f,rB,1.0f};
- float x1=0;
- float y1=0;
- float z1=0;
- float x2=0;
- float y2=0;
- float z2=0;
- /**/
- float x3=0;
- float y3=0;
- float z3=0;
- float x4=0;
- float y4=0;
- float z4=0;
- float x5=0;
- float y5=0;
- float z5=0;
- float x6=0;
- float y6=0;
- float z6=0;
- float x7=0;
- float y7=0;
- float z7=0;
- float x8=0;
- float y8=0;
- float z8=0;
- float x9=0;
- float y9=0;
- float z9=0;
- float x10=0;
- float y10=0;
- float z10=0; /**/
- alfa1+=1.0;
- alfa2+=1.0;
- alfa3+=1.0;
- //ziemia
- angle1+=0.02f;
- if(angle1>=(2.0f*3.14159f)*1.0f)
- angle1=0.0f;
- //ksiê¿yc
- angle2+=0.1f;
- if(angle2>=(2.0f*3.14159f)*1.0f)
- angle2=0.0f;
- //mars
- angle3+=0.01f;
- if(angle3>=(2.0f*3.14159f)*1.0f)
- angle3=0.0f;
- //merkury
- angle4+=0.1f;
- if(angle4>=(2.0f*3.14159f)*1.0f)
- angle4=0.0f;
- //wenus
- angle5+=0.05f;
- if(angle5>=(2.0f*3.14159f)*1.0f)
- angle5=0.0f;
- //jowisz
- angle6+=0.005f;
- if(angle6>=(2.0f*3.14159f)*1.0f)
- angle6=0.0f;
- //saturn
- angle7+=0.002f;
- if(angle7>=(2.0f*3.14159f)*1.0f)
- angle7=0.0f;
- //uran
- angle8+=0.001f;
- if(angle8>=(2.0f*3.14159f)*1.0f)
- angle8=0.0f;
- //neptun
- angle9+=0.0005f;
- if(angle9>=(2.0f*3.14159f)*1.0f)
- angle9=0.0f;
- if(swiatlo1)
- {
- glLightfv(GL_LIGHT0,GL_AMBIENT,fSlabe_swiatlo);
- glLightfv(GL_LIGHT0,GL_DIFFUSE,fMocne_swiatlo);
- glLightfv(GL_LIGHT0,GL_SPECULAR,fMocne_swiatlo);
- glLightfv(GL_LIGHT0,GL_POSITION,fPozycja_swiatla);
- glEnable(GL_LIGHT0);
- }
- else
- glDisable(GL_LIGHT0);
- if(swiatlo2)
- {
- glLightfv(GL_LIGHT1,GL_AMBIENT,fSlabe_swiatlo);
- glLightfv(GL_LIGHT1,GL_DIFFUSE,fMocne_swiatlo);
- glLightfv(GL_LIGHT1,GL_SPECULAR,fMocne_swiatlo);
- glLightfv(GL_LIGHT1,GL_POSITION,fPozycja_reflektora1);
- glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,fKierunek_reflektora1);
- glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,30.0f);
- glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,10.0f);
- glEnable(GL_LIGHT1);
- }
- else
- glDisable(GL_LIGHT1);
- if(swiatlo3)
- {
- glLightfv(GL_LIGHT2,GL_AMBIENT,fSlabe_swiatlo);
- glLightfv(GL_LIGHT2,GL_DIFFUSE,fMocne_swiatlo);
- glLightfv(GL_LIGHT2,GL_SPECULAR,fMocne_swiatlo);
- glLightfv(GL_LIGHT2,GL_POSITION,fPozycja_reflektora2);
- glLightfv(GL_LIGHT2,GL_SPOT_DIRECTION,fKierunek_reflektora2);
- glLightf(GL_LIGHT2,GL_SPOT_CUTOFF,30.0f);
- glLightf(GL_LIGHT2,GL_SPOT_EXPONENT,10.0f);
- glEnable(GL_LIGHT2);
- }
- else
- glDisable(GL_LIGHT2);
- if(swiatlo4)
- {
- glLightfv(GL_LIGHT3,GL_AMBIENT,fSlabe_swiatlo);
- glLightfv(GL_LIGHT3,GL_DIFFUSE,fMocne_swiatlo);
- glLightfv(GL_LIGHT3,GL_SPECULAR,fMocne_swiatlo);
- glLightfv(GL_LIGHT3,GL_POSITION,fPozycja_reflektora3);
- glLightfv(GL_LIGHT3,GL_SPOT_DIRECTION,fKierunek_reflektora3);
- glLightf(GL_LIGHT3,GL_SPOT_CUTOFF,30.0f);
- glLightf(GL_LIGHT3,GL_SPOT_EXPONENT,10.0f);
- glEnable(GL_LIGHT3);
- }
- else
- glDisable(GL_LIGHT3);
- glPushMatrix();
- //slonce
- glPushMatrix();
- glRotatef(alfa1,1.0f,0.0f,0.0f);
- // kolor kuli
- glColor3f(1.0f,1.0f,0.0f);
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
- glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
- //glTranslatef(0,10,0);
- glutSolidSphere(20.0f,50,20);
- glPopMatrix();
- glPushMatrix();
- glMaterialfv(GL_FRONT,GL_AMBIENT,ambient_chrome);
- glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse_chrome);
- glMaterialfv(GL_FRONT,GL_SPECULAR,specular_chrome);
- glMaterialf(GL_FRONT,GL_SHININESS,shininess_chrome);
- //orbita ziemi
- glRotatef(-30,0,1,1);
- glPushMatrix();
- glColor3f(0,0,1);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
- {
- glBegin(GL_POINTS);
- x1=50.0f*sin(angle);
- z1=50.0f*cos(angle);
- glVertex3f(x1,y1,z1);
- glEnd();
- }
- glPopMatrix();
- //ziemia
- glPushMatrix();
- x1=50.0f*sin(angle1);
- z1=50.0f*cos(angle1);
- glTranslatef(x1,y1,z1);
- glRotatef(alfa2,x1,y1,z1);
- glutSolidSphere(3.0f,20,20);
- glPopMatrix();
- glPopMatrix();
- glMaterialfv(GL_FRONT,GL_AMBIENT,ambient_gold);
- glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse_gold);
- glMaterialfv(GL_FRONT,GL_SPECULAR,specular_gold);
- glMaterialf(GL_FRONT,GL_SHININESS,shininess_gold);
- glPushMatrix();
- glColor3f(1,1,1);
- //orbita ksiê¿yca
- glPushMatrix();
- glColor3f(1,1,1);
- x1=50.0f*sin(angle1);
- z1=50.0f*cos(angle1);
- glTranslatef(x1,y1,z1);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.01f)
- {
- glBegin(GL_POINTS);
- y2=5.0f*sin(angle);
- z2=5.0f*cos(angle);
- glVertex3f(x2,y2,z2);
- glEnd();
- }
- glPopMatrix();
- //ksiê¿yc
- glPushMatrix();
- glTranslatef(x1,y1,z1);
- y2=5.0f*sin(angle2);
- z2=5.0f*cos(angle2);
- glTranslatef(x2,y2,z2);
- glRotatef(alfa3,x2,y2,z2);
- glutSolidSphere(0.4f,20,20);
- glPopMatrix();
- glPopMatrix();
- /**/
- glPushMatrix();
- //orbita marsa
- glRotatef(-30,0,1,1);
- glPushMatrix();
- glColor3f(1,0,0);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
- {
- glBegin(GL_POINTS);
- x3=60.0f*sin(angle);
- z3=60.0f*cos(angle);
- glVertex3f(x3,y3,z3);
- glEnd();
- }
- glPopMatrix();
- //mars
- glPushMatrix();
- x3=60.0f*sin(angle3);
- z3=60.0f*cos(angle3);
- glTranslatef(x3,y3,z3);
- glRotatef(alfa2,x3,y3,z3);
- glutSolidSphere(2.0f,20,20);
- glPopMatrix();
- glPopMatrix();
- glPushMatrix();
- //orbita merkurego
- glRotatef(-30,0,1,1);
- glPushMatrix();
- glColor3f(1,0,1);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
- {
- glBegin(GL_POINTS);
- x4=30.0f*sin(angle);
- z4=30.0f*cos(angle);
- glVertex3f(x4,y4,z4);
- glEnd();
- }
- glPopMatrix();
- //mrkury
- glPushMatrix();
- x4=30.0f*sin(angle4);
- z4=30.0f*cos(angle4);
- glTranslatef(x4,y4,z4);
- glRotatef(alfa2,x4,y4,z4);
- glutSolidSphere(1.0f,20,20);
- glPopMatrix();
- glPopMatrix();
- glPushMatrix();
- //orbita wenus
- glRotatef(-30,0,1,1);
- glPushMatrix();
- glColor3f(0.5,0.7,0);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
- {
- glBegin(GL_POINTS);
- x5=40.0f*sin(angle);
- z5=40.0f*cos(angle);
- glVertex3f(x5,y5,z5);
- glEnd();
- }
- glPopMatrix();
- //wenus
- glPushMatrix();
- x5=40.0f*sin(angle5);
- z5=40.0f*cos(angle5);
- glTranslatef(x5,y5,z5);
- glRotatef(alfa2,x5,y5,z5);
- glutSolidSphere(2.0f,20,20);
- glPopMatrix();
- glPopMatrix();
- glPushMatrix();
- glMaterialfv(GL_FRONT,GL_AMBIENT,ambient_chrome);
- glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse_chrome);
- glMaterialfv(GL_FRONT,GL_SPECULAR,specular_chrome);
- glMaterialf(GL_FRONT,GL_SHININESS,shininess_chrome);
- //orbita jowisz
- glRotatef(-30,0,1,1);
- glPushMatrix();
- glColor3f(0.5,0.7,0.8);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
- {
- glBegin(GL_POINTS);
- x6=70.0f*sin(angle);
- z6=70.0f*cos(angle);
- glVertex3f(x6,y6,z6);
- glEnd();
- }
- glPopMatrix();
- //jowisz
- glPushMatrix();
- x6=70.0f*sin(angle6);
- z6=70.0f*cos(angle6);
- glTranslatef(x6,y6,z6);
- glRotatef(alfa2,x6,y6,z6);
- glutSolidSphere(5.0f,20,20);
- glPopMatrix();
- glPopMatrix();
- glPushMatrix();
- //orbita saturn
- glRotatef(-30,0,1,1);
- glPushMatrix();
- glColor3f(0.8,0.8,0.8);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
- {
- glBegin(GL_POINTS);
- x7=80.0f*sin(angle);
- z7=80.0f*cos(angle);
- glVertex3f(x7,y7,z7);
- glEnd();
- }
- glPopMatrix();
- //saturn
- glPushMatrix();
- x7=80.0f*sin(angle7);
- z7=80.0f*cos(angle7);
- glTranslatef(x7,y7,z7);
- glRotatef(alfa2,x7,y7,z7);
- glutSolidSphere(3.0f,20,20);
- glPopMatrix();
- glPushMatrix();
- //orbita saturna
- glPushMatrix();
- glColor3f(0.8,0.8,0.8);
- x7=80.0f*sin(angle7);
- z7=80.0f*cos(angle7);
- glTranslatef(x7,y7,z7);
- glRotatef(50,0,1,1);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.01f)
- {
- for(float j=5;j<7;j+=0.3)
- {
- glBegin(GL_POINTS);
- y8=j*sin(angle);
- z8=j*cos(angle);
- glVertex3f(x8,y8,z8);
- glEnd();
- }
- }
- glPopMatrix();
- glPopMatrix();
- glPopMatrix();
- glPushMatrix();
- //orbita uran
- glRotatef(-30,0,1,1);
- glPushMatrix();
- glColor3f(0.9,0.2,0.1);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
- {
- glBegin(GL_POINTS);
- x9=90.0f*sin(angle);
- z9=90.0f*cos(angle);
- glVertex3f(x9,y9,z9);
- glEnd();
- }
- glPopMatrix();
- //uran
- glPushMatrix();
- x9=90.0f*sin(angle8);
- z9=90.0f*cos(angle8);
- glTranslatef(x9,y9,z9);
- glRotatef(alfa2,x9,y9,z9);
- glutSolidSphere(3.0f,20,20);
- glPopMatrix();
- glPopMatrix();
- glPushMatrix();
- //orbita neptun
- glRotatef(-30,0,1,1);
- glPushMatrix();
- glColor3f(0.9,0.8,0.1);
- for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
- {
- glBegin(GL_POINTS);
- x10=100.0f*sin(angle);
- z10=100.0f*cos(angle);
- glVertex3f(x10,y10,z10);
- glEnd();
- }
- glPopMatrix();
- //neptun
- glPushMatrix();
- x10=100.0f*sin(angle9);
- z10=100.0f*cos(angle9);
- glTranslatef(x10,y10,z10);
- glRotatef(alfa2,x10,y10,z10);
- glutSolidSphere(2.0f,20,20);
- glPopMatrix();
- glPopMatrix();
- /**/
- glPopMatrix();
- }
- //Rysowanie sceny
- void Display ()
- {
- // kolor t³a - zawartoœæ bufora koloru
- glClearColor (0.0,0.0,0.0,1.0);
- // czyszczenie bufora koloru
- glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- // Ustawienie stosu macierzy modelowania
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- //dodanie kamery
- glpApplyCameraTransform (&frameCamera);
- glPushMatrix ();
- glPushMatrix();
- glTranslatef(0,-10,0);
- Podloze ();
- glPopMatrix();
- glTranslatef(0.0,20.0,0.0);
- glRotatef(rot1,0.0,0.0,0.0);
- glRotatef(rot2,0.0,0.0,1.0);
- glRotatef(-rot3,0.0,1.0,0.0);
- Rys_aktorow (0);
- glPopMatrix ();
- // skierowanie poleceñ do wykonania
- glFlush ();
- // zamiana buforów koloru
- glutSwapBuffers();
- }
- void Reshape (int width, int height)
- {
- // obszar renderingu - ca³e okno
- glViewport (0,0,width,height);
- // wybór macierzy rzutowania
- glMatrixMode (GL_PROJECTION);
- // macierz rzutowania = macierz jednostkowa
- glLoadIdentity ();
- // obliczenie aspektu obrazu z uwzglêdnieniem
- // przypadku, gdy wysokoϾ obrazu wynosi 0
- GLdouble aspect = 1;
- GLfloat zakres = 250.0f;
- GLfloat blisko = 1.0f;
- GLfloat daleko = 250.0f;
- // rzutowanie ortogonalne
- if (rzut==ORTHO)
- {
- // skala 1:1
- if (skala==ASPECT_1_1)
- {
- if (width < height && width > 0)
- glOrtho (-zakres,zakres,-zakres*height/width,zakres*height/width,-zakres,zakres);
- else
- if (width >= height && height > 0)
- glOrtho (-zakres*width/height,zakres*width/height,-zakres,zakres,-zakres,zakres);
- }
- else
- glOrtho (-zakres,zakres,-zakres,zakres,-zakres,zakres);
- }
- // rzutowanie perspektywiczne
- if (rzut==PERSP)
- {
- if (height > 0)
- aspect = width/(GLdouble)height;
- gluPerspective (fovy,aspect,blisko,daleko);
- }
- Display ();
- }
- void Keyboard (unsigned char key, int x, int y)
- {
- switch(key)
- {
- case 'a':
- rot1+=1.0;
- break;
- case 'd':
- rot2*=1.1;
- if(rot2>360.0)
- rot2*=0.2;
- break;
- case 's':
- rot3+=1.0;
- if(rot3>360.0)
- rot3*=0.2;
- break;
- }
- switch(key)
- {
- case '1':
- rA-=0.5f;
- break;
- case '2':
- rA+=0.5f;
- break;
- case '3':
- rB-=0.5f;
- break;
- case '4':
- rB+=0.5f;
- break;
- }
- s1=0.0f;
- s2=0.0f;
- s3=0.0f;
- switch(key)
- {
- case '8':
- s1+=5.0f;
- break;
- case '5':
- s3-=5.0f;
- break;
- case 'r':
- fMocne_swiatlo[0]+=10.0f;
- break;
- case 'g':
- fMocne_swiatlo[1]+=10.0f;
- break;
- case 'b':
- fMocne_swiatlo[2]+=10.0f;
- break;
- case 'y':
- fMocne_swiatlo[3]+=10.0f;
- break;
- }
- if(fMocne_swiatlo[0]>=255.0f)
- {
- fMocne_swiatlo[0]=0.0f;
- fMocne_swiatlo[1]=0.0f;
- fMocne_swiatlo[2]=0.0f;
- fMocne_swiatlo[3]=0.0f;
- }
- glutPostRedisplay();
- /*switch (key)
- {
- case '1':
- obrot1=!obrot1;
- break;
- case '2':
- obrot2=!obrot2;
- break;
- case '3':
- obrot3=!obrot3;
- break;
- }
- glutPostRedisplay();*/
- }
- void SpecialKeys (int key, int x, int y)
- {
- switch (key)
- {
- case GLUT_KEY_LEFT:
- glpRotateFrameLocalY(&frameCamera, 0.1);
- break;
- case GLUT_KEY_RIGHT:
- glpRotateFrameLocalY(&frameCamera, -0.1);
- break;
- case GLUT_KEY_UP:
- glpMoveFrameForward(&frameCamera, 0.5f);
- break;
- case GLUT_KEY_DOWN:
- glpMoveFrameForward(&frameCamera, -0.5f);
- break;
- case GLUT_KEY_PAGE_UP:
- glpMoveFrameUp(&frameCamera, 0.1f);
- break;
- case GLUT_KEY_PAGE_DOWN:
- glpMoveFrameUp(&frameCamera, -0.1f);
- break;
- case GLUT_KEY_F1:
- swiatlo1=!swiatlo1;
- break;
- case GLUT_KEY_F2:
- swiatlo2=!swiatlo2;
- break;
- case GLUT_KEY_F3:
- swiatlo3=!swiatlo3;
- break;
- case GLUT_KEY_F4:
- swiatlo4=!swiatlo4;
- break;
- }
- //odswiezenie okna
- glutPostRedisplay ();
- }
- //Wywolanie w czasie bezczynnosci
- void TimerFunction (int value)
- {
- glutPostRedisplay ();
- glutTimerFunc(3, TimerFunction, 1);
- }
- void Menu (int value)
- {
- switch (value)
- {
- case BRASS:
- ambient=mtlBrassAmbient;
- diffuse=mtlBrassDiffuse;
- specular=mtlBrassSpecular;
- shininess=mtlBrassShininess;
- Display();
- break;
- case BRONZE:
- ambient=mtlBronzeAmbient;
- diffuse=mtlBronzeDiffuse;
- specular=mtlBronzeSpecular;
- shininess=mtlBronzeShininess;
- Display();
- break;
- case POLISHED_BRONZE:
- ambient=mtlPolishedBronzeAmbient;
- diffuse=mtlPolishedBronzeDiffuse;
- //specular=mtlPolsihedBronzeSpecular;
- shininess=mtlPolishedBronzeShininess;
- Display();
- break;
- case CHROME:
- ambient=mtlChromeAmbient;
- diffuse=mtlChromeDiffuse;
- specular=mtlChromeSpecular;
- shininess=mtlChromeShininess;
- Display();
- break;
- case COPPER:
- ambient=mtlCopperAmbient;
- diffuse=mtlCopperDiffuse;
- specular=mtlCopperSpecular;
- shininess=mtlCopperShininess;
- Display();
- break;
- case POLISHED_COPPER:
- ambient=mtlPolishedCopperAmbient;
- diffuse=mtlPolishedCopperDiffuse;
- specular=mtlPolishedCopperSpecular;
- shininess=mtlPolishedCopperShininess;
- Display();
- break;
- case GOLD:
- ambient=mtlGoldAmbient;
- diffuse=mtlGoldDiffuse;
- specular=mtlGoldSpecular;
- shininess=mtlGoldShininess;
- Display();
- break;
- case POLISHED_GOLD:
- ambient=mtlPolishedGoldAmbient;
- diffuse=mtlPolishedGoldDiffuse;
- specular=mtlPolishedGoldSpecular;
- shininess=mtlPolishedGoldShininess;
- Display();
- break;
- // obszar renderingu - ca³e okno
- case FULL_WINDOW:
- skala = FULL_WINDOW;
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- // obszar renderingu - aspekt 1:1
- case ASPECT_1_1:
- skala = ASPECT_1_1;
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- // rzutowanie ortogonalne
- case ORTHO:
- rzut=ORTHO;
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- // rzutowanie perspektywiczne
- case PERSP:
- rzut=PERSP;
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- // wyjœcie
- case EXIT:
- exit (0);
- }
- glutPostRedisplay();
- }
- int main (int argc, char **argv)
- {
- glutCreateMenu(Menu);
- glutAddMenuEntry("Mosiadz",BRASS);
- glutAddMenuEntry("Mosiadz",BRONZE);
- glutAddMenuEntry("Mosiadz",POLISHED_BRONZE);
- glutAddMenuEntry("Mosiadz",CHROME);
- glutAddMenuEntry("Mosiadz",COPPER);
- glutAddMenuEntry("Mosiadz",POLISHED_COPPER);
- glutAddMenuEntry("Mosiadz",GOLD);
- //glutAddMenuEntry("Mosiadz",BRASS);
- //glutAddMenuEntry("Mosiadz",BRASS);
- //glutAddMenuEntry("Mosiadz",BRASS);
- //glutAddMenuEntry("Mosiadz",BRASS);
- //glutAddMenuEntry("Mosiadz",BRASS);
- //glutAddMenuEntry("Mosiadz",BRASS);
- //glutAddMenuEntry("Mosiadz",BRASS);
- glutAddMenuEntry("Mosiadz",PEARL);
- glutAddMenuEntry("Mosiadz",RUBY);
- glutAddMenuEntry("Mosiadz",TURQUOISE);
- glutAddMenuEntry("Mosiadz",BLACK_PLASTIC);
- glutAddMenuEntry("Mosiadz",BLACK_RUBBER);
- glutAddMenuEntry("Wyjscie",EXIT);
- glutAttachMenu(GLUT_RIGHT_BUTTON);
- //glutTimeFunc(10,TimerFunction,1);
- glutInit (&argc, argv);
- glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- glutInitWindowSize (800, 600);
- glutCreateWindow ("Laboratorium 5");
- glutReshapeFunc (Reshape);
- glutDisplayFunc (Display);
- glutKeyboardFunc (Keyboard);
- glutSpecialFunc (SpecialKeys);
- Ustawienia ();
- // dodanie pozycji do menu podrêcznego
- int MenuSkali = glutCreateMenu (Menu);
- glutAddMenuEntry ("Skalowanie - ca³e okno", FULL_WINDOW);
- glutAddMenuEntry ("Skalowanie - aspect_1_1", ASPECT_1_1);
- int MenuRzutowania = glutCreateMenu (Menu);
- glutAddMenuEntry ("Rzutowanie ortogonalne", ORTHO);
- glutAddMenuEntry ("Rzutowanie perspective", PERSP);
- // utworzenie menu podrêcznego
- glutCreateMenu (Menu);
- glutAddSubMenu ("Skalowanie", MenuSkali);
- glutAddSubMenu ("Rzutowanie", MenuRzutowania);
- glutAddMenuEntry ("Wyjscie", EXIT);
- // okreœlenie przycisku myszki obs³uguj¹cej menu podrêczne
- glutAttachMenu (GLUT_RIGHT_BUTTON);
- glutTimerFunc (3, TimerFunction, 1);
- //glutFullScreen();
- glutMainLoop ();
- Wyjscie ();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement