Advertisement
Guest User

GLAB4

a guest
Jan 28th, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.74 KB | None | 0 0
  1.  
  2.  
  3. //////////////////////////////////////////////////////////////////////////////////////////
  4. //
  5. // Program wyswietlajacy szescian w rzucie perspektywicznym. Dlugosc boku szescianu
  6. // moze byc interaktywnie zmieniana za pomoca klwiszy '+' i '-'.
  7. //
  8. //////////////////////////////////////////////////////////////////////////////////////////
  9. #include <GL/glut.h>
  10. #include <math.h>
  11.  
  12.  
  13. // Definicja stalych
  14. #define DLUGOSC_BOKU 5.0
  15. #define OBSERWATOR_ODLEGLOSC 20.0
  16. #define OBSERWATOR_OBROT_X 40.0
  17. #define OBSERWATOR_OBROT_Y 40.0
  18. #define OBSERWATOR_OBROT_Z 0.0
  19. #define OBSERWATOR_FOV_Y 30.0
  20. #define N 24.0
  21.  
  22.  
  23. // Zmienne globalne
  24. double bok = DLUGOSC_BOKU; // Dlugosc boku szescianu
  25. int szerokoscOkna = 800;
  26. int wysokoscOkna = 600;
  27. float odl = 80;
  28. float odlmax = 200;
  29. float odlmin = 20;
  30. float osX = 40;
  31. float osY = 40;
  32. float osZ = 0;
  33. #define PI 3.1415926535
  34. #define DEG2RAD(x) ((float)(x)*PI/180.0)
  35. #define dAlfa (360.0/entka)
  36.  
  37.  
  38.  
  39. float g = 0;
  40. float i = 0;
  41. int j = 0;
  42. double R = 10;
  43. double R2 = 20;
  44. double H = 25;
  45. double entka = N;
  46. double r = 2;
  47. double h = 3;
  48. double f = 0.0055;
  49. double suma = 0;
  50. float y;
  51. double RI = 10;
  52. double R2I = 20;
  53. double HI = 25;
  54. double RS = 2;
  55. double slice = N;
  56.  
  57.  
  58. // Prototypy funkcji
  59. void RysujSzescian(double a);
  60. void UstawParametryWidoku(int szer, int wys);
  61. void WyswietlObraz(void);
  62. void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
  63.  
  64.  
  65. //////////////////////////////////////////////////////////////////////////////////////////
  66. // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
  67. // Srodek szescianu znajduje się w punkcie (0,0,0).
  68. void stozek()
  69. {
  70. i = 0;
  71. glColor3f(1, 1, 0);
  72.  
  73. glBegin(GL_TRIANGLE_FAN);
  74. glVertex3f(0, 0, 0);
  75. for (i; i * dAlfa <= 360;i++)
  76. {
  77. glVertex3f(RI * cos(DEG2RAD(i * dAlfa)), 0.0, RI * sin(DEG2RAD(i * dAlfa)));
  78. }
  79. glEnd();
  80. i = 0;
  81. glColor3f(1, 0, 0);
  82. glBegin(GL_QUAD_STRIP);
  83. for (i; i * dAlfa <= 360;i++)
  84. {
  85. glVertex3f(RI * cos(DEG2RAD(i * dAlfa)), 0.0, RI * sin(DEG2RAD(i * dAlfa)));
  86. glVertex3f(R2I * cos(DEG2RAD(i * dAlfa)), HI, R2I * sin(DEG2RAD(i * dAlfa)));
  87. glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)), 0.0, RI * sin(DEG2RAD((i + 1) * dAlfa)));
  88. glVertex3f(R2I * cos(DEG2RAD((i + 1) * dAlfa)), HI, R2I * sin(DEG2RAD((i + 1) * dAlfa)));
  89.  
  90. }
  91. glEnd();
  92. i = 0;
  93. glColor3f(1, 1, 0);
  94. glBegin(GL_TRIANGLE_FAN);
  95. glVertex3f(0, HI, 0);
  96. for (i; i * dAlfa <= 360;i++)
  97. {
  98. glVertex3f(R2I * cos(DEG2RAD(i * dAlfa)), HI, R2I * sin(DEG2RAD(i * dAlfa)));
  99. }
  100. glEnd();
  101.  
  102. }
  103. void sfera1()
  104. {
  105.  
  106. int log = 0;
  107. i = 0;
  108. glColor3f(1, 1, 0);
  109. glRotatef(90, 0, 0, 1);
  110. glBegin(GL_TRIANGLE_FAN);
  111. glVertex3f(0, 0, 0);
  112. for (i; i * dAlfa <= 180; i++)
  113. {
  114. glVertex3f(RI * cos(DEG2RAD(i * dAlfa)), 0, RI * sin(DEG2RAD(i * dAlfa)));
  115. }
  116. glVertex3f(RI * cos(DEG2RAD(180)), 0, RI * sin(DEG2RAD(180)));
  117. glEnd();
  118.  
  119. double slice_l = 90 / slice;
  120. g = 0;
  121. /*i = 0;
  122. g = 0;
  123. glColor3f(1, 0, 0);
  124. glBegin(GL_TRIANGLE_STRIP);*/
  125. for (g; (g + 1) * slice_l <= 90; g++)
  126. {
  127.  
  128. glColor3f(1, 0, 0);
  129. glBegin(GL_TRIANGLE_STRIP);
  130.  
  131. i = 0;
  132. if (log == 1)
  133. glVertex3f(-RI, 0, 0);
  134. for (i; (i + 1) * dAlfa <= 90; i++)
  135. {
  136. //if ( i * dAlfa <= 90)
  137. //{
  138. // glVertex3f(RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
  139. // glVertex3f(RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
  140. //}
  141. //else
  142. //{
  143. // glVertex3f(RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
  144. // glVertex3f(RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
  145. //}
  146. //if ((i + 1) * dAlfa <= 90)
  147. //{
  148. // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  149. // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  150. //}
  151. //else
  152. //{
  153. // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  154. // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  155. //}
  156.  
  157. ////
  158. //if ((i)*dAlfa >= 250) log = 1;
  159.  
  160. //if (i * dAlfa <= 90)
  161. //if ((i+1 ) * dAlfa < 90 || (i ) * dAlfa > 270)
  162. {
  163. glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)));
  164. glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
  165. //}
  166. //else
  167. //{
  168. // glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)));
  169. // glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
  170. //}
  171. //if ((i + 1) * dAlfa <= 90)
  172. //{
  173. glVertex3f(RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)));
  174. glVertex3f(RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
  175. }
  176. //else
  177. //{
  178. // glVertex3f(RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)));
  179. // glVertex3f(RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
  180. //}
  181. //glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)));
  182.  
  183.  
  184.  
  185. //if ( ( i + 1 ) * dAlfa < 90 )
  186. //{
  187. // glVertex3f(RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
  188. // glVertex3f(RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
  189. // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  190. // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  191. // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  192. //}
  193. //else
  194. //{
  195. // glVertex3f(RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
  196. // glVertex3f(RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
  197. // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  198. // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  199. // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
  200. //}
  201. }
  202.  
  203.  
  204.  
  205. glVertex3f(RI, 0, 0);
  206. glEnd();
  207.  
  208. glColor3f(1, 0, 0);
  209. glBegin(GL_TRIANGLE_STRIP);
  210.  
  211. i = 0;
  212.  
  213.  
  214. for (i; (i + 1) * dAlfa <= 90; i++)
  215. {
  216.  
  217. glVertex3f(-RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)));
  218. glVertex3f(-RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
  219.  
  220. glVertex3f(-RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)));
  221. glVertex3f(-RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
  222.  
  223.  
  224. }
  225.  
  226. glVertex3f(-RI, 0, 0);
  227. glEnd();
  228.  
  229.  
  230.  
  231. }
  232. i = 0;
  233. glColor3f(1, 1, 0);
  234. glRotatef(-90, 1, 0, 0);
  235. glBegin(GL_TRIANGLE_FAN);
  236. glVertex3f(0, 0, 0);
  237. for (i; i * dAlfa <= 180; i++)
  238. {
  239. glVertex3f(RI * cos(DEG2RAD(i * dAlfa)), 0, RI * sin(DEG2RAD(i * dAlfa)));
  240. }
  241. glVertex3f(RI * cos(DEG2RAD(180)), 0, RI * sin(DEG2RAD(180)));
  242. glEnd();
  243. //glEnd();
  244.  
  245. }
  246. float DEG2RAD = 3.1415926535 / 180.0;
  247. float pom1;
  248. float pom2;
  249. float alfa1 = 30;
  250. float alfa2 = 360.0 / 4;
  251. float podz_h = 1.0 / 3.0;
  252. float pom_podz_h = 4;
  253.  
  254. void stozekk2137()
  255. {
  256. double deg = atan(1 / 3);
  257.  
  258. for (int j = 0; j < 4; j++)
  259. {
  260. glBegin(GL_TRIANGLE_FAN);
  261. glColor3f(1, 0, 0);
  262. glNormal3f(0, -1, 0);
  263. glVertex3f(0, 0, 0);
  264. for (int i = 0; i * alfa2 <= 360.0 * 0.75; i++)
  265. {
  266. pom1 = DEG2RAD * (i * alfa2);
  267. glVertex3f((float)(1 * cos(pom1)), 0, (float)(1 * sin(pom1)));
  268. }
  269. glEnd();
  270.  
  271. glColor3f(1, 0, 0);
  272. for (int j = 1; j * podz_h <= 1; j++)
  273. {
  274. glBegin(GL_TRIANGLE_STRIP);
  275.  
  276. for (int i = 0; i * alfa2 <= 360.0 * 0.75; i++)
  277. {
  278. pom1 = DEG2RAD * (i * alfa2);
  279. glNormal3f(cos(pom1), sin(deg), sin(pom1));
  280. glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(pom1)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(pom1)));
  281. glVertex3f((float)(1 * (1 - j * podz_h) * cos(pom1)), 4 * (j * podz_h), (float)(1 * (1 - j * podz_h) * sin(pom1)));
  282. }
  283. glEnd();
  284.  
  285. glBegin(GL_TRIANGLE_STRIP);
  286. glNormal3f(0, 0, -1);
  287. glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 0)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(DEG2RAD * 0)));
  288. glVertex3f((float)(1 * (1 - j * podz_h) * cos(DEG2RAD * 0)), 4 * (j * podz_h), (float)(1 * (1 - j * podz_h) * sin(DEG2RAD * 0)));
  289. glVertex3f(0, 4 * ((j - 1) * podz_h), 0);
  290. glVertex3f(0, 4 * (j * podz_h), 0);
  291. glEnd();
  292.  
  293. glBegin(GL_TRIANGLE_STRIP);
  294. glNormal3f(1, 0, 0);
  295. glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 270)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(DEG2RAD * 270)));
  296. glVertex3f((float)(1 * (1 - j * podz_h) * cos(DEG2RAD * 270)), 4 * (j * podz_h), (float)(1 * (1 - j * podz_h) * sin(DEG2RAD * 270)));
  297. glVertex3f(0, 2 * ((j - 1) * podz_h), 0);
  298. glVertex3f(0, 2 * (j * podz_h), 0);
  299. glEnd();
  300.  
  301. }
  302. }
  303. }
  304. void sfera()
  305. {
  306. i = 0;
  307. glColor3f(1, 1, 0);
  308. glRotatef(90, 0, 1, 0);
  309. glBegin(GL_TRIANGLE_FAN);
  310. glVertex3f(0, 0, 0);
  311. for (i; i * dAlfa <= 180;i++)
  312. {
  313. glVertex3f(0.0, RI * cos(DEG2RAD(i * dAlfa)), RI * sin(DEG2RAD(i * dAlfa)));
  314. }
  315. glVertex3f(0.0, RI * cos(DEG2RAD(180)), RI * sin(DEG2RAD(180)));
  316. glEnd();
  317.  
  318.  
  319.  
  320.  
  321. glRotatef(-90, 0, 1, 0);
  322. glBegin(GL_TRIANGLE_STRIP);
  323. glVertex3f(0, 0, RI);
  324.  
  325. i = 0;
  326. glColor3f(1, 0, 0);
  327. //glRotatef(9,0,1,0);
  328. //glBegin(GL_TRIANGLE_STRIP);
  329.  
  330. for (i; i * dAlfa <= 90;i++)
  331. {
  332.  
  333.  
  334. glVertex3f(R * cos(DEG2RAD(i * dAlfa)), 0.0, R * sin(DEG2RAD(i * dAlfa)));
  335. glVertex3f(R2 * cos(DEG2RAD(i * dAlfa)), H, R2 * sin(DEG2RAD(i * dAlfa)));
  336.  
  337. glVertex3f(R2 * cos(DEG2RAD((i + 1) * dAlfa)), H, R2 * sin(DEG2RAD((i + 1) * dAlfa)));
  338. glVertex3f(R * cos(DEG2RAD((i + 1) * dAlfa)), 0.0, R * sin(DEG2RAD((i + 1) * dAlfa)));
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346. //glVertex3f(RI*cos(DEG2RAD(g*dAlfa))*cos(DEG2RAD(i*dAlfa)), RI * cos(DEG2RAD(g * dAlfa))* sin(DEG2RAD(i * dAlfa)),RI*sin(DEG2RAD(g*dAlfa)));
  347. //glVertex3f(RI * cos(DEG2RAD((g+1) * dAlfa)) * cos(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD((g+1) * dAlfa)) * sin(DEG2RAD(i * dAlfa)), RI * sin(DEG2RAD((g+1) * dAlfa)));
  348. //
  349.  
  350. ////glVertex3f(0.0,RI*cos(DEG2RAD(i*dAlfa)),RI*sin(DEG2RAD(i*dAlfa)));
  351. //glVertex3f(RI*cos(DEG2RAD(i*dAlfa)),RI*sin(DEG2RAD(i*dAlfa)),RI*cos(DEG2RAD(i*dAlfa)));
  352. ////glVertex3f(RI*sin(DEG2RAD(i*dAlfa)),RI*cos(DEG2RAD(i*dAlfa)),0.0);
  353. //glVertex3f(0.0,RI*cos(DEG2RAD(i*dAlfa)),RI*sin(DEG2RAD(i*dAlfa)));
  354.  
  355. }
  356. glVertex3f(0.0, RI * cos(DEG2RAD(180)), RI * sin(DEG2RAD(180)));
  357.  
  358. glEnd();
  359.  
  360.  
  361.  
  362.  
  363.  
  364. i = 0;
  365. glColor3f(1, 1, 0);
  366. //glRotatef(-90,0,1,0);
  367. glBegin(GL_TRIANGLE_FAN);
  368. glVertex3f(0, 0, 0);
  369. for (i; i * dAlfa <= 180;i++)
  370. {
  371. glVertex3f(0.0, RI * cos(DEG2RAD(i * dAlfa)), RI * sin(DEG2RAD(i * dAlfa)));
  372. }
  373. glVertex3f(0.0, RI * cos(DEG2RAD(180)), RI * sin(DEG2RAD(180)));
  374. glEnd();
  375. }
  376.  
  377. void RysujUklad()
  378. {
  379. glBegin(GL_LINES);
  380.  
  381. // Os X
  382. glColor3f(1.0, 0.0, 0.0);
  383. glVertex3f(-100.0, 0.0, 0.0);
  384. glVertex3f(100.0, 0.0, 0.0);
  385.  
  386. // Os Y
  387. glColor3f(0.0, 1.0, 0.0);
  388. glVertex3f(0.0, -100.0, 0.0);
  389. glVertex3f(0.0, 100.0, 0.0);
  390.  
  391. // Os Z
  392. glColor3f(0.0, 0.0, 1.0);
  393. glVertex3f(0.0, 0.0, -100.0);
  394. glVertex3f(0.0, 0.0, 100.0);
  395.  
  396. glEnd();
  397. }
  398. void RysujSzescian(double a)
  399. {
  400.  
  401.  
  402. // Sciany boczne
  403. glColor3f(1, 0, 0);
  404. glBegin(GL_QUAD_STRIP);
  405. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  406. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  407. glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  408. glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  409.  
  410. glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  411. glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  412.  
  413. glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  414. glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  415.  
  416. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  417. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  418. glEnd();
  419. glColor3f(1, 1, 0);
  420. // Gorna sciana
  421. glBegin(GL_QUAD_STRIP);
  422. glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  423. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  424. glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  425. glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  426. glEnd();
  427.  
  428. // Dolna sciana
  429. glBegin(GL_QUAD_STRIP);
  430. glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  431. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  432. glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  433. glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  434. glEnd();
  435.  
  436. }
  437.  
  438.  
  439. void pol_walec()
  440. {
  441. glColor3f(1, 1, 0);
  442. glBegin(GL_QUAD_STRIP);
  443. for (i = 0; i * dAlfa <= 180; i++)
  444. {
  445. glVertex3f(0, suma, 0);
  446. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), suma, r * sin(DEG2RAD(i * dAlfa)));
  447.  
  448. }
  449. glEnd();
  450.  
  451. glColor3f(1, 0, 0);
  452. glBegin(GL_QUAD_STRIP);
  453. for (y = 0; y < h; y += h / entka)
  454. {
  455. for (i = 0; i * dAlfa <= 180; i++)
  456. {
  457. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), y, r * sin(DEG2RAD(i * dAlfa)));
  458. y += h / entka;
  459. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), y, r * sin(DEG2RAD(i * dAlfa)));
  460. y -= h / entka;
  461.  
  462. }
  463. }
  464. glEnd();
  465.  
  466.  
  467.  
  468.  
  469. glColor3f(1, 1, 0);
  470. glBegin(GL_QUAD_STRIP);
  471. for (i = 0; i * dAlfa <= 180; i++)
  472. {
  473. glVertex3f(0, h, 0);
  474. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), h, r * sin(DEG2RAD(i * dAlfa)));
  475. }
  476. glEnd();
  477. glColor3f(1, 0, 1);
  478. glBegin(GL_QUAD_STRIP);
  479. for (i = -2; i <= 2; i++)
  480. {
  481. glVertex3f(i, 0, 0);
  482. glVertex3f(i, h, 0);
  483. }
  484. glEnd();
  485.  
  486. }
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494. //////////////////////////////////////////////////////////////////////////////////////////
  495. // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu. Powinna
  496. // być wywolywana kazdorazowo po zmianie rozmiarow okna programu.
  497. void UstawParametryWidoku(int szer, int wys)
  498. {
  499. // Zapamietanie wielkosci widoku
  500. szerokoscOkna = szer;
  501. wysokoscOkna = wys;
  502.  
  503. // Ustawienie parametrow viewportu
  504. glViewport(0, 0, szerokoscOkna, wysokoscOkna);
  505.  
  506. // Przejscie w tryb modyfikacji macierzy rzutowania
  507. glMatrixMode(GL_PROJECTION);
  508. glLoadIdentity();
  509. gluPerspective(OBSERWATOR_FOV_Y, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
  510. }
  511.  
  512.  
  513. //////////////////////////////////////////////////////////////////////////////////////////
  514. // Funkcja wyswietlajaca pojedyncza klatke animacji
  515. void WyswietlObraz(void)
  516. {
  517. // Wyczyszczenie bufora koloru i bufora glebokosci
  518. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  519.  
  520. // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
  521. glMatrixMode(GL_MODELVIEW);
  522.  
  523. // Zastapienie aktywnej macierzy macierza jednostkowa
  524. glLoadIdentity();
  525.  
  526. // Ustalenie polozenia obserwatora
  527. glTranslatef(0, 0, -odl);
  528. glRotatef(osX, 1, 0, 0);
  529. glRotatef(osY, 0, 1, 0);
  530. glRotatef(osZ, 0, 0, 1);
  531.  
  532. // Narysowanie szescianu
  533. // RysujSzescian(bok);
  534. RysujUklad();
  535. stozek();
  536. //stozekk2137();
  537. //sfera1();
  538. //stozek_sciety();
  539. //pol_walec();
  540.  
  541. // Przelaczenie buforow ramki
  542. glutSwapBuffers();
  543. }
  544.  
  545.  
  546. //////////////////////////////////////////////////////////////////////////////////////////
  547. // Funkcja obslugi klawiatury
  548. void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
  549. {
  550. /*if(klawisz == '+')
  551. bok *= 2.0;
  552. else if (klawisz == '-')
  553. bok /= 2.0;*/
  554. if (klawisz == 27)
  555. exit(0);
  556. else if (klawisz == '=')
  557. {
  558. if (odl - 1 >= odlmin)
  559. odl--;
  560. }
  561. else if (klawisz == '-')
  562. {
  563. if (odl + 1 <= odlmax)
  564. odl++;
  565. }
  566. else if (klawisz == 'w')
  567. osX++;
  568. else if (klawisz == 's')
  569. osX--;
  570. else if (klawisz == 'a')
  571. osY++;
  572. else if (klawisz == 'd')
  573. osY--;
  574. else if (klawisz == 'z')
  575. osZ--;
  576. else if (klawisz == 'x')
  577. osZ++;
  578. else if (klawisz == 'b')
  579. {
  580. if (entka <= 64)
  581. entka += 1;
  582. }
  583. else if (klawisz == 'v')
  584. {
  585. if (entka > 4)
  586. entka -= 1;
  587. }
  588. else if (klawisz == 'u')
  589. {
  590. if (slice > 0)
  591. slice--;
  592. }
  593. else if (klawisz == 'i')
  594. {
  595. if (slice <= 64)
  596. slice++;
  597. }
  598.  
  599.  
  600. }
  601.  
  602.  
  603. //////////////////////////////////////////////////////////////////////////////////////////
  604. // Glowna funkcja programu
  605. int main(int argc, char** argv)
  606. {
  607. // Zainicjowanie biblioteki GLUT
  608. glutInit(&argc, argv);
  609.  
  610. // Ustawienie trybu wyswietlania
  611. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  612.  
  613. // Ustawienie polozenia dolenego lewego rogu okna
  614. glutInitWindowPosition(100, 100);
  615.  
  616. // Ustawienie rozmiarow okna
  617. glutInitWindowSize(szerokoscOkna, wysokoscOkna);
  618.  
  619. // Utworzenie okna
  620. glutCreateWindow("Szescian");
  621.  
  622. // Odblokowanie bufora glebokosci
  623. glEnable(GL_DEPTH_TEST);
  624.  
  625. // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
  626. glClearDepth(1000.0);
  627.  
  628. // Ustawienie koloru czyszczenia bufora ramki
  629. glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
  630.  
  631. // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
  632. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  633. // Zarejestrowanie funkcji (callback) odpowiedzialnej za
  634. glutDisplayFunc(WyswietlObraz);
  635.  
  636. // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
  637. // zmieniane sa rozmiary okna
  638. glutReshapeFunc(UstawParametryWidoku);
  639.  
  640. // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
  641. // zadnych zadan
  642. glutIdleFunc(WyswietlObraz);
  643.  
  644. // Zarejestrowanie funkcji obslugi klawiatury
  645. glutKeyboardFunc(ObslugaKlawiatury);
  646.  
  647. // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
  648. // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
  649. glutMainLoop();
  650.  
  651. return 0;
  652. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement