Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.53 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.  
  21. /* Funkcja wywoływana w momentach zmiany rozmiarów okna */
  22. void ReshapeWindow(int width, int height);
  23.  
  24. /* Deklaracja globalnych zmiennych */
  25. GLfloat v_angle;
  26.  
  27. /* Globalny identyfikator głównego okna programu */
  28. int mainWindow;
  29.  
  30. //deklaracja zapowiadająca
  31. void KeyboardFunc(unsigned char key, int x, int y);
  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. //dodana funkcja
  47. glutKeyboardFunc(KeyboardFunc);
  48.  
  49. // Sprawdzamy powodzenie operacji
  50. if(mainWindow == 0){
  51. puts("Nie mozna stworzyc okna!!!\nWyjscie z programu.\n");
  52. exit(-1);
  53. }
  54. // Czynimy aktywnym okno główne programu
  55. glutSetWindow(mainWindow);
  56.  
  57. // Tutaj rejestrujemy funkcje narzędziowe - tzw. callbacks
  58. glutDisplayFunc(DrawScene);
  59. glutReshapeFunc(ReshapeWindow);
  60.  
  61. glutKeyboardFunc(KeyboardFunc);
  62. //resetowanie licznika
  63. /*l*/
  64.  
  65. // Ustawienia początkowe
  66. InitOpenGL();
  67.  
  68. // Włączamy mechanizm usuwania niewidocznych powierzchni
  69. glEnable(GL_DEPTH_TEST);
  70.  
  71. // Wejście do pętli programu
  72. glutMainLoop();
  73.  
  74. return(0);
  75. }
  76.  
  77. /* W tej funkcji określamy to co ma byc narysowane na ekranie.
  78. * Jest wywoływana zawsze wtedy, gdy trzeba przerysować ekran - bufor ramki.
  79. */
  80. void DrawScene(void)
  81. {
  82. // Czyścimy okno aktualnym (domyślnym) kolorem oraz resetujemy bufor głębi
  83. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  84.  
  85. // Rysujemy osie układu
  86. DrawSceneAxes();
  87.  
  88. // Komenda wykonania poleceń rysujących - nie jest już potrzebna przy ustaweniu GLUT_DOUBLE
  89. //glFlush();
  90.  
  91. // Zamieniamy bufory ramki
  92. glutSwapBuffers();
  93.  
  94. }
  95.  
  96. /* Ta funkcja jest wywoływana przez funkcję DrawScene.
  97. * Jej zadaniem jest rysowanie konkretnych obiektów osi układu
  98. * współrzędnych.
  99. */
  100. void DrawSceneAxes(void)
  101. {
  102. // Definiujemy nowy typ jako tablicę 3-elementową
  103. typedef float pt3d[3];
  104.  
  105. // Początek i koniec osi X
  106. pt3d x_beg = { -10.0f, 0.0f, 0.0f };
  107. pt3d x_end = { 10.0f, 0.0f, 0.0f };
  108.  
  109. // Poczatek i koniec osi Y
  110. pt3d y_beg = { 0.0f, -10.0f, 0.0f };
  111. pt3d y_end = { 0.0f, 10.0f, 0.0f };
  112.  
  113. // Początek i koniec osi Z
  114. pt3d z_beg = { 0.0f, 0.0f, -10.0f };
  115. pt3d z_end = { 0.0f, 0.0f, 10.0f };
  116.  
  117. // Rysujemy osie
  118. glBegin(GL_LINES);
  119. // Czerwony kolor dla osi X
  120. glColor3f(1.0f, 0.0f, 0.0f);
  121. glVertex3fv(x_beg);
  122. glVertex3fv(x_end);
  123.  
  124. // Zielony kolor dla osi Y
  125. glColor3f(0.0f, 1.0f, 0.0f);
  126. glVertex3fv(y_beg);
  127. glVertex3fv(y_end);
  128.  
  129. // Niebieski kolor dla osi Z
  130. glColor3f(0.0f, 0.0f, 1.0f);
  131. glVertex3fv(z_beg);
  132. glVertex3fv(z_end);
  133.  
  134.  
  135.  
  136. glEnd();
  137.  
  138. glColor3f(0.5f, 0.5f, 0.5f);
  139. //zmiana na
  140. //glutSolidTeapot(GLdouble size);
  141. //z
  142. //glutWireTeapot(GLdouble size);
  143.  
  144. //obrócenie dzbanka
  145.  
  146. //glRotatef(-20.0f,1.0f,0.3f,0.0f);
  147. glRotatef(v_angle,1.0f,0.0f,0.0f);
  148. glRotatef(v_angle,0.0f,1.0f,0.0f);
  149. /*
  150. glTranslatef(1.2f,0.0f,0.0f);
  151. glScalef(1.2f,1.2f,1.2f);
  152. */
  153. glutSolidTeapot(4.0);
  154.  
  155. }
  156.  
  157. /* Ta funkcja służy do wstępnej konfiguracji OpenGLa.
  158. * Zanim coś narysujemy musimy wywołać tę funkcję.
  159. */
  160. void InitOpenGL(void)
  161. {
  162. // Ustawiamy domyślny, czarny kolor tła okna - bufor ramki malujemy na czarno
  163. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  164. }
  165.  
  166. /* Tę funkcję wywołuje system w momencie gdy użytkownik zmieni myszą
  167. * rozmiar głównego okna. jej zadaniem jest zachowanie proporcji wymiarów
  168. * rysowanych obiektów niezależnie od wymiarów okna.
  169. */
  170.  
  171. void ReshapeWindow(int width, int height)
  172. {
  173. //printf("w: %d\n", width);
  174. //printf("h: %d\n", height);
  175. GLdouble nRange = 15.0f;
  176. // Na wypadek dzielenia przez 0
  177. if(height == 0)
  178. {
  179. height = 1;
  180. }
  181.  
  182. if(width == 0)
  183. {
  184. width = 1;
  185. }
  186.  
  187. // Ustawiamy wielkości okna urządzenia w zakresie
  188. // od 0,0 do wysokość, szerokość
  189. glViewport(0, 0, width, height);
  190.  
  191. // Ustawiamy układ współrzędnych obserwatora
  192. glMatrixMode(GL_PROJECTION);
  193.  
  194. // Resetujemy macierz projekcji
  195. glLoadIdentity();
  196.  
  197. // Korekta
  198. if(width <= height)
  199. glOrtho(-nRange, nRange, -nRange*((GLdouble)height / width), nRange*((GLdouble)height / width), -1.0f, 1.0f);
  200. else
  201. glOrtho(-nRange*((GLdouble)width / height), nRange*((GLdouble)width / height), -nRange, nRange, -1.0f, 1.0f);
  202.  
  203. // Ustawiamy macierz modelu
  204. glMatrixMode(GL_MODELVIEW);
  205.  
  206. // Resetujemy macierz modelu
  207. glLoadIdentity();
  208. }
  209.  
  210. /* Funkcja obsługująca klawiaturę
  211. */
  212. void KeyboardFunc(unsigned char key, int x, int y)
  213. {
  214. switch(key)
  215. {
  216. case 27: // Wciśnięcie klawisza ESC spowoduje wyjście z programu
  217. exit(0);
  218. case 'w': // Wciśnięcie klawisza w spowoduje inkrementację zmiennej
  219. v_angle += 0.05f;
  220. break;
  221. case 'r': // Wciśnięcie klawisza r spowoduje dekrementację zmiennej
  222. v_angle -= 0.05f;
  223.  
  224. break;
  225. }
  226. glutPostRedisplay();
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement