Advertisement
qtinio

cyber Gr

Apr 3rd, 2019
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.74 KB | None | 0 0
  1. /************************************************************
  2. Grafika OpenGL
  3. *************************************************************/
  4. #include <windows.h>
  5. #include <gl\gl.h>
  6. #include <gl\glu.h>
  7. #include <iterator>
  8. #include <map>
  9. #include <time.h>
  10.  
  11. #include "graphics.h"
  12. //#include "vector3D.h"
  13. //#include "quaternion.h"
  14. #ifndef _OBJECTS__H
  15. #include "objects.h"
  16. #endif
  17. using namespace std;
  18.  
  19.  
  20. extern FILE *f;
  21. extern MovableObject *my_vehicle; // obiekt przypisany do tej aplikacji
  22. extern map<int, MovableObject*> network_vehicles;
  23. extern CRITICAL_SECTION m_cs;
  24. extern Terrain terrain;
  25. extern int tim;
  26. extern long group_existing_time;
  27. extern long start_time;
  28.  
  29. int g_GLPixelIndex = 0;
  30. HGLRC g_hGLContext = NULL;
  31. unsigned int font_base;
  32.  
  33. ViewParameters par_view;
  34.  
  35. extern void TworzListyWyswietlania(); // definiujemy listy tworzące labirynt
  36. extern void DrawGlobalCoordinateSystem();
  37.  
  38. void StandardViewParametersSetting(ViewParameters *p)
  39. {
  40. p->initial_camera_direction = Vector3(0, -3, -11); // direction patrzenia
  41. p->initial_camera_position = Vector3(30, 3, 0); // po³o¿enie kamery
  42. p->initial_camera_vertical = Vector3(0, 1, 0); // direction pionu kamery
  43.  
  44. // Zmienne - ustawiane przez użytkownika
  45. p->tracking = 1; // tryb œledzenia obiektu przez kamerê
  46. p->top_view = 0; // tryb widoku z gory
  47. p->distance = 10.0; // distance lub przybli¿enie kamery
  48. p->zoom = 1.0; // zmiana kąta widzenia
  49. p->cam_angle_z = 0; // obrót kamery góra-dół
  50.  
  51. p->shift_to_right = 0; // przesunięcie kamery w prawo (w lewo o wart. ujemnej) - chodzi głównie o tryb edycji
  52. p->shift_to_bottom = 0; // przesunięcie do dołu (w górę o wart. ujemnej) i widok z góry (klawisz Q)
  53. }
  54.  
  55. int GraphicsInitialization(HDC g_context)
  56. {
  57.  
  58. if (SetWindowPixelFormat(g_context) == FALSE)
  59. return FALSE;
  60.  
  61. if (CreateViewGLContext(g_context) == FALSE)
  62. return 0;
  63. BuildFont(g_context);
  64.  
  65. glEnable(GL_DEPTH_TEST);
  66. glDepthFunc(GL_LEQUAL);
  67.  
  68. StandardViewParametersSetting(&par_view);
  69.  
  70. TworzListyWyswietlania(); // definiujemy listy tworzące różne elementy sceny
  71. terrain.GraphicsInitialization();
  72. }
  73.  
  74. // Ustwienia kamery w zależności od wartości początkowych (w interakcji), wartości ustawianych
  75. // przez użytkowika oraz stanu obiektu (np. gdy tryb śledzenia)
  76. void CameraSettings(Vector3 *position, Vector3 *direction, Vector3 *vertical, ViewParameters pw)
  77. {
  78. if (pw.tracking) // kamera ruchoma - porusza się wraz z obiektem
  79. {
  80. (*direction) = my_vehicle->state.qOrient.obroc_wektor(Vector3(1, 0, 0));
  81. (*vertical) = my_vehicle->state.qOrient.obroc_wektor(Vector3(0, 1, 0));
  82. Vector3 prawo_kamery = my_vehicle->state.qOrient.obroc_wektor(Vector3(0, 0, 1));
  83.  
  84. (*vertical) = (*vertical).obrot(pw.cam_angle_z, prawo_kamery.x, prawo_kamery.y, prawo_kamery.z);
  85. (*direction) = (*direction).obrot(pw.cam_angle_z, prawo_kamery.x, prawo_kamery.y, prawo_kamery.z);
  86. (*position) = my_vehicle->state.vPos - (*direction)*my_vehicle->length * 0 +
  87. (*vertical).znorm()*my_vehicle->height * 5;
  88. if (pw.top_view)
  89. {
  90. (*vertical) = (*direction);
  91. (*direction) = Vector3(0, -1, 0);
  92. (*position) = (*position) + Vector3(0, 100, 0) + (*vertical)*pw.shift_to_bottom + (*vertical)*(*direction)*pw.shift_to_right;
  93. }
  94. }
  95. else // bez śledzenia - kamera nie podąża wraz z pojazdem
  96. {
  97. (*vertical) = pw.initial_camera_vertical;
  98. (*direction) = pw.initial_camera_direction;
  99. (*position) = pw.initial_camera_position;
  100. Vector3 prawo_kamery = ((*direction)*(*vertical)).znorm();
  101. (*vertical) = (*vertical).obrot(pw.cam_angle_z / 20, prawo_kamery.x, prawo_kamery.y, prawo_kamery.z);
  102. (*direction) = (*direction).obrot(pw.cam_angle_z / 20, prawo_kamery.x, prawo_kamery.y, prawo_kamery.z);
  103. if (pw.top_view)
  104. {
  105. (*vertical) = Vector3(0, 0, -1);
  106. (*direction) = Vector3(0, -1, 0.02);
  107. (*position) = pw.initial_camera_position + Vector3(0, 100, 0) + (*vertical)*pw.shift_to_bottom + (*vertical)*(*direction)*pw.shift_to_right;
  108. }
  109. }
  110. }
  111.  
  112.  
  113. void DrawScene()
  114. {
  115. float czas = (float)(group_existing_time + clock() - start_time) / CLOCKS_PER_SEC; // czas od uruchomienia w [s]
  116. GLfloat OwnObjectColor[] = { 0.0f, 0.0f, 0.9f, 0.7f };
  117. GLfloat BlueSurfaceTr[] = { 0.6f, 0.0f, 0.9f, 0.3f };
  118.  
  119. GLfloat NetworkVehiclesColor[] = { 0.2f, 0.6f, 0.4f, 0.6f };
  120. GLfloat RedSurface[] = { 0.8f, 0.2f, 0.1f, 0.5f };
  121. GLfloat OrangeSurface[] = { 1.0f, 0.8f, 0.0f, 0.7f };
  122. GLfloat GreenSurface[] = { 0.15f, 0.62f, 0.3f, 1.0f };
  123. GLfloat YellowSurface[] = { 0.75f, 0.75f, 0.0f, 1.0f };
  124. GLfloat YellowLight[] = { 2.0f, 2.0f, 1.0f, 1.0f };
  125.  
  126. GLfloat LightAmbient[] = { 0.1f, 0.1f, 0.1f, 0.1f };
  127. GLfloat LightDiffuse[] = { 0.7f, 0.7f, 0.7f, 0.7f };
  128.  
  129. GLfloat LightPosition[] = { 10.0*cos(czas / 5), 5.0f, 10.0*sin(czas / 5), 0.0f };
  130.  
  131.  
  132. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  133. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  134.  
  135. glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient); //1 składowa: światło otaczające (bezkierunkowe)
  136. glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse); //2 składowa: światło rozproszone (kierunkowe)
  137. glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
  138. glEnable(GL_LIGHT0);
  139.  
  140. //glPushMatrix();
  141. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, YellowLight);
  142.  
  143.  
  144. glLoadIdentity();
  145. glClearColor(0.3, 0.4, 0.85, 0.7); // ustawienie nieczarnego koloru tła
  146. glTranslatef(-24, 24, -40);
  147. glRasterPos2f(4.0, -4.0);
  148. glPrint("%s", par_view.inscription1);
  149. glPrint("%s", par_view.inscription2);
  150. glLoadIdentity();
  151.  
  152.  
  153. Vector3 pol_k, kierunek_k, pion_k;
  154.  
  155. CameraSettings(&pol_k, &kierunek_k, &pion_k, par_view);
  156.  
  157. gluLookAt(pol_k.x - par_view.distance*kierunek_k.x,
  158. pol_k.y - par_view.distance*kierunek_k.y, pol_k.z - par_view.distance*kierunek_k.z,
  159. pol_k.x + kierunek_k.x, pol_k.y + kierunek_k.y, pol_k.z + kierunek_k.z,
  160. pion_k.x, pion_k.y, pion_k.z);
  161.  
  162. //glRasterPos2f(0.30,-0.27);
  163. //glPrint("MojObiekt->iID = %d",my_vehicle->iID );
  164.  
  165. DrawGlobalCoordinateSystem();
  166.  
  167. int dw = 0, dk = 0;
  168. if (terrain.if_toroidal_world)
  169. {
  170. if (terrain.border_x > 0) dk = 1;
  171. if (terrain.border_z > 0) dw = 1;
  172. }
  173.  
  174. for (int w = -dw; w < 1 + dw; w++)
  175. for (int k = -dk; k < 1 + dk; k++)
  176. {
  177. glPushMatrix();
  178.  
  179. glTranslatef(terrain.border_x*k, 0, terrain.border_z*w);
  180. GLfloat JestemPrzyjacielem[] = { 0.7f, 0.8f, 0.9f, (float)(1 / tim) };
  181. if (tim == -1) {
  182. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, OwnObjectColor);
  183. }
  184. else {
  185. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, JestemPrzyjacielem);
  186. }
  187.  
  188. glEnable(GL_BLEND);
  189.  
  190. my_vehicle->DrawObject();
  191.  
  192. // Lock the Critical section
  193. EnterCriticalSection(&m_cs);
  194. for (map<int, MovableObject*>::iterator it = network_vehicles.begin(); it != network_vehicles.end(); ++it)
  195. {
  196. if (it->second)
  197. {
  198.  
  199. if (it->second->iID == tim) {
  200. GLfloat PrzyjacielVehiclesColor[] = { 0.2f, 0.6f, 0.4f, (float)(1 / tim) };
  201.  
  202. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, PrzyjacielVehiclesColor);
  203. it->second->DrawObject();
  204.  
  205. }
  206. else {
  207. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, NetworkVehiclesColor);
  208. it->second->DrawObject();
  209. }
  210.  
  211. }
  212. }
  213. //Release the Critical section
  214. LeaveCriticalSection(&m_cs);
  215.  
  216. glDisable(GL_BLEND);
  217. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, GreenSurface);
  218.  
  219. terrain.DrawObject();
  220. glPopMatrix();
  221. }
  222.  
  223. //glPopMatrix();
  224. glFlush();
  225. }
  226.  
  227.  
  228.  
  229.  
  230. void WindowSizeChange(int cx, int cy)
  231. {
  232. GLsizei width, height;
  233. GLdouble aspect;
  234. width = cx;
  235. height = cy;
  236.  
  237. if (cy == 0)
  238. aspect = (GLdouble)width;
  239. else
  240. aspect = (GLdouble)width / (GLdouble)height;
  241.  
  242. glViewport(0, 0, width, height);
  243.  
  244.  
  245. glMatrixMode(GL_PROJECTION);
  246. glLoadIdentity();
  247. gluPerspective(55 * par_view.zoom, aspect, 1, 1000000.0);
  248.  
  249. glMatrixMode(GL_MODELVIEW);
  250. glLoadIdentity();
  251.  
  252. glDrawBuffer(GL_BACK);
  253.  
  254. glEnable(GL_LIGHTING);
  255.  
  256. glEnable(GL_DEPTH_TEST);
  257.  
  258. }
  259.  
  260. Vector3 Cursor3dCoordinates(int x, int y) // współrzędne 3D punktu na obrazie 2D
  261. {
  262. // pobranie macierz modelowania
  263. GLdouble model[16];
  264. glGetDoublev(GL_MODELVIEW_MATRIX, model);
  265.  
  266. // pobranie macierzy rzutowania
  267. GLdouble proj[16];
  268. glGetDoublev(GL_PROJECTION_MATRIX, proj);
  269.  
  270. // pobranie obszaru renderingu
  271. GLint view[4];
  272. glGetIntegerv(GL_VIEWPORT, view);
  273.  
  274. // tablice ze odczytanymi współrzędnymi w przestrzeni widoku
  275. GLdouble wsp[3];
  276.  
  277. //RECT rc;
  278. //GetClientRect (main_window, &rc);
  279.  
  280. GLdouble wsp_z;
  281.  
  282. int wynik = gluProject(0, 0, 0, model, proj, view, wsp + 0, wsp + 1, &wsp_z);
  283.  
  284. gluUnProject(x, y, wsp_z, model, proj, view, wsp + 0, wsp + 1, wsp + 2);
  285. //gluUnProject (x,rc.bottom - y,wsp_z ,model,proj,view,wsp+0,wsp+1,wsp+2);
  286. return Vector3(wsp[0], wsp[1], wsp[2]);
  287. }
  288.  
  289. Vector3 Cursor3dCoordinates(int x, int y, float height) // współrzędne 3D punktu na obrazie 2D
  290. {
  291. glTranslatef(0, height, 0);
  292. // pobranie macierz modelowania
  293. GLdouble model[16];
  294. glGetDoublev(GL_MODELVIEW_MATRIX, model);
  295.  
  296. // pobranie macierzy rzutowania
  297. GLdouble proj[16];
  298. glGetDoublev(GL_PROJECTION_MATRIX, proj);
  299.  
  300. // pobranie obszaru renderingu
  301. GLint view[4];
  302. glGetIntegerv(GL_VIEWPORT, view);
  303.  
  304. // tablice ze odczytanymi współrzędnymi w przestrzeni widoku
  305. GLdouble wsp[3];
  306.  
  307. //RECT rc;
  308. //GetClientRect (main_window, &rc);
  309.  
  310. GLdouble wsp_z;
  311.  
  312. int wynik = gluProject(0, 0, 0, model, proj, view, wsp + 0, wsp + 1, &wsp_z);
  313. gluUnProject(x, y, wsp_z, model, proj, view, wsp + 0, wsp + 1, wsp + 2);
  314. glTranslatef(0, -height, 0);
  315. //gluUnProject (x,rc.bottom - y,wsp_z ,model,proj,view,wsp+0,wsp+1,wsp+2);
  316. return Vector3(wsp[0], wsp[1], wsp[2]);
  317. }
  318.  
  319. void ScreenCoordinates(float *xx, float *yy, float *zz, Vector3 Point3D) // współrzędne punktu na ekranie na podstawie wsp 3D
  320. {
  321. // pobranie macierz modelowania
  322. GLdouble model[16];
  323. glGetDoublev(GL_MODELVIEW_MATRIX, model);
  324. // pobranie macierzy rzutowania
  325. GLdouble proj[16];
  326. glGetDoublev(GL_PROJECTION_MATRIX, proj);
  327. // pobranie obszaru renderingu
  328. GLint view[4];
  329. glGetIntegerv(GL_VIEWPORT, view);
  330. // tablice ze odczytanymi współrzędnymi w przestrzeni widoku
  331. GLdouble wsp[3], wsp_okn[3];
  332. GLdouble liczba;
  333. int wynik = gluProject(Point3D.x, Point3D.y, Point3D.z, model, proj, view, wsp_okn + 0, wsp_okn + 1, wsp_okn + 2);
  334. gluUnProject(wsp_okn[0], wsp_okn[1], wsp_okn[2], model, proj, view, wsp + 0, wsp + 1, wsp + 2);
  335. //fprintf(f," Wsp. punktu 3D = (%f, %f, %f), wspolrzedne w oknie = (%f, %f, %f), wsp. punktu = (%f, %f, %f)\n",
  336. // Point3D.x,Point3D.y,Point3D.z, wsp_okn[0],wsp_okn[1],wsp_okn[2], wsp[0],wsp[1],wsp[2]);
  337.  
  338. (*xx) = wsp_okn[0]; (*yy) = wsp_okn[1]; (*zz) = wsp_okn[2];
  339. }
  340.  
  341. void EndOfGraphics()
  342. {
  343. if (wglGetCurrentContext() != NULL)
  344. {
  345. // dezaktualizacja kontekstu renderującego
  346. wglMakeCurrent(NULL, NULL);
  347. }
  348. if (g_hGLContext != NULL)
  349. {
  350. wglDeleteContext(g_hGLContext);
  351. g_hGLContext = NULL;
  352. }
  353. glDeleteLists(font_base, 96);
  354. }
  355.  
  356. BOOL SetWindowPixelFormat(HDC hDC)
  357. {
  358. PIXELFORMATDESCRIPTOR pixelDesc;
  359.  
  360. pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);
  361. pixelDesc.nVersion = 1;
  362. pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_STEREO_DONTCARE;
  363. pixelDesc.iPixelType = PFD_TYPE_RGBA;
  364. pixelDesc.cColorBits = 32;
  365. pixelDesc.cRedBits = 8;
  366. pixelDesc.cRedShift = 16;
  367. pixelDesc.cGreenBits = 8;
  368. pixelDesc.cGreenShift = 8;
  369. pixelDesc.cBlueBits = 8;
  370. pixelDesc.cBlueShift = 0;
  371. pixelDesc.cAlphaBits = 0;
  372. pixelDesc.cAlphaShift = 0;
  373. pixelDesc.cAccumBits = 64;
  374. pixelDesc.cAccumRedBits = 16;
  375. pixelDesc.cAccumGreenBits = 16;
  376. pixelDesc.cAccumBlueBits = 16;
  377. pixelDesc.cAccumAlphaBits = 0;
  378. pixelDesc.cDepthBits = 32;
  379. pixelDesc.cStencilBits = 8;
  380. pixelDesc.cAuxBuffers = 0;
  381. pixelDesc.iLayerType = PFD_MAIN_PLANE;
  382. pixelDesc.bReserved = 0;
  383. pixelDesc.dwLayerMask = 0;
  384. pixelDesc.dwVisibleMask = 0;
  385. pixelDesc.dwDamageMask = 0;
  386. g_GLPixelIndex = ChoosePixelFormat(hDC, &pixelDesc);
  387.  
  388. if (g_GLPixelIndex == 0)
  389. {
  390. g_GLPixelIndex = 1;
  391.  
  392. if (DescribePixelFormat(hDC, g_GLPixelIndex, sizeof(PIXELFORMATDESCRIPTOR), &pixelDesc) == 0)
  393. {
  394. return FALSE;
  395. }
  396. }
  397.  
  398. if (SetPixelFormat(hDC, g_GLPixelIndex, &pixelDesc) == FALSE)
  399. {
  400. return FALSE;
  401. }
  402.  
  403. return TRUE;
  404. }
  405. BOOL CreateViewGLContext(HDC hDC)
  406. {
  407. g_hGLContext = wglCreateContext(hDC);
  408.  
  409. if (g_hGLContext == NULL)
  410. {
  411. return FALSE;
  412. }
  413.  
  414. if (wglMakeCurrent(hDC, g_hGLContext) == FALSE)
  415. {
  416. return FALSE;
  417. }
  418.  
  419. return TRUE;
  420. }
  421.  
  422. GLvoid BuildFont(HDC hDC) // Build Our Bitmap Font
  423. {
  424. HFONT font; // Windows Font ID
  425. HFONT oldfont; // Used For Good House Keeping
  426.  
  427. font_base = glGenLists(96); // Storage For 96 Characters
  428.  
  429. font = CreateFont(-14, // Height Of Font
  430. 0, // Width Of Font
  431. 0, // Angle Of Escapement
  432. 0, // Orientation Angle
  433. FW_NORMAL, // Font Weight
  434. FALSE, // Italic
  435. FALSE, // Underline
  436. FALSE, // Strikeout
  437. ANSI_CHARSET, // Character Set Identifier
  438. OUT_TT_PRECIS, // Output Precision
  439. CLIP_DEFAULT_PRECIS, // Clipping Precision
  440. ANTIALIASED_QUALITY, // Output Quality
  441. FF_DONTCARE | DEFAULT_PITCH, // Family And Pitch
  442. "Courier New"); // Font Name
  443.  
  444. oldfont = (HFONT)SelectObject(hDC, font); // Selects The Font We Want
  445. wglUseFontBitmaps(hDC, 31, 96, font_base); // Builds 96 Characters Starting At Character 32
  446. SelectObject(hDC, oldfont); // Selects The Font We Want
  447. DeleteObject(font); // Delete The Font
  448. }
  449.  
  450. // Napisy w OpenGL
  451. GLvoid glPrint(const char *fmt, ...) // Custom GL "Print" Routine
  452. {
  453. char text[256]; // Holds Our String
  454. va_list ap; // Pointer To List Of Arguments
  455.  
  456. if (fmt == NULL) // If There's No Text
  457. return; // Do Nothing
  458.  
  459. va_start(ap, fmt); // Parses The String For Variables
  460. vsprintf(text, fmt, ap); // And Converts Symbols To Actual Numbers
  461. va_end(ap); // Results Are Stored In Text
  462.  
  463. glPushAttrib(GL_LIST_BIT); // Pushes The Display List Bits
  464. glListBase(font_base - 31); // Sets The Base Character to 32
  465. glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); // Draws The Display List Text
  466. glPopAttrib(); // Pops The Display List Bits
  467. }
  468.  
  469.  
  470. void TworzListyWyswietlania()
  471. {
  472. glNewList(Wall1, GL_COMPILE); // GL_COMPILE - lista jest kompilowana, ale nie wykonywana
  473.  
  474. glBegin(GL_QUADS); // inne opcje: GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP
  475. // GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUAD_STRIP, GL_POLYGON
  476. glNormal3f(-1.0, 0.0, 0.0);
  477. glVertex3f(-1.0, -1.0, 1.0);
  478. glVertex3f(-1.0, 1.0, 1.0);
  479. glVertex3f(-1.0, 1.0, -1.0);
  480. glVertex3f(-1.0, -1.0, -1.0);
  481. glEnd();
  482. glEndList();
  483.  
  484. glNewList(Wall2, GL_COMPILE);
  485. glBegin(GL_QUADS);
  486. glNormal3f(1.0, 0.0, 0.0);
  487. glVertex3f(1.0, -1.0, 1.0);
  488. glVertex3f(1.0, 1.0, 1.0);
  489. glVertex3f(1.0, 1.0, -1.0);
  490. glVertex3f(1.0, -1.0, -1.0);
  491. glEnd();
  492. glEndList();
  493.  
  494. /*glNewList(Floor,GL_COMPILE);
  495. glBegin(GL_POLYGON);
  496. glNormal3f( 0.0, 1.0, 0.0);
  497. glVertex3f( -100, 0, -300.0);
  498. glVertex3f( -100, 0, 100.0);
  499. glVertex3f( 100, 0, 100.0);
  500. glVertex3f( 100, 0, -300.0);
  501. glEnd();
  502. glEndList();*/
  503.  
  504. glNewList(Cube, GL_COMPILE);
  505. glBegin(GL_QUADS);
  506. // przod
  507. glNormal3f(0.0, 0.0, 1.0);
  508. glVertex3f(0, 0, 1);
  509. glVertex3f(0, 1, 1);
  510. glVertex3f(1, 1, 1);
  511. glVertex3f(1, 0, 1);
  512. // tyl
  513. glNormal3f(0.0, 0.0, -1.0);
  514. glVertex3f(0, 0, 0);
  515. glVertex3f(1, 0, 0);
  516. glVertex3f(1, 1, 0);
  517. glVertex3f(0, 1, 0);
  518. // gora
  519. glNormal3f(0.0, 1.0, 0.0);
  520. glVertex3f(0, 1, 0);
  521. glVertex3f(0, 1, 1);
  522. glVertex3f(1, 1, 1);
  523. glVertex3f(1, 1, 0);
  524. // dol
  525. glNormal3f(0.0, -1.0, 0.0);
  526. glVertex3f(0, 0, 0);
  527. glVertex3f(1, 0, 0);
  528. glVertex3f(1, 0, 1);
  529. glVertex3f(0, 0, 1);
  530. // prawo
  531. glNormal3f(1.0, 0.0, 0.0);
  532. glVertex3f(1, 0, 0);
  533. glVertex3f(1, 0, 1);
  534. glVertex3f(1, 1, 1);
  535. glVertex3f(1, 1, 0);
  536. // lewo
  537. glNormal3f(-1.0, 0.0, 0.0);
  538. glVertex3f(0, 0, 0);
  539. glVertex3f(0, 1, 0);
  540. glVertex3f(0, 1, 1);
  541. glVertex3f(0, 0, 1);
  542.  
  543. glEnd();
  544. glEndList();
  545.  
  546. glNewList(Cube_skel, GL_COMPILE);
  547. glBegin(GL_LINES);
  548. glVertex3f(0, 0, 0);
  549. glVertex3f(1, 0, 0);
  550. glVertex3f(0, 1, 0);
  551. glVertex3f(1, 1, 0);
  552. glVertex3f(0, 0, 1);
  553. glVertex3f(1, 0, 1);
  554. glVertex3f(0, 1, 1);
  555. glVertex3f(1, 1, 1);
  556. glVertex3f(0, 0, 0);
  557. glVertex3f(0, 1, 0);
  558. glVertex3f(1, 0, 0);
  559. glVertex3f(1, 1, 0);
  560. glVertex3f(0, 0, 1);
  561. glVertex3f(0, 1, 1);
  562. glVertex3f(1, 0, 1);
  563. glVertex3f(1, 1, 1);
  564. glVertex3f(0, 0, 0);
  565. glVertex3f(0, 0, 1);
  566. glVertex3f(1, 0, 0);
  567. glVertex3f(1, 0, 1);
  568. glVertex3f(0, 1, 0);
  569. glVertex3f(0, 1, 1);
  570. glVertex3f(1, 1, 0);
  571. glVertex3f(1, 1, 1);
  572. glVertex3f(0, 0, 0);
  573. glVertex3f(1, 0, 0);
  574. glVertex3f(0, 1, 0);
  575. glVertex3f(1, 1, 0);
  576. glVertex3f(0, 0, 1);
  577. glVertex3f(1, 0, 1);
  578. glVertex3f(0, 1, 1);
  579. glVertex3f(1, 1, 1);
  580.  
  581. glEnd();
  582. glEndList();
  583. }
  584.  
  585.  
  586. void DrawGlobalCoordinateSystem(void)
  587. {
  588.  
  589. glColor3f(1, 0, 0);
  590. glBegin(GL_LINES);
  591. glVertex3f(0, 0, 0);
  592. glVertex3f(2, 0, 0);
  593. glVertex3f(2, -0.25, 0.25);
  594. glVertex3f(2, 0.25, -0.25);
  595. glVertex3f(2, -0.25, -0.25);
  596. glVertex3f(2, 0.25, 0.25);
  597.  
  598. glEnd();
  599. glColor3f(0, 1, 0);
  600. glBegin(GL_LINES);
  601. glVertex3f(0, 0, 0);
  602. glVertex3f(0, 2, 0);
  603. glVertex3f(0, 2, 0);
  604. glVertex3f(0.25, 2, 0);
  605. glVertex3f(0, 2, 0);
  606. glVertex3f(-0.25, 2, 0.25);
  607. glVertex3f(0, 2, 0);
  608. glVertex3f(-0.25, 2, -0.25);
  609.  
  610. glEnd();
  611. glColor3f(0, 0, 1);
  612. glBegin(GL_LINES);
  613. glVertex3f(0, 0, 0);
  614. glVertex3f(0, 0, 2);
  615. glVertex3f(-0.25, -0.25, 2);
  616. glVertex3f(0.25, 0.25, 2);
  617. glVertex3f(-0.25, -0.25, 2);
  618. glVertex3f(0.25, -0.25, 2);
  619. glVertex3f(-0.25, 0.25, 2);
  620. glVertex3f(0.25, 0.25, 2);
  621.  
  622. glEnd();
  623.  
  624. glColor3f(1, 1, 1);
  625. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement