Facebook
From Wojciech, 5 Days ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 37
  1. /*
  2.  * Laboratorium Grafiki Komputerowej
  3.  * Pierwszy program wykorzystuj─ůcy OpenGL'a
  4.  */
  5.  
  6. /* System */
  7. #include<stdio.h>
  8. #include<stdlib.h>
  9.  
  10. /* Biblioteka GLUT */
  11. #include <GL/freeglut.h>
  12.  
  13. /* Deklaracje funkcji narz─Ödziowych */
  14.  
  15. /* Funkcja do rysowania */
  16. void DrawScene(void);
  17.  
  18. /* Funkcja do inicjacji OpenGLa */
  19. void InitOpenGL(void);
  20.  
  21. /* Funkcja wywoływana w momentach zmiany rozmiarów okna */
  22. void ReshapeWindow(int width, int height);
  23.  
  24. /* Deklaracja globalnych zmiennych */
  25.  
  26. /* Globalny identyfikator głównego okna programu */
  27. int mainWindow;
  28.  
  29. /* Funkcja main */
  30. int main(int argc, char **argv)
  31. {
  32.         // Inicjujemy bibliotek─Ö GLUT
  33.         glutInit(&argc, argv);
  34.         // Inicjujemy: format koloru, jeden bufor ramki
  35.     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  36.         // Ustawiamy pocz─ůtkowe wymiary okna
  37.     glutInitWindowSize(800, 800);
  38.         // Ustawiamy pozycj─Ö okna - lewy g├│rny naroznik
  39.         glutInitWindowPosition(150,150);
  40.         // Tworzymy g┼é├│wne okno programu
  41.     mainWindow = glutCreateWindow("Pierwsze Laboratorium");
  42.  
  43.         // Sprawdzamy powodzenie operacji
  44.         if(mainWindow == 0){
  45.                 puts("Nie mozna stworzyc okna!!!nWyjscie z programu.n");
  46.                 exit(-1);
  47.         }
  48.  
  49.         // Czynimy aktywnym okno g┼é├│wne programu
  50.         glutSetWindow(mainWindow);
  51.  
  52.         // Tutaj rejestrujemy funkcje narz─Ödziowe - tzw. callbacks
  53.         glutDisplayFunc(DrawScene);
  54.         glutReshapeFunc(ReshapeWindow);
  55.  
  56.         // ustawienia pocz─ůtkowe
  57.         InitOpenGL();
  58.  
  59.         // Wej┼Ťcie do p─Ötli programu
  60.         glutMainLoop();
  61.        
  62.         return(0);
  63. }
  64.  
  65. /* W tej funkcji okre┼Ťlamy to co ma byc narysowane na ekranie.
  66.  * Jest wywo┼éywana zawsze wtedy, gdy trzeba przerysowa─ç ekran - bufor ramki.
  67.  */
  68. void DrawScene(void)
  69. {
  70.         // Czy┼Ťcimy okno aktualnym (domy┼Ťlnym) kolorem
  71.         glClear(GL_COLOR_BUFFER_BIT);
  72.        
  73.         // Ustawiamy grubo┼Ť─ç linii
  74.         glLineWidth(5.0f);
  75.  
  76.         // Tworzenie prymityw├│w graficznych zawsze ograniczamy funkcjami glBegin i glEnd
  77.         glBegin(GL_TRIANGLES);
  78.  
  79.                 // Ustawiamy bie┼╝─ůcy kolor rysowania na czerwony
  80.                 glColor3f(1.1f, 0.0f, 1.1f);
  81.                 // Dwa ko┼äce pierwszego odcinka
  82.                 glVertex2f(-50.0f, 0.0f);
  83.                 //glVertex2f(0.0f, 50.0f);
  84.  
  85.                 // Zmieniamy kolor rysowania na zielony
  86.                 glColor3f(1.1f, 0.0f, 1.1f);
  87.                 // Dwa ko┼äce drugiego odcinka
  88.                 glVertex2f(0.0f, 50.0f);
  89.                 //glVertex2f(50.0f, 0.0f);
  90.  
  91.                 // Zmieniamy kolor rysowania na niebieski
  92.                 glColor3f(1.1f, 0.0f, 1.1f);
  93.                 // Dwa ko┼äce drugiego odcinka
  94.                 glVertex2f(50.0f, 0.0f);
  95.                 //glVertex2f(-50.0f, 0.0f);
  96.  
  97.         glEnd();
  98.  
  99.         // Komenda wykonania polece┼ä rysuj─ůcych
  100.         glFlush();
  101. }
  102.  
  103. /* Ta funkcja służy do wstępnej konfiguracji OpenGLa.
  104.  * Zanim co┼Ť narysujemy musimy wywo┼éa─ç t─Ö funkcj─Ö.
  105.  */
  106. void InitOpenGL(void)
  107. {
  108.         // Usawiamy domy┼Ťlny, czarny kolor t┼éa okna - bufor ramki malujemy na czarno
  109.         glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  110. }
  111.  
  112. /* T─Ö funkcj─Ö wywo┼éuje system w momencie gdy uytkownik zmieni mysz─ů
  113.  * rozmiar g┼éownego okna. jej zadaniem jest zachowanie propocji wymiar├│w
  114.  * rysowanych obiekt├│w niezale┼╝nie od wymiar├│w okna.
  115.  */
  116. void ReshapeWindow(int width, int height)
  117. {
  118.         int aspectRatio; // = width / height
  119.        
  120.         // Na wypadek dzielenia przez 0
  121.         if(height == 0) height = 1;
  122.  
  123.         // Wyliczamy wsp├│┼éczynnik proporcji
  124.         aspectRatio = width / height;
  125.  
  126.         // Ustawiamy wielko┼Ťci okna okna urz─ůdzenia w zakresie
  127.         // od 0,0 do wysoko┼Ť─ç, szeroko┼Ť─ç
  128.         glViewport(0, 0, width, height);
  129.      
  130.         // Ustawiamy uk┼éad wsp├│┼érz─Ödnych obserwatora
  131.     glMatrixMode(GL_PROJECTION);
  132.  
  133.         // Resetujemy macierz projkecji
  134.     glLoadIdentity();
  135.    
  136.         // Korekta  
  137.     if(width <= height)
  138.                 glOrtho(-100.0, 100.0, -100.0/aspectRatio, 100.0/aspectRatio, 1.0, -1.0);  
  139.      else
  140.                 glOrtho(-100.0*aspectRatio, 100.0*aspectRatio, -100.0, 100.0, 1.0, -1.0);
  141.  
  142.         // Ustawiamy macierz modelu
  143.     glMatrixMode(GL_MODELVIEW);
  144.    
  145.         // Resetujemy macierz modelu
  146.     glLoadIdentity();
  147.        
  148. }