Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*************************************************************************************/
- // Troch� bardziej skomplikowany program wykorzystuj�cy funkcje biblioteki OpenGL
- /*************************************************************************************/
- #include "pch.h"
- #include <windows.h>
- #include <gl/gl.h>
- #include <gl/glut.h>
- /*************************************************************************************/
- // Funkcaja okre�laj�ca, co ma by� rysowane
- // (zawsze wywo�ywana, gdy trzeba przerysowa� scen�)
- int level = 5;
- float sz = 100;
- int perturbacje = 5;
- float perturbatedValue(float value,float perturbatedBy) {
- return value + perturbatedBy;
- }
- void draw_sierpinski(float x, float y, float sz, int level)
- {
- if (level > 0)
- {
- sz = sz / 3;
- draw_sierpinski(x, y, sz, level - 1);
- draw_sierpinski(x - sz, y, sz, level - 1);
- draw_sierpinski(x - sz - sz, y, sz, level - 1);
- draw_sierpinski(x, y - sz, sz, level - 1);
- //draw_sierpinski(x - sz , y - sz, sz, level - 1); - zeby srodkowy kwadrat sie nie renderowal
- draw_sierpinski(x - sz - sz, y - sz, sz, level - 1);
- draw_sierpinski(x, y - sz - sz, sz, level - 1);
- draw_sierpinski(x - sz, y - sz - sz, sz, level - 1);
- draw_sierpinski(x - sz - sz, y - sz - sz, sz, level - 1);
- }
- else
- {
- glColor3ub(rand() % 255, rand() % 255, rand() % 255);
- glBegin(GL_POLYGON);
- glVertex2f(perturbatedValue(x, rand() % perturbacje) , perturbatedValue(y, rand() % perturbacje)); //r
- glVertex2f(perturbatedValue(x, rand() % perturbacje), perturbatedValue(y - sz,rand() % perturbacje)); //rb
- glVertex2f(perturbatedValue(x - sz, rand() % perturbacje), perturbatedValue(y - sz,rand() % perturbacje)); //lb
- glVertex2f(perturbatedValue(x - sz, rand() % perturbacje), perturbatedValue( y, rand() % perturbacje)); //lt
- glEnd();
- }
- }
- void RenderScene(void)
- {
- glClear(GL_COLOR_BUFFER_BIT);
- // Czyszczenie okna aktualnym kolorem czyszcz�cym
- glColor3f(0.0f, 1.0f, 0.0f);
- // Ustawienie aktualnego koloru rysowania na zielony
- draw_sierpinski(50, 50, sz, level);
- glFlush();
- // Przekazanie polece� rysuj�cych do wykonania
- }
- /*************************************************************************************/
- // Funkcja ustalaj�ca stan renderowania
- void MyInit(void)
- {
- glClearColor(0.5f, 0.5f, 0.5f, 0.0f);
- // Kolor okna wn�trza okna - ustawiono na szary
- }
- /*************************************************************************************/
- // Funkcja s�u��ca do kontroli zachowania proporcji rysowanych obiekt�w
- // niezale�nie od rozmiar�w okna graficznego
- 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();
- }
- /*************************************************************************************/
- // G��wny punkt wej�cia programu. Program dzia�a w trybie konsoli
- void main(void)
- {
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
- // Ustawienie trybu wy�wietlania
- // GLUT_SINGLE - pojedynczy bufor wy�wietlania
- // GLUT_RGBA - model kolor�w RGB
- glutCreateWindow("Drugi program w OpenGL");
- // 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
Advertisement