SHARE
TWEET

Untitled

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