Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication1.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
- //
- #include <iostream>
- #include <gl/glut.h>
- #include <gl/gl.h>
- #include <time.h>
- // Funkcaja określająca, co ma być rysowane
- // (zawsze wywoływana, gdy trzeba przerysować scenę)
- float W(int x)
- {
- if (x < 0)
- x = x * -1;
- float s = -0.002f * x + 0.5f;
- return s;
- }
- float losujKolor(float pkl, float pkr)
- {
- int x = 5;
- float c = 1 - 2 * W(x) * (float)((rand() % 23)%128) + W(x) * pkl + W(x) * pkr;
- c = (int)c % 128;
- return c;
- }
- void rysujKwadraty(float a, float x, float y, int poz, int per, float pkl, float pkr) //a-długość boku, x i y-punkty rysowania początku dywanu, poz-głębokość, per-perturbacje
- {
- //std::cout << "poziom: " << poz << "\n";
- //for(int i=0; i<10; i++)
- if (poz > 0)
- {
- float A = a / 2.0f;
- rysujKwadraty(A, x, y, poz - 1, per, pkl, pkr);
- rysujKwadraty(A, x + A, y, poz - 1, per, pkl, pkr);
- //rysujKwadraty(A, x + 2.0f *A, y, poz - 1, per);
- rysujKwadraty(A, x, y - A, poz - 1, per, pkl, pkr);
- rysujKwadraty(A, x + A, y - A, poz-1, per, pkl, pkr);
- /*rysujKwadraty(A, x + 2.0f *A, y - A, poz - 1, per);
- rysujKwadraty(A, x, y - 2.0f * A, poz - 1, per);
- rysujKwadraty(A, x + A, y - 2.0f * A, poz - 1, per);
- rysujKwadraty(A, x + 2.0f *A, y - 2.0f * A, poz - 1, per);/**/
- }
- else
- {
- float xr = (rand() % per) % 2;
- float yr = (rand() % per) % 2;
- float B = a / 2.0f;
- //glColor3ub(255.0f, 0.0f, 0.0f);
- glBegin(GL_POLYGON);
- glColor3ub(losujKolor(pkl, pkr), losujKolor(pkl, pkr), losujKolor(pkl, pkr));
- glVertex2f(-1.0f*(B)+x + xr, -1.0f*(B)+y + yr);
- xr = (rand() % per) % 2;
- yr = (rand() % per) % 2;
- glColor3ub(losujKolor(pkl, pkr), losujKolor(pkl, pkr), losujKolor(pkl, pkr));
- glVertex2f((B)+x + xr, -1.0f*(B)+y + yr);
- xr = (rand() % per) % 2;
- yr = (rand() % per) % 2;
- glColor3ub(losujKolor(pkl, pkr), losujKolor(pkl, pkr), losujKolor(pkl, pkr));
- glVertex2f((B)+x + xr, (B)+y + yr);
- xr = (rand() % per) % 2;
- yr = (rand() % per) % 2;
- glColor3ub(losujKolor(pkl, pkr), losujKolor(pkl, pkr), losujKolor(pkl, pkr));
- glVertex2f(-1.0f*(B)+x + xr, (B)+y + yr);
- glEnd();
- }
- }
- void RenderScene(void)
- {
- float A = 180, x = A / 2, y = x;
- int poziom = 7;
- int perturbacje = 1;
- glClear(GL_COLOR_BUFFER_BIT);
- /*std::cout << "podaj długość boku kwadratu: ";
- std::cin >> A;
- std::cout << "podaj poziom zagłębienia: ";
- std::cin >> poziom;
- std::cout << "podaj poziom perturbacji: ";
- std::cin >> perturbacje;//*/
- rysujKwadraty(A, -1.0f*x, y, poziom, perturbacje, rand() % 23 + 105, 0);
- glFlush();
- }
- /*************************************************************************************/
- // Funkcja ustalająca stan renderowania
- void MyInit(void)
- {
- glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
- // Kolor okna wnętrza okna - ustawiono na szary
- }
- 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(int argc, char* argv[])
- {
- srand(time(NULL));
- /*std::cout << "Hello World!\n";
- glutInit(&argc, argv);
- system("PAUSE");
- glutCreateWindow("napis");
- system("PAUSE");//*/
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
- // Ustawienie trybu wyświetlania
- // GLUT_SINGLE - pojedynczy bufor wyświetlania
- // GLUT_RGBA - model kolorów RGB
- glutInit(&argc, argv);
- glutCreateWindow("Dywan Sierpińskiego");
- // 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 konieczne przed przystąpieniem do renderowania
- glutMainLoop();
- // Funkcja uruchamia szkielet biblioteki GLUT
- }
- // Uruchomienie programu: Ctrl + F5 lub menu Debugowanie > Uruchom bez debugowania
- // Debugowanie programu: F5 lub menu Debugowanie > Rozpocznij debugowanie
- // Porady dotyczące rozpoczynania pracy:
- // 1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi
- // 2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła
- // 3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty
- // 4. Użyj okna Lista błędów, aby zobaczyć błędy
- // 5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu
- // 6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement