Advertisement
Guest User

Untitled

a guest
Nov 21st, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.80 KB | None | 0 0
  1. /* System */
  2. #include<windows.h>
  3. #include<stdio.h>
  4. /* Główna bibloteka OpenGL */
  5. #include<GL/gl.h>
  6. /* Biblioteka GLUT */
  7. #include<GL/freeglut.h>
  8.  
  9.  
  10. /* Deklaracje funkcji narzędziowych */
  11.  
  12. /* Funkcja do rysowania */
  13. void DrawScene(void);
  14. /* Prototyp fukcji rysującej osie ukłądu */
  15. void DrawSceneAxes(void);
  16.  
  17. /* Funkcja do inicjacji OpenGLa */
  18. void InitOpenGL(void);
  19.  
  20. /* Funkcja wywoływana w momentach zmiany rozmiarów okna */
  21. void ReshapeWindow(int width, int height);
  22.  
  23. /* Deklaracja globalnych zmiennych */
  24.  
  25. /* Globalny identyfikator głównego okna programu */
  26. int mainWindow;
  27.  
  28. GLfloat x_angle = 10.0f;
  29. GLfloat y_angle = 10.0f;
  30.  
  31. //TimerFunction(value);
  32. /* Funkcja main */
  33. int main(int argc, char **argv)
  34. {
  35. // Inicjujemy bibliotekę GLUT
  36. glutInit(&argc, argv);
  37. // Inicjujemy: format koloru, dwa bufoy ramki
  38. glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
  39. // Ustawiamy początkowe wymiary okna
  40. glutInitWindowSize(800, 600);
  41. // Ustawiamy pozycję okna - lewy górny narożnik
  42. glutInitWindowPosition(150,150);
  43. // Tworzymy główne okno programu
  44. mainWindow = glutCreateWindow("Transformacje czajnikowe");
  45.  
  46. // Sprawdzamy powodzenie operacji
  47. if(mainWindow == 0){
  48. puts("Nie mozna stworzyc okna!!!\nWyjscie z programu.\n");
  49. exit(-1);
  50. }
  51. // Czynimy aktywnym okno główne programu
  52. glutSetWindow(mainWindow);
  53.  
  54. // Tutaj rejestrujemy funkcje narzędziowe - tzw. callbacks
  55. glutDisplayFunc(DrawScene);
  56. glutReshapeFunc(ReshapeWindow);
  57.  
  58. // Ustawienia początkowe
  59. InitOpenGL();
  60.  
  61. // Włączamy mechanizm usuwania niewidocznych powierzchni
  62. glEnable(GL_DEPTH_TEST);
  63.  
  64. // Wejście do pętli programu
  65. glutMainLoop();
  66.  
  67. return(0);
  68. }
  69.  
  70. /* W tej funkcji określamy to co ma byc narysowane na ekranie.
  71. * Jest wywoływana zawsze wtedy, gdy trzeba przerysować ekran - bufor ramki.
  72. */
  73. void DrawScene(void)
  74. {
  75. // Czyścimy okno aktualnym (domyślnym) kolorem oraz resetujemy bufor głębi
  76. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  77.  
  78. // Rysujemy osie układu
  79. DrawSceneAxes();
  80.  
  81. // Komenda wykonania poleceń rysujących - nie jest już potrzebna przy ustaweniu GLUT_DOUBLE
  82. //glFlush();
  83.  
  84. // Zamieniamy bufory ramki
  85. glutSwapBuffers();
  86.  
  87. }
  88.  
  89. /* Ta funkcja jest wywoływana przez funkcję DrawScene.
  90. * Jej zadaniem jest rysowanie konkretnych obiektów osi układu
  91. * współrzędnych.
  92. */
  93. void DrawSceneAxes(void)
  94. {
  95. // Definiujemy nowy typ jako tablicę 3-elementową
  96. typedef float pt3d[3];
  97.  
  98. // Początek i koniec osi X
  99. pt3d x_beg = { -10.0f, 0.0f, 0.0f };
  100. pt3d x_end = { 10.0f, 0.0f, 0.0f };
  101.  
  102. // Poczatek i koniec osi Y
  103. pt3d y_beg = { 0.0f, -10.0f, 0.0f };
  104. pt3d y_end = { 0.0f, 10.0f, 0.0f };
  105.  
  106. // Początek i koniec osi Z
  107. pt3d z_beg = { 0.0f, 0.0f, -10.0f };
  108. pt3d z_end = { 0.0f, 0.0f, 10.0f };
  109.  
  110. // Rysujemy osie
  111. glBegin(GL_LINES);
  112. // Czerwony kolor dla osi X
  113. glColor3f(1.0f, 0.0f, 0.0f);
  114. glVertex3fv(x_beg);
  115. glVertex3fv(x_end);
  116.  
  117. // Zielony kolor dla osi Y
  118. glColor3f(0.0f, 1.0f, 0.0f);
  119. glVertex3fv(y_beg);
  120. glVertex3fv(y_end);
  121.  
  122. // Niebieski kolor dla osi Z
  123. glColor3f(0.0f, 0.0f, 1.0f);
  124. glVertex3fv(z_beg);
  125. glVertex3fv(z_end);
  126. glEnd();
  127.  
  128. glColor3f(0.5f, 0.5f, 0.5f);
  129.  
  130. glRotatef(x_angle, 1.0f, 0.0f, 0.0f);
  131. glRotatef(y_angle, 0.0f, 1.0f, 0.0f);
  132. glutWireTeapot(4.0);
  133. }
  134.  
  135. /* Ta funkcja służy do wstępnej konfiguracji OpenGLa.
  136. * Zanim coś narysujemy musimy wywołać tę funkcję.
  137. */
  138. void InitOpenGL(void)
  139. {
  140. // Ustawiamy domyślny, czarny kolor tła okna - bufor ramki malujemy na czarno
  141. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  142. }
  143.  
  144. /* Tę funkcję wywołuje system w momencie gdy użytkownik zmieni myszą
  145. * rozmiar głównego okna. jej zadaniem jest zachowanie proporcji wymiarów
  146. * rysowanych obiektów niezależnie od wymiarów okna.
  147. */
  148.  
  149. void ReshapeWindow(int width, int height)
  150. {
  151. //printf("w: %d\n", width);
  152. //printf("h: %d\n", height);
  153. GLdouble nRange = 15.0f;
  154. // Na wypadek dzielenia przez 0
  155. if(height == 0)
  156. {
  157. height = 1;
  158. }
  159.  
  160. if(width == 0)
  161. {
  162. width = 1;
  163. }
  164.  
  165. // Ustawiamy wielkości okna urządzenia w zakresie
  166. // od 0,0 do wysokość, szerokość
  167. glViewport(0, 0, width, height);
  168.  
  169. // Ustawiamy układ współrzędnych obserwatora
  170. glMatrixMode(GL_PROJECTION);
  171.  
  172. // Resetujemy macierz projekcji
  173. glLoadIdentity();
  174.  
  175. // Korekta
  176. if(width <= height)
  177. glOrtho(-nRange, nRange, -nRange*((GLdouble)height / width), nRange*((GLdouble)height / width), -10.0f, 10.0f);
  178. else
  179. glOrtho(-nRange*((GLdouble)width / height), nRange*((GLdouble)width / height), -nRange, nRange, -10.0f, 10.0f);
  180.  
  181. // Ustawiamy macierz modelu
  182. glMatrixMode(GL_MODELVIEW);
  183.  
  184. // Resetujemy macierz modelu
  185. glLoadIdentity();
  186. }
  187.  
  188. void TimerFunction(int value)
  189. {
  190. glutTimerFunc(30, TimerFunction, 1);
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement