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 "materials.h"
- #include "pch.h"
- #include <GL/glut.h>
- #include <math.h>
- #include <stdio.h>
- #include <string.h>
- // Definicja stalych
- #define DLUGOSC_BOKU 5.0
- #define OBSERWATOR_ODLEGLOSC 20.0
- #define OBSERWATOR_OBROT_X 20.0
- #define OBSERWATOR_OBROT_Y 20.0
- #define OBSERWATOR_FOV_Y 30.0
- #define DLUGOSC_PROMIENIA 6.0
- #define WYSOKOSC 15.0
- #define N 26.0
- #define X_OFFSET_SWIATLO 10
- #define Y_OFFSET_SWIATLO 120
- #define X_OFFSET_MAT 10
- #define Y_OFFSET_MAT 220
- #define X_OFFSET_OBIEKT 10
- #define Y_OFFSET_OBIEKT 300
- #define ID_MENU_SWIATLA 0
- #define ID_MENU_MATERIALU 1
- #define LPOZ_MENU_SWIATLA 10
- #define LPOZ_MENU_MATERIALU 5
- #define PI 3.1415926535
- #define DEG2RAD(x) ((float)(x)*PI/180.0)
- #define dAlfa (360.0/en)
- int i;
- double en = N;
- double r = DLUGOSC_PROMIENIA;
- double wys = WYSOKOSC;
- double R = 10;
- double R2 = 12;
- float osX = 40;
- float osY = 40;
- float osZ = 0;
- float odlmin = 0;
- float odlmax = 200;
- float odl = 40;
- // Zmienne globalne
- double bok = DLUGOSC_BOKU; // Dlugosc boku szescianu
- int szerokoscOkna = 800;
- int wysokoscOkna = 600;
- int czy_wektor = 0;
- int sw1 = 0;
- int sw2 = 0;
- int material = 0;
- // 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 WlaczSwiatlo1(void)
- {
- GLfloat swiatlo[5][4] = { {1.0,1.0,1.0,1.0},
- {1.0,1.0,1.0,1.0},
- {1.0,1.0,1.0,1.0},
- {10.0,10.0,10.0,1.0},
- {0.0,0.0,-1.0,0.0} };
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT1);
- glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo[0]);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo[1]);
- glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo[2]);
- glLightfv(GL_LIGHT1, GL_POSITION, swiatlo[3]);
- glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo[4]);
- }
- void WlaczSwiatlo2(void)
- {
- GLfloat swiatlo[5][4] = { {0.4,0.3,0.7,1.0},
- {1.0,0.0,1.0,0.5},
- {0.7,1.0,0.6,1.0},
- {10.0,10.0,10.0,1.0},
- {0.0,0.0,-1.0,0.0} };
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT1);
- glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo[0]);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo[1]);
- glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo[2]);
- glLightfv(GL_LIGHT1, GL_POSITION, swiatlo[3]);
- glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo[4]);
- }
- void UstawParametryMaterialu1(void)
- {
- float material[5][4] = { {1.0,0.0,1.0,1.0},
- {1.0,0.0,1.0,1.0},
- {1.0,0.0,1.0,1.0},
- {3.0,0.0,0.0,0.0},
- {0.0,0.0,0.0,1.0} };
- glMaterialfv(GL_FRONT, GL_AMBIENT, material[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material[4]);
- }
- void UstawParametryMaterialu2(void)
- {
- float material[5][4] = { {0.229500, 0.088250, 0.027500, 1.000000},
- {0.550800, 0.211800, 0.066000, 1.000000},
- {0.580594, 0.223257, 0.069570, 1.000000},
- {51.2,0.0,0.0,0.0},
- {0.0,0.0,0.0,1.0} };
- glMaterialfv(GL_FRONT, GL_AMBIENT, material[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material[4]);
- }
- void UstawParametryMaterialu3(void)
- {
- float material[5][4] = { {0.105882, 0.058824, 0.113725, 1.000000},
- {0.427451, 0.470588, 0.541176, 1.000000},
- {0.333333, 0.333333, 0.521569, 1.000000},
- {9.84615,0.0,0.0,0.0},
- {0.0,0.0,0.0,1.0} };
- glMaterialfv(GL_FRONT, GL_AMBIENT, material[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material[4]);
- }
- void materialy(int material)
- {
- if (material == 0)
- UstawParametryMaterialu1();
- if (material == 1)
- UstawParametryMaterialu2();
- if (material == 2)
- UstawParametryMaterialu3();
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
- // Srodek szescianu znajduje się w punkcie (0,0,0).
- void RysujSzescian(double a)
- {
- glBegin(GL_LINES);
- // Os X
- glColor3f(1.0, 0.0, 0.0);
- glVertex3f(-40.0, 0.0, 0.0);
- glVertex3f(40.0, 0.0, 0.0);
- // Os Y
- glColor3f(0.0, 1.0, 0.0);
- glVertex3f(0.0, -20.0, 0.0);
- glVertex3f(0.0, 20.0, 0.0);
- // Os Z
- glColor3f(0.0, 0.0, 1.0);
- glVertex3f(0.0, 0.0, -20.0);
- glVertex3f(0.0, 0.0, 20.0);
- glEnd();
- /* glColor3f(1.0, 1.0, 1.0);
- // 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 stozek()
- {
- glColor3f(1, 1, 1);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0, 0, 0);
- for (i = 0; i*dAlfa <= 360.0; i++)
- {
- glVertex3f(r*cos(DEG2RAD(i*dAlfa)), 0, r*sin(DEG2RAD(i*dAlfa)));
- }
- glEnd();
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0, wys, 0);
- for (i = 0; i*dAlfa <= 360.0; i++)
- {
- glVertex3f(r*cos(DEG2RAD(i*dAlfa)), 0, r*sin(DEG2RAD(i*dAlfa)));
- }
- glEnd();
- }
- void pierscien()
- {
- r = 10;
- glColor3f(1, 1, 1);
- glBegin(GL_QUAD_STRIP);
- glNormal3f(0,1,0);
- glNormal3f(0, -1, 0);
- glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 0, R*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- for (i = 0; i*dAlfa <= 360.0; i++)
- {
- glNormal3f(cos(DEG2RAD(i*dAlfa)), 0, sin(DEG2RAD(i*dAlfa)));
- glNormal3f(-cos(DEG2RAD(i*dAlfa)), 0, -sin(DEG2RAD(i*dAlfa)));
- glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 0, R*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- }
- glEnd();
- glColor3f(1, 0, 0);
- glBegin(GL_QUAD_STRIP);
- glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 2, R*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- for (i = 0; i*dAlfa <= 360.0; i++)
- {
- glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 2, R*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- }
- glEnd();
- glColor3f(0, 1, 0);
- glBegin(GL_QUAD_STRIP);
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- for (i = 0; i*dAlfa <= 360.0; i++)
- {
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- }
- glEnd();
- glColor3f(0, 0, 1);
- glBegin(GL_QUAD_STRIP);
- glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 0, (R)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 2, (R)*sin(DEG2RAD(i*dAlfa)));
- for (i = 0; i*dAlfa <= 360.0; i++)
- {
- glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 0, (R)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 2, (R)*sin(DEG2RAD(i*dAlfa)));
- }
- glEnd();
- }
- void wektory()
- {
- glColor3f(1, 1, 1);
- glBegin(GL_LINES);
- for (i = 0; i*dAlfa <= 360.0; i++)
- {
- glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 0, R*sin(DEG2RAD(i*dAlfa)));
- glVertex3f(R*cos(DEG2RAD(i*dAlfa)), -1, R*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), -1, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 0, (R)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R-1)*cos(DEG2RAD(i*dAlfa)), 0, (R-1)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 5)*cos(DEG2RAD(i*dAlfa)), 0, (R + 5)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 2, R*sin(DEG2RAD(i*dAlfa)));
- glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 3, R*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 3, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 2, R*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R-1)*cos(DEG2RAD(i*dAlfa)), 2, (R-1)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
- glVertex3f((R + 5)*cos(DEG2RAD(i*dAlfa)), 2, (R + 5)*sin(DEG2RAD(i*dAlfa)));
- }
- glEnd();
- }
- void RysujTekstRastrowy(void *font, char *tekst)
- {
- int i;
- for (i = 0; i < (int)strlen(tekst); i++)
- glutBitmapCharacter(font, tekst[i]);
- }
- void RysujMenu(void)
- {
- char buf[255];
- // 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
- sprintf_s(buf, "przyblizenie/oddalenie +/-");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf_s(buf, "obrót wokó³ osi: q/w/e/r/t/y");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 10);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf_s(buf, "zwiekszenie/zmiejszenie podzia³ów: a/s");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 20);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf_s(buf, "zmiana modelu geometrycznego bryly: u/i");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 30);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf_s(buf, "wlaczanie swiatel: o/p");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 40);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf_s(buf, "zmiana materia³u: j/k/l");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 50);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf_s(buf, "zmiana cieniowania n/m");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 60);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- // Przywrocenie macierzy sprzed wywolania funkcji
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
- // Odblokowanie oswietlenia
- glEnable(GL_LIGHTING);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // 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, -odl);
- glRotatef(osX, 1, 0, 0);
- glRotatef(osY, 0, 1, 0);
- glRotatef(osZ, 0, 0, 1);
- // Narysowanie szescianu
- //RysujSzescian(bok);
- //stozek();
- RysujMenu();
- glEnable(GL_LIGHTING);
- materialy(material);
- if (sw1)
- WlaczSwiatlo1();
- else
- glDisable(GL_LIGHT1);
- if (sw2)
- WlaczSwiatlo2();
- else
- glDisable(GL_LIGHT2);
- glEnable(GL_LIGHT0);
- pierscien();
- if(czy_wektor)
- wektory();
- // Przelaczenie buforow ramki
- glutSwapBuffers();
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // 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 == 'p')
- {
- if (odl + 1 <= odlmax)
- odl++;
- }
- else if (klawisz == 'o')
- {
- if (odl - 1 >= odlmin)
- odl--;
- }
- else if (klawisz == 'w')
- osX++;
- else if (klawisz == 's')
- osX--;
- else if (klawisz == 'a')
- osY++;
- else if (klawisz == 'd')
- osY--;
- else if (klawisz == 'q')
- osZ++;
- else if (klawisz == 'e')
- osZ--;
- else if (klawisz == '2')
- {
- if (en <= 64)
- en++;//eliminiacja bledu
- }
- else if (klawisz == '3')
- {
- if (en > 4)
- en--;
- }
- else if (klawisz == 't')
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- else if (klawisz == 'T')
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- else if (klawisz == 'y')
- czy_wektor = 1;
- else if (klawisz == 'Y')
- czy_wektor = 0;
- else if (klawisz == 'f')
- sw1 = 1;
- else if (klawisz == 'F')
- sw1 = 0;
- else if (klawisz == 'g')
- sw2 = 1;
- else if (klawisz == 'G')
- sw2 = 0;
- else if (klawisz == 'h')
- glShadeModel(GL_SMOOTH);
- else if (klawisz == 'H')
- glShadeModel(GL_FLAT);
- else if (klawisz == '7')
- material = 0;
- else if (klawisz == '8')
- material = 1;
- else if (klawisz == '9')
- material = 2;
- else if (klawisz == 27)
- exit(0);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // 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("Szescian");
- // 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.3f, 0.0f);
- // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
- // 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);
- // 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