Advertisement
Guest User

Untitled

a guest
Jan 25th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.90 KB | None | 0 0
  1.  
  2. #include <windows.h>
  3. #include <gl/gl.h>
  4. #include <gl/glut.h>
  5. #include <array>
  6. #include <math.h>
  7. #include <cstdlib>
  8. #include <ctime>
  9.  
  10.  
  11. typedef float point3[3];
  12.  
  13. float colorsTable[18];
  14.  
  15. static GLfloat theta[] = { 0.0, 0.0, 0.0 };
  16.  
  17.  
  18. void spinEgg()
  19. {
  20.  
  21. theta[0] -= 0.01;
  22. if (theta[0] > 360.0) theta[0] -= 360.0;
  23.  
  24. theta[1] -= 0.01;
  25. if (theta[1] > 360.0) theta[1] -= 360.0;
  26.  
  27. theta[2] -= 0.01;
  28. if (theta[2] > 360.0) theta[2] -= 360.0;
  29.  
  30. glutPostRedisplay();
  31. }
  32.  
  33. void Colors()
  34. {
  35. for (int i = 0; i < 18; i++)
  36. {
  37. colorsTable[i] = (rand() % 100) / 100.0f;
  38. }
  39. }
  40.  
  41. void Axes(void)
  42. {
  43.  
  44. point3 x_min = { -5.0, 0.0, 0.0 };
  45. point3 x_max = { 5.0, 0.0, 0.0 };
  46. // początek i koniec obrazu osi x
  47.  
  48. point3 y_min = { 0.0, -5.0, 0.0 };
  49. point3 y_max = { 0.0, 5.0, 0.0 };
  50. // początek i koniec obrazu osi y
  51.  
  52. point3 z_min = { 0.0, 0.0, -5.0 };
  53. point3 z_max = { 0.0, 0.0, 5.0 };
  54. // początek i koniec obrazu osi y
  55.  
  56. glColor3f(1.0f, 0.0f, 0.0f); // kolor rysowania osi - czerwony
  57. glBegin(GL_LINES); // rysowanie osi x
  58.  
  59. glVertex3fv(x_min);
  60. glVertex3fv(x_max);
  61.  
  62. glEnd();
  63.  
  64. glColor3f(0.0f, 1.0f, 0.0f); // kolor rysowania - zielony
  65. glBegin(GL_LINES); // rysowanie osi y
  66.  
  67. glVertex3fv(y_min);
  68. glVertex3fv(y_max);
  69.  
  70. glEnd();
  71.  
  72. glColor3f(0.0f, 0.0f, 1.0f); // kolor rysowania - niebieski
  73. glBegin(GL_LINES); // rysowanie osi z
  74.  
  75. glVertex3fv(z_min);
  76. glVertex3fv(z_max);
  77.  
  78. glEnd();
  79.  
  80. }
  81.  
  82.  
  83. void Egg()
  84. {
  85. int n = 20;
  86. float u, v;
  87. float table[20][20][3];
  88.  
  89. for (int i = 0; i < n; i++)
  90. {
  91. for (int j = 0; j < n; j++)
  92. {
  93. v = (float)i / (n - 1);
  94. u = (float)j / (n - 1);
  95.  
  96. table[i][j][0] = (float)(cos(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
  97. table[i][j][1] = (float)(160 * pow(u, 4) - 320 * pow(u, 3) + 160 * pow(u, 2));
  98. table[i][j][2] = (float)(sin(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
  99. }
  100. }
  101.  
  102. glRotated(0, 1, 1, 1);
  103.  
  104. glBegin(GL_POINTS);
  105.  
  106. glColor3f(1.0, 1.0, 1.0);
  107.  
  108. for (int i = 0; i < n; i++)
  109. {
  110. for (int j = 0; j < n; j++)
  111. {
  112. glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
  113. }
  114. }
  115. glEnd();
  116.  
  117. }
  118.  
  119. void EggNet()
  120. {
  121. int n = 20;
  122. float u, v;
  123. float table[20][20][3];
  124.  
  125. for (int i = 0; i < n; i++)
  126. {
  127. for (int j = 0; j < n; j++)
  128. {
  129. v = (float)i / (n - 1);
  130. u = (float)j / (n - 1);
  131.  
  132. table[i][j][0] = (float)(cos(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
  133. table[i][j][1] = (float)(160 * pow(u, 4) - 320 * pow(u, 3) + 160 * pow(u, 2));
  134. table[i][j][2] = (float)(sin(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
  135. }
  136. }
  137.  
  138. glRotated(0, 1, 1, 1);
  139.  
  140. glBegin(GL_LINES);
  141.  
  142. glColor3f(1.0, 1.0, 1.0);
  143.  
  144. for (int i = 0; i < n - 1; i++)
  145. {
  146. for (int j = 0; j < n - 1; j++)
  147. {
  148. glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
  149.  
  150. glVertex3f(table[i][j + 1][0], table[i][j + 1][1] - 5, table[i][j + 1][2]);
  151.  
  152. glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
  153.  
  154. glVertex3f(table[i + 1][j][0], table[i + 1][j][1] - 5, table[i + 1][j][2]);
  155.  
  156. glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
  157.  
  158. glVertex3f(table[i + 1][j + 1][0], table[i + 1][j + 1][1] - 5, table[i + 1][j + 1][2]);
  159.  
  160. }
  161. }
  162. glEnd();
  163. }
  164.  
  165. void EggTriangles()
  166. {
  167.  
  168. int n = 20;
  169. float u, v;
  170. float table[20][20][3];
  171.  
  172. for (int i = 0; i < n; i++)
  173. {
  174. for (int j = 0; j < n; j++)
  175. {
  176. v = (float)i / (n - 1);
  177. u = (float)j / (n - 1);
  178.  
  179. table[i][j][0] = (float)(cos(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
  180. table[i][j][1] = (float)(160 * pow(u, 4) - 320 * pow(u, 3) + 160 * pow(u, 2));
  181. table[i][j][2] = (float)(sin(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
  182. }
  183. }
  184.  
  185. glRotated(50, 1, 1, 1);
  186.  
  187. glBegin(GL_TRIANGLES);
  188.  
  189. glColor3f(1.0, 1.0, 1.0);
  190.  
  191. for (int i = 0; i < n - 1; i++)
  192. {
  193. for (int j = 0; j < n - 1; j++)
  194. {
  195. glColor3f(colorsTable[0], colorsTable[1], colorsTable[2]);
  196. glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
  197.  
  198. glColor3f(colorsTable[3], colorsTable[4], colorsTable[5]);
  199. glVertex3f(table[i][j + 1][0], table[i][j + 1][1] - 5, table[i][j + 1][2]);
  200.  
  201. glVertex3f(table[i + 1][j + 1][0], table[i + 1][j + 1][1] - 5, table[i + 1][j + 1][2]);
  202. glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
  203. glVertex3f(table[i + 1][j][0], table[i + 1][j][1] - 5, table[i + 1][j][2]);
  204. glVertex3f(table[i + 1][j + 1][0], table[i + 1][j + 1][1] - 5, table[i + 1][j + 1][2]);
  205.  
  206. }
  207. }
  208. glEnd();
  209. }
  210.  
  211.  
  212. void RenderScene(void)
  213. {
  214.  
  215. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  216.  
  217. glLoadIdentity();
  218. Axes();
  219.  
  220. glRotatef(theta[0], 1.0, 0.0, 0.0);
  221.  
  222. glRotatef(theta[1], 0.0, 1.0, 0.0);
  223.  
  224. glRotatef(theta[2], 0.0, 0.0, 1.0);
  225.  
  226. EggNet();
  227. glFlush();
  228. glutSwapBuffers();
  229.  
  230.  
  231. }
  232.  
  233.  
  234. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  235. {
  236. GLfloat AspectRatio;
  237.  
  238. if (vertical == 0)
  239.  
  240. vertical = 1;
  241.  
  242. glViewport(0, 0, horizontal, vertical);
  243. glMatrixMode(GL_PROJECTION);
  244. glLoadIdentity();
  245. AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
  246. if (horizontal <= vertical)
  247. glOrtho(-7.5, 7.5, -7.5 / AspectRatio, 7.5 / AspectRatio, 10.0, -10.0);
  248. else
  249. glOrtho(-7.5 * AspectRatio, 7.5 * AspectRatio, -7.5, 7.5, 10.0, -10.0);
  250.  
  251. glMatrixMode(GL_MODELVIEW);
  252. glLoadIdentity();
  253. }
  254.  
  255.  
  256.  
  257.  
  258. void main(void)
  259. {
  260. srand(time(NULL));
  261.  
  262. Colors();
  263. //glutIdleFunc(spinEgg);
  264. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  265.  
  266. glutInitWindowSize(300, 300);
  267. Egg();
  268.  
  269. glutCreateWindow("Zadanie 2");
  270.  
  271. glutDisplayFunc(RenderScene);
  272.  
  273. glutReshapeFunc(ChangeSize);
  274.  
  275. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  276.  
  277.  
  278. glEnable(GL_DEPTH_TEST);
  279.  
  280. glutMainLoop();
  281.  
  282.  
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement