Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <GLUT/GLUT.h>
- #include <cstdlib>
- #include <OpenGL/OpenGL.h>
- #include <ctime>
- #include <math.h>
- // Dywan Sierpińśkiego - Kamil Jędras, 241299, Środa TP 14:00
- int depth=3;
- void drawSq(float x, float y, int size) {
- glBegin(GL_POLYGON);
- glColor3f(1.0f, 1.0f, 1.0f); //kwadraty rysowane kolorem bia³ym
- glVertex2f(x,y);
- glVertex2f(x+size,y);
- glVertex2f(x+size,y-size);
- glVertex2f(x,y-size);
- glEnd();
- }
- /*
- float randFloat(){
- return (float) (rand()%101)/100;
- }
- void drawSqColor(float x, float y, int size){ //metoda rysująca kolorwe kwadraty
- glBegin(GL_POLYGON);
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- glColor3f(randFloat(),randFloat(),randFloat());
- glVertex2f(x,y);
- glColor3f(randFloat(),randFloat(),randFloat());
- glVertex2f(x+size,y);
- glColor3f(randFloat(),randFloat(),randFloat());
- glVertex2f(x+size,y-size);
- glColor3f(randFloat(),randFloat(),randFloat());
- glVertex2f(x,y-size);
- glEnd();
- } */
- void mainLoop (float x, float y, int d){
- int size = pow (3, d+1);
- for(int i=0;i<3;i++)
- for(int j=0;j<3;j++)
- if(i!=1||j!=1){ //sprawdzam czy to nie srodkowy
- if(d==1) drawSq( (x+j*size/3),(y-i*size/3),size/3);
- else mainLoop((x+j*size/3),(y-i*size/3),d-1);
- }
- }
- void RenderScene(void)
- {
- glClear(GL_COLOR_BUFFER_BIT);
- // Czyszczenie okna aktualnym kolorem czyszcz¹cym
- mainLoop(-40, 40, depth);
- glFlush();
- // Przekazanie poleceñ rysuj¹cych do wykonania
- }
- void MyInit(void)
- {
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- // Kolor okna wnêtrza okna - ustawiono na czarny
- }
- void ChangeSize(GLsizei horizontal, GLsizei vertical)
- // Parametry horizontal i vertical (szerokoœæ i wysokoœæ okna) s¹
- // przekazywane do funkcji za ka¿dym razem, gdy zmieni siê rozmiar okna
- {
- GLfloat AspectRatio;
- // Deklaracja zmiennej AspectRatio okreœlaj¹cej proporcjê wymiarów okna
- if (vertical == 0)
- // Zabezpieczenie pzred dzieleniem przez 0
- vertical = 1;
- glViewport(0, 0, horizontal, vertical);
- // Ustawienie wielkoœciokna okna urz¹dzenia (Viewport)
- // W tym przypadku od (0,0) do (horizontal, vertical)
- glMatrixMode(GL_PROJECTION);
- // Okreœlenie uk³adu wspó³rzêdnych obserwatora
- glLoadIdentity();
- // Okreœlenie przestrzeni ograniczaj¹cej
- AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
- // Wyznaczenie wspó³czynnika proporcji okna
- // Gdy okno na ekranie nie jest kwadratem wymagane jest
- // okreœlenie okna obserwatora.
- // Pozwala to zachowaæ w³aœciwe proporcje rysowanego obiektu
- // Do okreœlenia okna obserwatora s³u¿y funkcja glOrtho(...)
- if (horizontal <= vertical)
- glOrtho(-100.0, 100.0, -100.0 / AspectRatio, 100.0 / AspectRatio, 1.0, -1.0);
- else
- glOrtho(-100.0*AspectRatio, 100.0*AspectRatio, -100.0, 100.0, 1.0, -1.0);
- glMatrixMode(GL_MODELVIEW);
- // Okreœlenie uk³adu wspó³rzêdnych
- glLoadIdentity();
- }
- int main(int argc, char** argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
- // Ustawienie trybu wyœwietlania
- // GLUT_SINGLE - pojedynczy bufor wyœwietlania
- // GLUT_RGBA - model kolorów RGB
- glutCreateWindow("Dywan Sierpinskiego");
- // Utworzenie okna i okreœlenie treœci napisu w nag³ówku okna
- glutDisplayFunc(RenderScene);
- // Okreœlenie, ¿e funkcja RenderScene bêdzie funkcj¹ zwrotn¹ (callback)
- // Biblioteka GLUT bêdzie wywo³ywa³a t¹ funkcjê za ka¿dym razem, gdy
- // trzeba bêdzie przerysowaæ okno
- glutReshapeFunc(ChangeSize);
- // Dla aktualnego okna ustala funkcjê zwrotn¹ odpowiedzialn¹ za
- // zmiany rozmiaru okna
- MyInit();
- // Funkcja MyInit (zdefiniowana powy¿ej) wykonuje wszelkie
- // inicjalizacje konieczneprzed przyst¹pieniem do renderowania
- glutMainLoop();
- // Funkcja uruchamia szkielet biblioteki GLUT
- }
Advertisement
Add Comment
Please, Sign In to add comment