Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////////////////////////////////////////////////////////////////////////////////
- //
- // Program wyswietlajacy szescian w rzucie perspektywicznym. Dlugosc boku szescianu
- // moze byc interaktywnie zmieniana za pomoca klwiszy '+' i '-'.
- //
- //////////////////////////////////////////////////////////////////////////////////////////
- #include "glut.h"
- #include <math.h>
- // Definicja stalych
- #define DLUGOSC_BOKU 5.0
- #define OBSERWATOR_ODLEGLOSC 100.0
- #define OBSERWATOR_OBROT_X 20.0
- #define OBSERWATOR_OBROT_Y 40.0
- #define OBSERWATOR_OBROT_Z 0.0
- #define OBSERWATOR_FOV_Y 30.0
- #define odlmin 2.0
- #define odlmax 200.0
- #define PI 3.1415926535
- #define DEG2RAD(x) ((float)(x)*PI/180.0)
- // Zmienne globalne
- double bok = DLUGOSC_BOKU; // Dlugosc boku szescianu
- int podzialPionowy = 20;
- int szerokoscOkna = 800;
- int wysokoscOkna = 600;
- GLfloat rotObsX = OBSERWATOR_OBROT_X;
- GLfloat rotObsY = OBSERWATOR_OBROT_Y;
- GLfloat rotObsZ = OBSERWATOR_OBROT_Z;
- GLfloat odlObs = OBSERWATOR_ODLEGLOSC;
- int source1 = 1;
- int source2 = 1;
- int obecnymaterial = 0;
- int normalne = 0;
- int smooth = 1;
- int fill = 1;
- float length;
- // Tablica parametrow materialu nr 1
- float material1[5][4] = {
- {0.329412, 0.223529, 0.027451, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
- {0.780392, 0.568627, 0.113725, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
- {0.992157, 0.941176, 0.807843, 1.000000}, // [2] wspolczynnik odbicia swiatla lustrzanego
- {21.2, 0.0, 0.0, 0.0}, // [3] polysk
- {0.2, 0.1, 0.2, 1.0} }; // [4] kolor swiatla emitowanego
- // Tablica parametrow materialu nr 2
- float material2[5][4] = {
- {0.212500, 0.127500, 0.054000, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
- {0.714000, 0.428400, 0.181440, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
- {0.393548, 0.271906, 0.166721, 1.000000}, // [2] wspolczynnik odbicia swiatla lustrzanego
- {56.8, 0.0, 0.0, 0.0}, // [3] polysk
- {0.0, 0.2, 0.6, 1.0} }; // [4] kolor swiatla emitowanego
- // Tablica parametrow materialu nr 3
- float material3[5][4] = {
- {0.021500, 0.174500, 0.021500, 0.550000}, // [0] wspolczynnik odbicia swiatla otoczenia
- {0.075680, 0.614240, 0.075680, 0.550000}, // [1] wspolczynnik odbicia swiatla rozproszonego
- {0.633000, 0.727811, 0.633000, 0.550000}, // [2] wspolczynnik odbicia swiatla lustrzanego
- {72.2, 0.0, 0.0, 0.0}, // [3] polysk
- {0.0, 0.5, 0.1, 1.0} }; // [4] kolor swiatla emitowanego
- // Tablica parametrow zrodla swiatla nr 1
- GLfloat swiatlo1[5][4] = {
- {0.8, 0.8, 0, 1.0}, // [0] otoczenie
- {0.8, 0.8, 0.0, 1.0}, // [1] rozproszenie
- {0.8, 0.8, 0.0, 1.0}, // [2] lustrzane
- {0, 10.0, 0, 1.0}, // [3] polozenie
- {-1.0, -1.0, -1.0, 0.0} // [4] kierunek swiecenia
- };
- // Tablica parametrow zrodla swiatla nr 2
- GLfloat swiatlo2[5][4] = {
- {0, 1, 1, 1.0}, // [0] otoczenie
- {0, 1, 1, 1.0}, // [1] rozproszenie
- {0, 18, 1, 1.0}, // [2] lustrzane
- {0, -10.0, 0, 1.0}, // [3] polozenie
- {-1.0, -1.0, -1.0, 0.0} // [4] kierunek swiecenia
- };
- // Prototypy funkcji
- void RysujSzescian(double a);
- void UstawParametryWidoku(int szer, int wys);
- void WyswietlObraz(void);
- void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
- void PoliczNormal(float x1, float x2, float x3, float y1, float y2, float y3, float z1, float z2, float z3, float* normal);
- void RysujTekstRastrowy(void* font, char* tekst)
- {
- int i = 0;
- while (tekst[i] != '\0')
- {
- glutBitmapCharacter(font, tekst[i]);
- i++;
- }
- }
- #define numberofoptions 11
- void RysujNakladke(void)
- {
- char tab[numberofoptions][50] =
- { "w - Oddalenie",
- "q - Przyblizenie",
- "5 - Zmiana materialu pierscienia",
- "6 - Sterowanie swiatlem nr. 1",
- "7 - Sterowanie swiatlem nr. 2",
- "8 - Widocznosc wektorow normalnych",
- "9 - Zmiana cienia (GL_SMOOTH i GL_FLAT)",
- "0 - Zmiana wypelnienia (GL_FILL, GL_LINE)",
- "z - Zmniejszanie ilosci podzialow",
- "x - Zwiekszanie ilosci podzialow",
- "Strzalki oraz , . - Sterowanie kamera",
- };
- int i;
- // Zmiana typu rzutu z perspektywicznego na ortogonalny
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glLoadIdentity();
- glOrtho(0.0, szerokoscOkna, 0.0, wysokoscOkna, -100.0, 100.0);
- // Modelowanie sceny 2D (zawartosci nakladki)
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
- // Zablokowanie oswietlenia (mialoby ono wplyw na kolor tekstu)
- glDisable(GL_LIGHTING);
- // Okreslenie koloru tekstu
- glColor3f(1.0, 1.0, 1.0);
- // RYSOWANIE MENU PARAMETROW ZRODLA SWIATLA
- for (i = 0; i < numberofoptions; i++)
- {
- glRasterPos2i(10, 10 + i * 13);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, tab[numberofoptions - i - 1]);
- }
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
- }
- void UstawSwiatlaIMaterialy()
- {
- glEnable(GL_LIGHTING);
- glEnable(GL_BLEND);
- // Odblokowanie zrodla swiatla nr 1
- if (source1 == 1) {
- glEnable(GL_LIGHT0);
- glLightfv(GL_LIGHT0, GL_AMBIENT, swiatlo1[0]);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, swiatlo1[1]);
- glLightfv(GL_LIGHT0, GL_SPECULAR, swiatlo1[2]);
- glLightfv(GL_LIGHT0, GL_POSITION, swiatlo1[3]);
- glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, swiatlo1[4]);
- }
- else {
- //wylaczenie zrodla swiatla nr 1
- glDisable(GL_LIGHT0);
- }
- // Odblokowanie zrodla swiatla nr 2
- if (source2 == 1) {
- glEnable(GL_LIGHT1);
- glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo2[0]);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo2[1]);
- glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo2[2]);
- glLightfv(GL_LIGHT1, GL_POSITION, swiatlo2[3]);
- glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo2[4]);
- }
- else {
- //wylaczenie zrodla swiatla nr 2
- glDisable(GL_LIGHT1);
- }
- switch (obecnymaterial)
- {
- case 0:
- glMaterialfv(GL_FRONT, GL_AMBIENT, material1[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material1[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material1[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material1[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material1[4]);
- break;
- case 1:
- glMaterialfv(GL_FRONT, GL_AMBIENT, material2[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material2[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material2[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material2[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material2[4]);
- break;
- case 2:
- glMaterialfv(GL_FRONT, GL_AMBIENT, material3[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material3[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material3[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material3[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material3[4]);
- break;
- default:
- break;
- }
- }
- void PoliczNormal(float x1, float x2, float y1, float y2, float z1, float z2, float* normal)
- {
- //glDisable(GL_LIGHTING);
- //glBegin(GL_LINES);
- //glColor3f(1, 0, 0);
- float xa = x2 - x1;
- float ya = y2 - y1;
- float za = z2 - z1;
- //float xb = x3 - x1;
- //float yb = y3 - y1;
- //float zb = z3 - z1;
- normal[0] = ya - za;
- normal[1] = za - xa;
- normal[2] = xa - ya;
- length = sqrtf(normal[0] * normal[0] + normal[1] * normal[1] + normal[2] * normal[2]);
- normal[0] /= length;
- normal[1] /= length;
- normal[2] /= length;
- //glEnd();
- //glEnable(GL_LIGHTING);
- }
- void SyncSmoothIFill()
- {
- if (smooth)
- glShadeModel(GL_SMOOTH);
- else
- glShadeModel(GL_FLAT);
- if (fill)
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- else
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- }
- // Prototypy funkcji
- void RysujSzescian(double a);
- void UstawParametryWidoku(int szer, int wys);
- void WyswietlObraz(void);
- void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
- // Srodek szescianu znajduje się w punkcie (0,0,0).
- void RysujSzescian(double a)
- {
- // Sciany boczne
- glBegin(GL_QUAD_STRIP);
- glVertex3f(a/2.0, a/2.0, a/2.0);
- glVertex3f(a/2.0, -a/2.0, a/2.0);
- glVertex3f(a/2.0, a/2.0, -a/2.0);
- glVertex3f(a/2.0, -a/2.0, -a/2.0);
- glVertex3f(-a/2.0, a/2.0, -a/2.0);
- glVertex3f(-a/2.0, -a/2.0, -a/2.0);
- glVertex3f(-a/2.0, a/2.0, a/2.0);
- glVertex3f(-a/2.0, -a/2.0, a/2.0);
- glVertex3f(a/2.0, a/2.0, a/2.0);
- glVertex3f(a/2.0, -a/2.0, a/2.0);
- glEnd();
- // Gorna sciana
- glBegin(GL_QUAD_STRIP);
- glVertex3f(-a/2.0, a/2.0, a/2.0);
- glVertex3f(a/2.0, a/2.0, a/2.0);
- glVertex3f(-a/2.0, a/2.0, -a/2.0);
- glVertex3f(a/2.0, a/2.0, -a/2.0);
- glEnd();
- // Dolna sciana
- glBegin(GL_QUAD_STRIP);
- glVertex3f(-a/2.0, -a/2.0, a/2.0);
- glVertex3f(a/2.0, -a/2.0, a/2.0);
- glVertex3f(-a/2.0, -a/2.0, -a/2.0);
- glVertex3f(a/2.0, -a/2.0, -a/2.0);
- glEnd();
- }
- void RysujStozek(int N)
- {
- double R = 5, r = 25, h = 20;
- int i = 0;
- glColor3f(1, 0, 0);
- glBegin(GL_TRIANGLE_FAN); // gorna podstawa
- glVertex3f(0, 20, 0);
- for (i = 0; i * 360 / N <= 360; i++)
- {
- glVertex3f(r * cos(DEG2RAD(i * 360 / N)), h, r * sin(DEG2RAD(i * 360 / N)));
- }
- glEnd();
- glColor3f(1, 1, 0);
- glBegin(GL_TRIANGLE_FAN); // dolna podstawa
- glVertex3f(0, 0, 0);
- for (i = 0; i * 360 / N <= 360; i++)
- {
- glVertex3f(R * cos(DEG2RAD(i * 360 / N)), 0, R * sin(DEG2RAD(i * 360 / N)));
- }
- glEnd();
- glColor3f(1, 0, 1);
- glBegin(GL_QUAD_STRIP); //powierzchnia boczna
- for (i = 0; i * 360.0 / N <= 360.0; i++)
- {
- glVertex3f(r * cos(DEG2RAD(i * 360 / N)), h, r * sin(DEG2RAD(i * 360 / N)));
- glVertex3f(R * cos(DEG2RAD(i * 360 / N)), 0, R * sin(DEG2RAD(i * 360 / N)));
- }
- glEnd();
- }
- void wektory(int N)
- {
- int i = 0;
- int r = 15;
- int ramie = 4;
- float dAlfa = 360.0 / N;
- glDisable(GL_LIGHTING);
- glBegin(GL_LINES);
- glColor3f(1, 0, 1);
- for (i = 0; i * 360.0 / N <= 360.0; i++)
- {
- glVertex3f((r)*cos(DEG2RAD(i * 360 / N)), 0, (r)*sin(DEG2RAD(i * 360 / N)));
- glVertex3f((r)*cos(DEG2RAD(i * 360 / N)), -1, (r)*sin(DEG2RAD(i * 360 / N)));
- glVertex3f((r - 1) * cos(DEG2RAD(i * dAlfa)), 0, (r - 1) * sin(DEG2RAD(i * dAlfa)));
- glVertex3f((r)*cos(DEG2RAD(i * dAlfa)), 0, (r)*sin(DEG2RAD(i * dAlfa)));
- glVertex3f((r + ramie) * cos(DEG2RAD(i * 360 / N)), -1, (r + ramie) * sin(DEG2RAD(i * 360 / N)));
- glVertex3f((r + ramie) * cos(DEG2RAD(i * 360 / N)), 0, (r + ramie) * sin(DEG2RAD(i * 360 / N)));
- glVertex3f(r * cos(DEG2RAD((i)*dAlfa)), 4, r * sin(DEG2RAD((i)*dAlfa)));
- glVertex3f((r + (1 / sqrt(2))) * cos(DEG2RAD((i)*dAlfa)), 4 + (1 / sqrt(2)), (r + (1 / sqrt(2))) * sin(DEG2RAD((i)*dAlfa)));
- glVertex3f((r - 1) * cos(DEG2RAD(i * dAlfa)), ramie, (r - 1) * sin(DEG2RAD(i * dAlfa)));
- glVertex3f((r)*cos(DEG2RAD(i * dAlfa)), ramie, (r)*sin(DEG2RAD(i * dAlfa)));
- glVertex3f((r + 4) * cos(DEG2RAD((i)*dAlfa)), 0, (r + 4) * sin(DEG2RAD((i)*dAlfa)));
- glVertex3f((r + 4 + (1 / sqrt(2))) * cos(DEG2RAD((i)*dAlfa)), (1 / sqrt(2)), (r + 4 + (1 / sqrt(2))) * sin(DEG2RAD((i)*dAlfa)));
- }
- glEnd();
- glEnable(GL_LIGHTING);
- }
- void RysujPierscien(int N)
- {
- int i;
- int r = 15, ramie = 4;
- float x1, x2;
- float z1, z2;
- float y1, y2;
- float normal[3];
- int dAlfa = 360 / N;
- //przeciwprostokątna
- for (i = 0; i * 360.0 / N <= 360.0; i++)
- {
- glNormal3f((1 / sqrt(2)) * cos(DEG2RAD(i * dAlfa)), 1 / sqrt(2), -(1 / sqrt(2)) * sin(DEG2RAD(i * dAlfa)));
- glColor3f(1, 0, 1);
- glBegin(GL_QUAD_STRIP);
- glVertex3f(r * cos(DEG2RAD(i * 360 / N)), ramie, r * sin(DEG2RAD(i * 360 / N)));
- glVertex3f((r + ramie) * cos(DEG2RAD(i * 360 / N)), 0, (r + ramie) * sin(DEG2RAD(i * 360 / N)));
- }
- glEnd();
- //przyprostokątna 1.
- for (i = 0; i * 360.0 / N <= 360.0; i++)
- {
- glNormal3f(cos(DEG2RAD(i * dAlfa)), 0, sin(DEG2RAD(i * 360 / N)));
- glColor3f(1, 1, 0);
- glBegin(GL_QUAD_STRIP);
- glVertex3f(r * cos(DEG2RAD(i * 360 / N)), ramie, r * sin(DEG2RAD(i * 360 / N)));
- glVertex3f(r * cos(DEG2RAD(i * 360 / N)), 0, r * sin(DEG2RAD(i * 360 / N)));
- }
- glEnd();
- //przyprostokątna 2.
- for (i = 0; i * 360.0 / N <= 360.0; i++)
- {
- glNormal3f((1 / sqrt(2)) * cos(DEG2RAD(i * dAlfa)), 1 / sqrt(2), (1 / sqrt(2) * sin(DEG2RAD(i * dAlfa))));
- glColor3f(0, 1, 0);
- glBegin(GL_QUAD_STRIP);
- glVertex3f(r * cos(DEG2RAD(i * 360 / N)), 0, r * sin(DEG2RAD(i * 360 / N)));
- glVertex3f((r + ramie) * cos(DEG2RAD(i * 360 / N)), 0, (r + ramie) * sin(DEG2RAD(i * 360 / N)));
- }
- glEnd();
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu. Powinna
- // być wywolywana kazdorazowo po zmianie rozmiarow okna programu.
- void UstawParametryWidoku(int szer, int wys)
- {
- // Zapamietanie wielkosci widoku
- szerokoscOkna = szer;
- wysokoscOkna = wys;
- // Ustawienie parametrow viewportu
- glViewport(0, 0, szerokoscOkna, wysokoscOkna);
- // Przejscie w tryb modyfikacji macierzy rzutowania
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(OBSERWATOR_FOV_Y, (float)szerokoscOkna/(float)wysokoscOkna, 1.0, 1000.0);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja wyswietlajaca pojedyncza klatke animacji
- void WyswietlObraz(void)
- {
- // Wyczyszczenie bufora koloru i bufora glebokosci
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
- glMatrixMode(GL_MODELVIEW);
- // Zastapienie aktywnej macierzy macierza jednostkowa
- glLoadIdentity();
- // Ustalenie polozenia obserwatora
- glTranslatef(0, 0, -odlObs);
- glRotatef(rotObsX, 1, 0, 0);
- glRotatef(rotObsY, 0, 1, 0);
- glRotatef(rotObsZ, 0, 0, 1);
- //glBegin(GL_LINES);
- //// Rysowanie układu współrzędnych
- //// Os X
- //glColor3f(1.0, 0.0, 0.0);
- //glVertex3f(-500.0, 0.0, 0.0);
- //glVertex3f(500.0, 0.0, 0.0);
- //// Os Y
- //glColor3f(0.0, 1.0, 0.0);
- //glVertex3f(0.0, -500.0, 0.0);
- //glVertex3f(0.0, 500.0, 0.0);
- //// Os Z
- //glColor3f(0.0, 0.0, 1.0);
- //glVertex3f(0.0, 0.0, -500.0);
- //glVertex3f(0.0, 0.0, 500.0);
- //// Koniec tworzenia ukladu wspolrzednych
- //glEnd();
- glColor3f(1.0, 1.0, 1.0);
- //Narysowanie sześcianu
- //RysujSzescian(bok);
- //Narysowanie stożka
- //RysujStozek(podzialPionowy);
- RysujNakladke();
- UstawSwiatlaIMaterialy();
- if (normalne)
- wektory(podzialPionowy);
- //Narysowanie pierścienia
- RysujPierscien(podzialPionowy);
- // Przelaczenie buforow ramki
- glutSwapBuffers();
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja klawiszy specjalnych
- void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y)
- {
- switch (klawisz)
- {
- case GLUT_KEY_UP:
- rotObsX = rotObsX + 1.0;
- break;
- case GLUT_KEY_DOWN:
- rotObsX = rotObsX - 1.0;
- break;
- case GLUT_KEY_LEFT:
- rotObsY = rotObsY - 1.0;
- break;
- case GLUT_KEY_RIGHT:
- rotObsY = rotObsY + 1.0;
- break;
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja obslugi klawiatury
- void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
- {
- if (klawisz == '+')
- bok *= 2.0;
- else if (klawisz == '-')
- bok /= 2.0;
- else if (klawisz == 27)
- exit(0);
- switch (klawisz)
- {
- case 'q':
- odlObs = (odlObs > odlmin) ? odlObs - 1 : odlObs;
- break;
- case 'w':
- odlObs = (odlObs < odlmax) ? odlObs + 1 : odlObs;
- break;
- case ',':
- rotObsZ = rotObsZ - 1.0;
- break;
- case '.':
- rotObsZ = rotObsZ + 1.0;
- break;
- case 'z':
- podzialPionowy = (podzialPionowy > 4) ? podzialPionowy - 1.0 : podzialPionowy;
- break;
- case 'x':
- podzialPionowy = (podzialPionowy < 64) ? podzialPionowy + 1.0 : podzialPionowy;
- break;
- case '5':
- obecnymaterial++;
- if (obecnymaterial > 2)
- obecnymaterial = 0;
- break;
- case '6':
- source1 = !source1;
- break;
- case '7':
- source2 = !source2;
- break;
- case '8':
- normalne = !normalne;
- break;
- case '9':
- smooth = !smooth;
- SyncSmoothIFill();
- break;
- case '0':
- fill = !fill;
- SyncSmoothIFill();
- break;
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Glowna funkcja programu
- int main(int argc, char **argv)
- {
- // Zainicjowanie biblioteki GLUT
- glutInit(&argc, argv);
- // Ustawienie trybu wyswietlania
- glutInitDisplayMode (GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
- // Ustawienie polozenia dolenego lewego rogu okna
- glutInitWindowPosition(100, 100);
- // Ustawienie rozmiarow okna
- glutInitWindowSize(szerokoscOkna, wysokoscOkna);
- // Utworzenie okna
- glutCreateWindow("Pierścień");
- // Odblokowanie bufora glebokosci
- glEnable(GL_DEPTH_TEST);
- // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
- glClearDepth(1000.0);
- // Ustawienie koloru czyszczenia bufora ramki
- glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
- // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- // Zarejestrowanie funkcji (callback) odpowiedzialnej za
- glutDisplayFunc(WyswietlObraz);
- // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
- // zmieniane sa rozmiary okna
- glutReshapeFunc(UstawParametryWidoku);
- // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
- // zadnych zadan
- glutIdleFunc(WyswietlObraz);
- // Zarejestrowanie funkcji obslugi klawiatury
- glutKeyboardFunc(ObslugaKlawiatury);
- // Zarejestrowanie funkcji obslugi klawiszy specjalnych
- glutSpecialFunc(ObslugaKlawiszySpecjalnych);
- // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
- // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement