Advertisement
Guest User

Untitled

a guest
May 30th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.08 KB | None | 0 0
  1. #include <GL/glut.h>
  2. #include <stdlib.h>
  3. #include <fstream>
  4. #include <vector>
  5. #include <iostream>
  6.  
  7. using namespace std;
  8. // stałe do obsługi menu podręcznego
  9. //Sfera nie działa
  10.  
  11. GLfloat xRotated, yRotated, zRotated;
  12. GLdouble radius = 1;
  13.  
  14. class punkt
  15. {
  16. public:
  17. double nr;
  18. double x;
  19. double y;
  20. double z;
  21. float var;
  22. };
  23. punkt t[192];
  24. punkt tt[27];
  25.  
  26. void read(punkt *t)
  27. {
  28. fstream plik;
  29. plik.open("dane.txt", std::ios_base::in);
  30. int i;
  31. cout << endl;
  32. for (i = 0; i<192; i++)
  33. {
  34. plik >> t[i].x;
  35. t[i].x *= 15;
  36. plik >> t[i].y;
  37. t[i].y *= 5;
  38. plik >> t[i].var;
  39. cout << t[i].x << " " << t[i].y << " " << t[i].var << endl;
  40. }
  41. }
  42.  
  43.  
  44. void readd(punkt *tt)
  45. {
  46. fstream plik;
  47. plik.open("dane_box.txt", std::ios_base::in);
  48. int i;
  49. cout << endl;
  50. for (i = 0; i<27; i++)
  51. {
  52. plik >> t[i].nr;
  53. //t[i].nr *= 5;
  54. plik >> t[i].x;
  55. t[i].x *= 5;
  56. plik >> t[i].y;
  57. t[i].y *= 5;
  58. plik >> t[i].z;
  59. t[i].z *= 5;
  60. plik >> t[i].var;
  61. cout << t[i].nr << " " << t[i].x << " " << t[i].y << " " << t[i].z << " " << t[i].var << endl;
  62. }
  63. }
  64. enum
  65. {
  66. Gladkie,
  67. Plaskie,
  68. mieszanieKolorow,
  69. sfera,
  70. EXIT // wyjście
  71. };
  72. void gladkie(punkt *t)
  73. {
  74. glClearColor(1.0, 1.0, 1.0, 1.0);
  75. glEnable(GL_SHADE_MODEL);
  76. glShadeModel(GL_SMOOTH);
  77. glClear(GL_COLOR_BUFFER_BIT);
  78. glMatrixMode(GL_MODELVIEW);
  79. glLoadIdentity();
  80. glColor3f(1.0, 0.0, 0.0);
  81. glBegin(GL_POLYGON);
  82.  
  83. for (int i = 0; i<192; i++)
  84. {
  85. float temp = t[i].var;
  86. float min = 1400 - temp;
  87. glColor3f(temp / 1400, 0.0, min / 1400);
  88. glVertex2d(t[i].x, t[i].y - 100);
  89. }
  90. glEnd();
  91.  
  92. // skierowanie poleceń do wykonania
  93. glFlush();
  94.  
  95. // zamiana buforów koloru
  96. glutSwapBuffers();
  97. }
  98.  
  99. void CMY(punkt *t)
  100. {
  101. glClearColor(1.0, 1.0, 1.0, 1.0);
  102. glClear(GL_COLOR_BUFFER_BIT);
  103. glEnable(GL_SHADE_MODEL);
  104. glShadeModel(GL_SMOOTH);
  105. glClear(GL_COLOR_BUFFER_BIT);
  106. glMatrixMode(GL_MODELVIEW);
  107.  
  108. glLoadIdentity();
  109.  
  110. glColor3f(1.0, 0.0, 0.0);
  111. glEnable(GL_BLEND);
  112. glBlendFunc(GL_ONE, GL_ZERO);
  113.  
  114. glBegin(GL_POLYGON);
  115.  
  116. for (int i = 0; i<192; i++)
  117. {
  118. float temp = t[i].var;
  119. float min = 1400 - temp;
  120. glColor3f(1 - (temp / 1400), 1 - 0.0, 1 - (min / 1400));
  121. glVertex2d(t[i].x, t[i].y - 100);
  122. }
  123. glEnd();
  124.  
  125. // wyłączenie rysowania wzorów linii
  126.  
  127.  
  128. // skierowanie poleceń do wykonania
  129. glFlush();
  130.  
  131. // zamiana buforów koloru
  132. glutSwapBuffers();
  133. }
  134.  
  135. void plaskie(punkt *t)
  136. {
  137. glClearColor(1.0, 1.0, 1.0, 1.0);
  138. glEnable(GL_SHADE_MODEL);
  139. glShadeModel(GL_FLAT);
  140. glClear(GL_COLOR_BUFFER_BIT);
  141. glEnable(GL_BLEND);
  142. glMatrixMode(GL_MODELVIEW);
  143. glLoadIdentity();
  144. glColor3f(1.0, 0.0, 0.0);
  145. glBegin(GL_POLYGON);
  146.  
  147. for (int i = 0; i<192; i++)
  148. {
  149. float temp = t[i].var;
  150. float min = 1400 - temp;
  151. glColor3f(temp / 1400, 0.0, min / 1400);
  152. glVertex2d(t[i].x, t[i].y - 100);
  153. }
  154. glEnd();
  155.  
  156. // wyłączenie rysowania wzorów linii
  157.  
  158.  
  159. // skierowanie poleceń do wykonania
  160. glFlush();
  161.  
  162. // zamiana buforów koloru
  163. glutSwapBuffers();
  164. }
  165. void Sfera(punkt *t) {
  166. int i, j;
  167. for (i = 0; i <= 27; i++) {
  168. double lat0 = 3.14* (-0.5 + (double)(i - 1) / 27);
  169. double z0 = sin(lat0);
  170. double zr0 = cos(lat0);
  171.  
  172. double lat1 = 3.14 * (-0.5 + (double)i / 27);
  173. double z1 = sin(lat1);
  174. double zr1 = cos(lat1);
  175.  
  176. glBegin(GL_QUAD_STRIP);
  177. for (j = 0; j <= 27; j++) {
  178. double lng = 2 * 3.14 * (double)(j - 1) / 27;
  179. double x = cos(lng);
  180. double y = sin(lng);
  181.  
  182. glNormal3f(t[j].x * zr0, t[j].y * zr0, t[j].z);
  183. glVertex3f(t[j].x * zr0, t[j].y * zr0, t[j].z);
  184. glNormal3f(t[j].x * zr0, t[j].y * zr0, t[j].z);
  185. glVertex3f(t[j].x * zr0, t[j].y * zr0, t[j].z);
  186.  
  187. }
  188. glEnd();
  189.  
  190. }
  191.  
  192. }
  193.  
  194.  
  195. int button_state = GLUT_UP;
  196.  
  197. void Display()
  198. {
  199. // kolor tła - zawartość bufora koloru
  200. glClearColor(1.0, 1.0, 1.0, 1.0);
  201.  
  202. // czyszczenie bufora koloru
  203. glClear(GL_COLOR_BUFFER_BIT);
  204.  
  205. // wybór macierzy modelowania
  206. glMatrixMode(GL_MODELVIEW);
  207.  
  208. // macierz modelowania = macierz jednostkowa
  209. glLoadIdentity();
  210.  
  211. // kolor linii
  212. glColor3f(1.0, 0.0, 0.0);
  213.  
  214. // wyłączenie rysowania wzorów linii
  215. glDisable(GL_LINE_STIPPLE);
  216.  
  217. // skierowanie poleceń do wykonania
  218. glFlush();
  219.  
  220. // zamiana buforów koloru
  221. glutSwapBuffers();
  222. }
  223.  
  224.  
  225. // zmiana wielkości okna
  226.  
  227. void Reshape(int width, int height)
  228. {
  229.  
  230. // obszar renderingu - całe okno
  231. glViewport(240, 240, width, height);
  232.  
  233. // wybór macierzy rzutowania
  234. glMatrixMode(GL_PROJECTION);
  235.  
  236. // macierz rzutowania = macierz jednostkowa
  237. glLoadIdentity();
  238.  
  239. // rzutowanie prostokątne
  240. gluOrtho2D(0, width, 0, height);
  241.  
  242. // generowanie sceny 3D
  243. Display();
  244. }
  245.  
  246. void Menu(int value)
  247. {
  248. switch (value)
  249. {
  250. case Gladkie:
  251. gladkie(t);
  252. break;
  253. case mieszanieKolorow:
  254. CMY(t);
  255. break;
  256. case Plaskie:
  257. plaskie(t);
  258. break;
  259. case sfera:
  260. Sfera(tt);
  261. break;
  262. }
  263. }
  264.  
  265. void reshape(int x, int y)
  266. {
  267. if (y == 0 || x == 0) return;
  268. glMatrixMode(GL_PROJECTION);
  269. glLoadIdentity();
  270. gluPerspective(39.0, (GLdouble)x / (GLdouble)y, 0.6, 21.0);
  271. glMatrixMode(GL_MODELVIEW);
  272. glViewport(0, 0, x, y);
  273. }
  274.  
  275.  
  276. int main(int argc, char * argv[])
  277. {
  278.  
  279.  
  280. readd(tt);
  281.  
  282.  
  283. // inicjalizacja biblioteki GLUT
  284. glutInit(&argc, argv);
  285.  
  286. // inicjalizacja bufora ramki
  287. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  288.  
  289. // rozmiary głównego okna programu
  290. glutInitWindowSize(500, 500);
  291.  
  292. // utworzenie głównego okna programu
  293. glutCreateWindow("Linie");
  294.  
  295. // dołączenie funkcji generującej scenę 3D
  296. glutDisplayFunc(Display);
  297.  
  298. // dołączenie funkcji wywoływanej przy zmianie rozmiaru okna
  299. glutReshapeFunc(Reshape);
  300. // utworzenie podmenu - Prymitywy
  301.  
  302.  
  303.  
  304.  
  305.  
  306. // menu główne
  307. glutCreateMenu(Menu);
  308. #ifdef WIN32
  309.  
  310. glutAddMenuEntry("RGB + cieniowanie smooth", Gladkie);
  311. glutAddMenuEntry("RGB + cieniowanie plaskie", Plaskie);
  312. glutAddMenuEntry("CMY + mieszanie kolorów", mieszanieKolorow);
  313. glutAddMenuEntry("Sfera", sfera);
  314. #else
  315.  
  316. #endif
  317.  
  318.  
  319. // określenie przycisku myszki obsługującego menu podręczne
  320. glutAttachMenu(GLUT_RIGHT_BUTTON);
  321.  
  322.  
  323.  
  324. // wprowadzenie programu do obsługi pętli komunikatów
  325. glutMainLoop();
  326.  
  327. return 0;
  328. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement