SHARE
TWEET

Untitled

a guest Oct 10th, 2019 64 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*************************************************************************************/
  2.  
  3.  
  4. // Troch� bardziej skomplikowany program wykorzystuj�cy funkcje biblioteki OpenGL
  5.  
  6.  
  7.  
  8. /*************************************************************************************/
  9.  
  10. #include "pch.h"
  11. #include <windows.h>
  12. #include <gl/gl.h>
  13. #include <gl/glut.h>
  14.  
  15. /*************************************************************************************/
  16.  
  17.  
  18. // Funkcaja okre�laj�ca, co ma by� rysowane
  19. // (zawsze wywo�ywana, gdy trzeba przerysowa� scen�)
  20.  
  21. int level = 5;
  22. float sz = 100;
  23. int perturbacje = 5;
  24.  
  25. float perturbatedValue(float value,float perturbatedBy) {
  26.     return value + perturbatedBy;
  27. }
  28.  
  29. void draw_sierpinski(float x, float y, float sz, int level)
  30. {
  31.     if (level > 0)
  32.     {
  33.         sz = sz / 3;
  34.  
  35.         draw_sierpinski(x, y, sz, level - 1);
  36.         draw_sierpinski(x - sz, y, sz, level - 1);
  37.         draw_sierpinski(x - sz - sz, y, sz, level - 1);
  38.  
  39.         draw_sierpinski(x, y - sz, sz, level - 1);
  40.         //draw_sierpinski(x - sz , y - sz, sz, level - 1); - zeby srodkowy kwadrat sie nie renderowal
  41.         draw_sierpinski(x - sz - sz, y - sz, sz, level - 1);
  42.  
  43.         draw_sierpinski(x, y - sz - sz, sz, level - 1);
  44.         draw_sierpinski(x - sz, y - sz - sz, sz, level - 1);
  45.         draw_sierpinski(x - sz - sz, y - sz - sz, sz, level - 1);
  46.     }
  47.  
  48.     else
  49.     {
  50.  
  51.         glColor3ub(rand() % 255, rand() % 255, rand() % 255);
  52.         glBegin(GL_POLYGON);
  53.  
  54.  
  55.         glVertex2f(perturbatedValue(x, rand() % perturbacje) , perturbatedValue(y, rand() % perturbacje)); //r
  56.         glVertex2f(perturbatedValue(x, rand() % perturbacje), perturbatedValue(y - sz,rand() % perturbacje)); //rb
  57.         glVertex2f(perturbatedValue(x - sz, rand() % perturbacje), perturbatedValue(y - sz,rand() % perturbacje)); //lb
  58.         glVertex2f(perturbatedValue(x - sz, rand() % perturbacje), perturbatedValue( y, rand() % perturbacje)); //lt
  59.         glEnd();
  60.     }
  61. }
  62.  
  63. void RenderScene(void)
  64.  
  65. {
  66.  
  67.     glClear(GL_COLOR_BUFFER_BIT);
  68.     // Czyszczenie okna aktualnym kolorem czyszcz�cym
  69.  
  70.  
  71.     glColor3f(0.0f, 1.0f, 0.0f);
  72.     // Ustawienie aktualnego koloru rysowania na zielony
  73.  
  74.     draw_sierpinski(50, 50, sz, level);
  75.  
  76.     glFlush();
  77.     // Przekazanie polece� rysuj�cych do wykonania
  78.  
  79. }
  80.  
  81. /*************************************************************************************/
  82.  
  83.  
  84. // Funkcja ustalaj�ca stan renderowania
  85.  
  86.  
  87.  
  88.  
  89. void MyInit(void)
  90.  
  91. {
  92.  
  93.     glClearColor(0.5f, 0.5f, 0.5f, 0.0f);
  94.     // Kolor okna wn�trza okna - ustawiono na szary
  95.  
  96. }
  97.  
  98. /*************************************************************************************/
  99.  
  100.  
  101. // Funkcja s�u��ca do kontroli zachowania proporcji rysowanych obiekt�w
  102. // niezale�nie od rozmiar�w okna graficznego
  103.  
  104.  
  105.  
  106. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  107.  
  108. // Parametry horizontal i vertical (szeroko�� i wysoko�� okna) s�
  109. // przekazywane do funkcji za ka�dym razem, gdy zmieni si� rozmiar okna
  110.  
  111. {
  112.  
  113.     GLfloat AspectRatio;
  114.  
  115.     // Deklaracja zmiennej AspectRatio okre�laj�cej proporcj� wymiar�w okna
  116.  
  117.  
  118.  
  119.     if (vertical == 0)
  120.         // Zabezpieczenie pzred dzieleniem przez 0
  121.  
  122.         vertical = 1;
  123.  
  124.     glViewport(0, 0, horizontal, vertical);
  125.     // Ustawienie wielko�ciokna okna urz�dzenia (Viewport)
  126.     // W tym przypadku od (0,0) do (horizontal, vertical)
  127.  
  128.     glMatrixMode(GL_PROJECTION);
  129.     // Okre�lenie uk�adu wsp�rz�dnych obserwatora
  130.  
  131.     glLoadIdentity();
  132.     // Okre�lenie przestrzeni ograniczaj�cej
  133.  
  134.     AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
  135.     // Wyznaczenie wsp�czynnika proporcji okna
  136.  
  137.     // Gdy okno na ekranie nie jest kwadratem wymagane jest
  138.     // okre�lenie okna obserwatora.
  139.     // Pozwala to zachowa� w�a�ciwe proporcje rysowanego obiektu
  140.     // Do okre�lenia okna obserwatora s�u�y funkcja glOrtho(...)
  141.  
  142.  
  143.     if (horizontal <= vertical)
  144.  
  145.         glOrtho(-100.0, 100.0, -100.0 / AspectRatio, 100.0 / AspectRatio, 1.0, -1.0);
  146.  
  147.     else
  148.  
  149.         glOrtho(-100.0*AspectRatio, 100.0*AspectRatio, -100.0, 100.0, 1.0, -1.0);
  150.  
  151.  
  152.  
  153.     glMatrixMode(GL_MODELVIEW);
  154.     // Okre�lenie uk�adu wsp�rz�dnych    
  155.  
  156.     glLoadIdentity();
  157.  
  158. }
  159.  
  160. /*************************************************************************************/
  161.  
  162.  
  163. // G��wny punkt wej�cia programu. Program dzia�a w trybie konsoli
  164.  
  165.  
  166.  
  167.  
  168. void main(void)
  169.  
  170. {
  171.  
  172.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
  173.     // Ustawienie trybu wy�wietlania
  174.     // GLUT_SINGLE - pojedynczy bufor wy�wietlania
  175.     // GLUT_RGBA - model kolor�w RGB
  176.  
  177.  
  178.     glutCreateWindow("Drugi program w OpenGL");
  179.     // Utworzenie okna i okre�lenie tre�ci napisu w nag��wku okna
  180.  
  181.     glutDisplayFunc(RenderScene);
  182.     // Okre�lenie, �e funkcja RenderScene b�dzie funkcj� zwrotn� (callback)
  183.     // Biblioteka GLUT b�dzie wywo�ywa�a t� funkcj� za ka�dym razem, gdy
  184.     // trzeba b�dzie przerysowa� okno
  185.  
  186.  
  187.     glutReshapeFunc(ChangeSize);
  188.     // Dla aktualnego okna ustala funkcj� zwrotn� odpowiedzialn� za
  189.     // zmiany rozmiaru okna
  190.  
  191.     MyInit();
  192.     // Funkcja MyInit (zdefiniowana powy�ej) wykonuje wszelkie
  193.     // inicjalizacje konieczneprzed przyst�pieniem do renderowania
  194.  
  195.  
  196.     glutMainLoop();
  197.     // Funkcja uruchamia szkielet biblioteki GLUT
  198.  
  199. }
  200.  
  201. /*************************************************************************************/
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