Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.77 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "cmath"
  3. #include "iostream"
  4. // Deklaracje funkcji, ktore beda uzyte do obslugi roznych zdarzen.
  5. void OnRender();
  6. void OnReshape(int, int);
  7.  
  8. // Punkt wejscia do programu.
  9. int main(int argc, char * argv[])
  10. {
  11. // Inicjalizacja biblioteki GLUT. Nalezy przekazac parametry
  12. // wywolania programu.
  13. glutInit(&argc, argv);
  14.  
  15. // Ustawienie parametrow okna i kontekstu OpenGL.
  16. glutInitWindowPosition(100, 100);
  17. glutInitWindowSize(640, 360);
  18. glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); // bufor klatki w formacie RGBA, double-buffered, z buforem glebokosci
  19.  
  20. // Utworzenie wlasciwego okna i nadanie mu tytulu.
  21. glutCreateWindow("GKiW: Lab 1");
  22.  
  23. // Ustawienie funkcji Render() jako tej, ktora jest wykonywana
  24. // kazdorazowo gdy potrzeba przerysowac zawartosc okna.
  25. glutDisplayFunc(OnRender);
  26. glutReshapeFunc(OnReshape);
  27.  
  28. // Wlaczenie testu glebokosci.
  29. glEnable(GL_DEPTH_TEST);
  30.  
  31. // Rozpoczecie wykonywania petli glownej. Od tego momentu
  32. // wplyw na przebieg dzialania programu maja wylacznie zarejestrowane
  33. // uprzednio callbacki.
  34. glutMainLoop();
  35.  
  36. return 0;
  37. }
  38.  
  39. // Licznik klatek - uzyteczny przy prostym ruchu kamery.
  40. int frame = 0;
  41.  
  42. // Callback przerysowujacy klatke.
  43. void OnRender() {
  44.  
  45. // Wyczysc zawartosc bufora koloru i glebokosci.
  46. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  47.  
  48. // Wybor macierzy, ktora od tej pory bedziemy modyfikowac
  49. // - macierz Modelu/Widoku.
  50. glMatrixMode(GL_MODELVIEW);
  51.  
  52. // Zaladowanie macierzy jednostkowej.
  53. glLoadIdentity();
  54.  
  55. // Przesuniecie swiata (przeciwienstwo przesuniecia kamery).
  56. glTranslatef(0.0f, 0.0f, -6.0f);
  57.  
  58. // Obrot kamery - aby zatrzymac ja w miejscu, nalezy zakomentowac.
  59. glRotatef(frame, 0.0f, 1.0f, 0.0f);
  60.  
  61.  
  62. // Rysowanie obiektow na scenie.
  63. #pragma region examples
  64. /*// Prostopadloscian
  65. glColor3f(1.0f, 0.0f, 0.0f);
  66. glPushMatrix();
  67. glTranslatef(0.0f, 0.5f, 0.0f);
  68. glScalef(4.0f, 0.5f, 0.5f);
  69. glutSolidCube(1.0f);
  70. glPopMatrix();
  71.  
  72. // Kula
  73. glColor3f(0.0f, 1.0f, 0.0f);
  74. glPushMatrix();
  75. glTranslatef(-3.0f, -0.5f, 0.0f);
  76. glutSolidSphere(.5f, 24, 24);
  77. glPopMatrix();
  78.  
  79. // Stozek
  80. glColor3f(0.0f, 0.0f, 1.0f);
  81. glPushMatrix();
  82. glTranslatef(3.0f, -1.0f, 0.0f);
  83. glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
  84. glutSolidCone(.5f, 1.0f, 14, 14);
  85. glPopMatrix();
  86. */
  87. #pragma endregion
  88. #pragma region pajac
  89. #pragma region BODY
  90. glColor3f(1.0f, 0.0f, 0.0f);
  91. glPushMatrix();
  92. glTranslatef(0.0f, 0.5f, 0.0f);
  93. glScalef(2.0f, 3.0f, 0.5f);
  94. glutSolidCube(1.0f);
  95. glPopMatrix();
  96. #pragma endregion
  97. #pragma region NOGI
  98. glColor3f(0.0f, 0.0f, 1.0f);
  99. glPushMatrix();
  100. glTranslatef(-1.0f, -2.0f, 0.0f);
  101. glScalef(0.5f, 2.0f, 0.5f);
  102. glRotatef(-90.0f, 0.0f, 0.0f, 1.0f);
  103. glutSolidCube(1.0f);
  104. glPopMatrix();
  105.  
  106. glColor3f(0.0f, 0.0f, 1.0f);
  107. glPushMatrix();
  108. glTranslatef(1.0f, -2.0f, 0.0f);
  109. glScalef(0.5f, 2.0f, 0.5f);
  110. glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
  111. glutSolidCube(1.0f);
  112. glPopMatrix();
  113. #pragma endregion
  114. #pragma region Glowa
  115. glColor3f(1.0f, 1.0f, 0.0f);
  116. glPushMatrix();
  117. glTranslatef(0.0f, 2.5f, 0.0f);
  118. glutSolidSphere(.5f, 24, 24);
  119. glPopMatrix();
  120.  
  121. glColor3f(0.0f, 1.0f, 0.0f);
  122. glPushMatrix();
  123. glTranslatef(0.0f, 3.0f, 0.0f);
  124. glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
  125. glutSolidCone(.5f, 1.0f, 14, 14);
  126. glPopMatrix();
  127. #pragma endregion
  128. #pragma region Reka
  129.  
  130. float rotationHand = 30*(float)sin(frame / 2.5);
  131. //std::cout << rotationHand<<"=45*"<< sin(frame / 10)<<" "<<frame << std::endl;
  132. glColor3f(1.0f, 1.0f, 1.0f);
  133. glPushMatrix();
  134. glTranslatef(-1.95f, 1.5f, 0.0f);
  135. glRotatef(rotationHand, 0.0f, 0.0f, 1.0f);
  136. glScalef(2.0f, 0.5f, 0.5f);
  137. //glRotatef(-90.0f, 0.0f, 0.0f, 1.0f);
  138.  
  139. glutSolidCube(1.0f);
  140. glPopMatrix();
  141.  
  142. glColor3f(1.0f, 1.0f, 1.0f);
  143. glPushMatrix();
  144. glTranslatef(1.5f, 1.5f, 0.0f);
  145. glScalef(0.5f, 2.0f, 0.5f);
  146. glRotatef(-90.0f, 0.0f, 0.0f, 1.0f);
  147. glutSolidCube(1.0f);
  148. glPopMatrix();
  149. #pragma endregion
  150.  
  151. #pragma endregion
  152.  
  153.  
  154. // Jesli instrukcje w danej implementacji OpenGL byly buforowane,
  155. // w tym momencie bufor zostanie oprozniony a instrukcje wykonane.
  156. glFlush();
  157.  
  158. // Zamien front-buffer z back-bufferem (double buffering).
  159. glutSwapBuffers();
  160.  
  161. // Nakaz wyswietlic kolejna klatke.
  162. glutPostRedisplay();
  163.  
  164. // Inkrementacja licznika klatek.
  165. frame++;
  166.  
  167. }
  168.  
  169. // Callback obslugujacy zmiane rozmiaru okna.
  170. void OnReshape(int width, int height) {
  171. // Wybor macierzy - macierz Projekcji.
  172. glMatrixMode(GL_PROJECTION);
  173.  
  174. // Zaladowanie macierzy jednostkowej.
  175. glLoadIdentity();
  176.  
  177. // Okreslenie obszaru renderowania - caly obszar okna.
  178. glViewport(0, 0, width, height);
  179.  
  180. // Chcemy uzyc kamery perspektywicznej o kacie widzenia 60 stopni
  181. // i zasiegu renderowania 0.01-100.0 jednostek.
  182. gluPerspective(60.0f, (float) width / height, .01f, 100.0f);
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement