Advertisement
SIKER_98

prymitywy

Dec 18th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. #include <glut.h>
  2. #include <math.h>
  3.  
  4. // q - zoom+
  5. // e - zoom-
  6. // wasd - obracanie kamery
  7. // z/x - zmiany N (ilosc punktow)
  8. // c/v - zmiana R (promien)
  9.  
  10. #define M_PI 3.14
  11. #define DEG2RAD(x) ((double)((x)*M_PI)/180.0)
  12.  
  13. // Definicja stalych
  14. GLfloat OBSERWATOR_ODLEGLOSC = 30.0;
  15. GLfloat OBSERWATOR_OBROT_X = 30.0;
  16. GLfloat OBSERWATOR_OBROT_Y = 20.0;
  17.  
  18. // Zmienne globalne
  19. int szerokoscOkna = 1200;
  20. int wysokoscOkna = 800;
  21.  
  22. int N = 3;
  23. float R = 4.0;
  24.  
  25. // Prototypy funkcji
  26. void RysujSzescian(double a);
  27. void UstawParametryWidoku(int szer, int wys);
  28. void WyswietlObraz(void);
  29. void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
  30.  
  31.  
  32. //////////////////////////////////////////////////////////////////////////////////////////
  33. // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
  34. // Srodek szescianu znajduje się w punkcie (0,0,0).
  35. void RysujSzescian(double a)
  36. {
  37. // Sciany boczne
  38. glBegin(GL_QUAD_STRIP);
  39. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  40. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  41. glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  42. glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  43.  
  44. glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  45. glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  46.  
  47. glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  48. glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  49.  
  50. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  51. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  52. glEnd();
  53.  
  54. // Gorna sciana
  55. glBegin(GL_QUAD_STRIP);
  56. glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  57. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  58. glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  59. glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  60. glEnd();
  61.  
  62. // Dolna sciana
  63. glBegin(GL_QUAD_STRIP);
  64. glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  65. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  66. glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  67. glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  68. glEnd();
  69.  
  70. }
  71.  
  72. void Kolo() {
  73. double alfa = 360 / N;
  74. glColor3f(0.0, 1.0, 0.0);
  75. glBegin(GL_TRIANGLE_FAN);
  76. glVertex3f(0.0, 0.0, 0.0);
  77. for (int i = 0; i*alfa <= 360; i++) {
  78. glVertex3f(R * cos(DEG2RAD(i * alfa)), 0, R * sin(DEG2RAD(i * alfa)));
  79. }
  80. glEnd();
  81. }
  82.  
  83. void Walec() {
  84. double alfa = 360.0 / N;
  85. glColor3f(1.0, 1.0, 0.0);
  86.  
  87. glBegin(GL_QUAD_STRIP);
  88. for (double i = 0; i * alfa <= 360; i++) {
  89. glVertex3f(R * cos(DEG2RAD(i * alfa)), 0.0, R * sin(DEG2RAD(i * alfa)));
  90. glVertex3f(R * cos(DEG2RAD(i * alfa)), R, R * sin(DEG2RAD(i * alfa)));
  91. }
  92. glEnd();
  93. }
  94.  
  95. //////////////////////////////////////////////////////////////////////////////////////////
  96. // Funkcja wyswietlajaca pojedyncza klatke animacji
  97. void WyswietlObraz(void)
  98. {
  99. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  100. glMatrixMode(GL_MODELVIEW);
  101. glLoadIdentity();
  102.  
  103. glTranslatef(0, 0, -OBSERWATOR_ODLEGLOSC);
  104. glRotatef(OBSERWATOR_OBROT_X, 1, 0, 0);
  105. glRotatef(OBSERWATOR_OBROT_Y, 0, 1, 0);
  106.  
  107. // ----------------------------------------
  108. // Narysowanie szescianu-------------------
  109.  
  110. Walec();
  111. //Kolo();
  112. //-----------------------------------------
  113. // ----------------------------------------
  114. glutSwapBuffers();
  115. }
  116.  
  117.  
  118.  
  119.  
  120. //////////////////////////////////////////////////////////////////////////////////////////
  121. // Funkcja obslugi klawiatury
  122. void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
  123. {
  124. if (klawisz == 'z') {
  125. N++;
  126. }
  127. else if (klawisz == 'x') {
  128. if (N > 1)N--;
  129. }
  130. else if (klawisz == 'c') {
  131. R += 0.3;
  132. }
  133. else if (klawisz == 'v') {
  134. if (N > 1)R -= 0.3;
  135. }
  136.  
  137.  
  138. // STEROWANIE KAMERA
  139. if (klawisz == 'w') {
  140. if (OBSERWATOR_OBROT_X < 90)OBSERWATOR_OBROT_X = OBSERWATOR_OBROT_X + 1;
  141. }
  142. else if (klawisz == 's') {
  143. if (OBSERWATOR_OBROT_X > -90)OBSERWATOR_OBROT_X = OBSERWATOR_OBROT_X - 1;
  144. }
  145. else if (klawisz == 'a') {
  146. if (OBSERWATOR_OBROT_Y < 90)OBSERWATOR_OBROT_Y = OBSERWATOR_OBROT_Y + 1;
  147. }
  148. else if (klawisz == 'd') {
  149. if (OBSERWATOR_OBROT_Y > -90)OBSERWATOR_OBROT_Y = OBSERWATOR_OBROT_Y - 1;
  150. }
  151. else if (klawisz == 'q') {
  152. if (OBSERWATOR_ODLEGLOSC < 80)OBSERWATOR_ODLEGLOSC = OBSERWATOR_ODLEGLOSC + 0.5;
  153. }
  154. else if (klawisz == 'e') {
  155. if (OBSERWATOR_ODLEGLOSC > 20)OBSERWATOR_ODLEGLOSC = OBSERWATOR_ODLEGLOSC - 0.5;
  156. }
  157.  
  158. }
  159.  
  160.  
  161.  
  162.  
  163. //////////////////////////////////////////////////////////////////////////////////////////
  164. //////////////////////////////////////////////////////////////////////////////////////////
  165. //////////////////////////////////////////////////////////////////////////////////////////
  166. //////////////////////////////////////////////////////////////////////////////////////////
  167.  
  168. void UstawParametryWidoku(int szer, int wys)
  169. {
  170. glViewport(0, 0, szer, wys);
  171. glMatrixMode(GL_PROJECTION);
  172. glLoadIdentity();
  173. gluPerspective(OBSERWATOR_ODLEGLOSC, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
  174. }
  175.  
  176. int main(int argc, char** argv)
  177. {
  178. glutInit(&argc, argv);
  179. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  180. glutInitWindowPosition(100, 100);
  181. glutInitWindowSize(szerokoscOkna, wysokoscOkna);
  182. glutCreateWindow("Szescian");
  183. glEnable(GL_DEPTH_TEST);
  184. glClearDepth(1000.0);
  185. glClearColor(0.0f, 0.0f, 0.3f, 0.0f);
  186. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  187. glutDisplayFunc(WyswietlObraz);
  188. glutReshapeFunc(UstawParametryWidoku);
  189. glutIdleFunc(WyswietlObraz);
  190. glutKeyboardFunc(ObslugaKlawiatury);
  191. glutMainLoop();
  192.  
  193. return 0;
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement