SHARE
TWEET

Untitled

a guest Oct 23rd, 2019 54 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <unistd.h>
  2. #include <GLUT/GLUT.h>
  3. #include <cstdlib>
  4. #include <OpenGL/OpenGL.h>
  5. #include <ctime>
  6. #include <math.h>
  7.  
  8. // Dywan Sierpińśkiego - Kamil Jędras, 241299, Środa TP 14:00
  9.  
  10. int depth=3;
  11.  
  12. void drawSq(float x, float y, int size) {
  13.  
  14.     glBegin(GL_POLYGON);
  15.     glColor3f(1.0f, 1.0f, 1.0f); //kwadraty rysowane kolorem bia³ym
  16.     glVertex2f(x,y);
  17.     glVertex2f(x+size,y);
  18.     glVertex2f(x+size,y-size);
  19.     glVertex2f(x,y-size);
  20.     glEnd();
  21.  
  22. }
  23.  
  24. /*
  25. float randFloat(){
  26.  
  27.     return (float) (rand()%101)/100;
  28.  
  29. }
  30.  
  31. void drawSqColor(float x, float y, int size){ //metoda rysująca kolorwe kwadraty
  32.  
  33.     glBegin(GL_POLYGON);
  34.     glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  35.     glColor3f(randFloat(),randFloat(),randFloat());
  36.     glVertex2f(x,y);
  37.     glColor3f(randFloat(),randFloat(),randFloat());
  38.     glVertex2f(x+size,y);
  39.     glColor3f(randFloat(),randFloat(),randFloat());
  40.     glVertex2f(x+size,y-size);
  41.     glColor3f(randFloat(),randFloat(),randFloat());
  42.     glVertex2f(x,y-size);
  43.     glEnd();
  44.  
  45. } */
  46.  
  47. void mainLoop (float x, float y, int d){
  48.  
  49.     int size = pow (3, d+1);
  50.  
  51.     for(int i=0;i<3;i++)
  52.         for(int j=0;j<3;j++)
  53.             if(i!=1||j!=1){ //sprawdzam czy to nie srodkowy
  54.  
  55.                 if(d==1) drawSq(  (x+j*size/3),(y-i*size/3),size/3);
  56.                 else mainLoop((x+j*size/3),(y-i*size/3),d-1);
  57.  
  58.                 }
  59.  
  60. }
  61.  
  62. void RenderScene(void)
  63.  
  64. {
  65.  
  66.     glClear(GL_COLOR_BUFFER_BIT);
  67.     // Czyszczenie okna aktualnym kolorem czyszcz¹cym
  68.  
  69.     mainLoop(-40, 40, depth);
  70.  
  71.     glFlush();
  72.     // Przekazanie poleceñ rysuj¹cych do wykonania
  73.  
  74. }
  75.  
  76. void MyInit(void)
  77.  
  78. {
  79.  
  80.     glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  81.     // Kolor okna wnêtrza okna - ustawiono na czarny
  82.  
  83. }
  84.  
  85. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  86.  
  87. // Parametry horizontal i vertical (szerokoœæ i wysokoœæ okna) s¹
  88. // przekazywane do funkcji za ka¿dym razem, gdy zmieni siê rozmiar okna
  89.  
  90. {
  91.  
  92.     GLfloat AspectRatio;
  93.  
  94.     // Deklaracja zmiennej AspectRatio okreœlaj¹cej proporcjê wymiarów okna
  95.  
  96.  
  97.  
  98.     if (vertical == 0)
  99.         // Zabezpieczenie pzred dzieleniem przez 0
  100.  
  101.         vertical = 1;
  102.  
  103.  
  104.     glViewport(0, 0, horizontal, vertical);
  105.     // Ustawienie wielkoœciokna okna urz¹dzenia (Viewport)
  106.     // W tym przypadku od (0,0) do (horizontal, vertical)
  107.  
  108.  
  109.     glMatrixMode(GL_PROJECTION);
  110.     // Okreœlenie uk³adu wspó³rzêdnych obserwatora
  111.  
  112.     glLoadIdentity();
  113.     // Okreœlenie przestrzeni ograniczaj¹cej
  114.  
  115.     AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
  116.     // Wyznaczenie wspó³czynnika proporcji okna
  117.  
  118.     // Gdy okno na ekranie nie jest kwadratem wymagane jest
  119.     // okreœlenie okna obserwatora.
  120.     // Pozwala to zachowaæ w³aœciwe proporcje rysowanego obiektu
  121.     // Do okreœlenia okna obserwatora s³u¿y funkcja glOrtho(...)
  122.  
  123.  
  124.  
  125.     if (horizontal <= vertical)
  126.  
  127.         glOrtho(-100.0, 100.0, -100.0 / AspectRatio, 100.0 / AspectRatio, 1.0, -1.0);
  128.  
  129.     else
  130.  
  131.         glOrtho(-100.0*AspectRatio, 100.0*AspectRatio, -100.0, 100.0, 1.0, -1.0);
  132.  
  133.     glMatrixMode(GL_MODELVIEW);
  134.     // Okreœlenie uk³adu wspó³rzêdnych
  135.  
  136.     glLoadIdentity();
  137.  
  138. }
  139.  
  140.  
  141. int main(int argc, char** argv)
  142.  
  143. {
  144.     glutInit(&argc, argv);
  145.  
  146.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
  147.     // Ustawienie trybu wyœwietlania
  148.     // GLUT_SINGLE - pojedynczy bufor wyœwietlania
  149.     // GLUT_RGBA - model kolorów RGB
  150.  
  151.  
  152.  
  153.     glutCreateWindow("Dywan Sierpinskiego");
  154.     // Utworzenie okna i okreœlenie treœci napisu w nag³ówku okna
  155.  
  156.  
  157.     glutDisplayFunc(RenderScene);
  158.     // Okreœlenie, ¿e funkcja RenderScene bêdzie funkcj¹ zwrotn¹ (callback)
  159.     // Biblioteka GLUT bêdzie wywo³ywa³a t¹ funkcjê za ka¿dym razem, gdy
  160.     // trzeba bêdzie przerysowaæ okno
  161.  
  162.  
  163.     glutReshapeFunc(ChangeSize);
  164.     // Dla aktualnego okna ustala funkcjê zwrotn¹ odpowiedzialn¹ za
  165.     // zmiany rozmiaru okna
  166.  
  167.     MyInit();
  168.     // Funkcja MyInit (zdefiniowana powy¿ej) wykonuje wszelkie
  169.     // inicjalizacje konieczneprzed przyst¹pieniem do renderowania
  170.  
  171.  
  172.     glutMainLoop();
  173.     // Funkcja uruchamia szkielet biblioteki GLUT
  174.  
  175. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top