Advertisement
SIKER_98

szescian

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