CzarnyBarszcz

Grafika_zad_2

Mar 5th, 2021
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.71 KB | None | 0 0
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <GL/glut.h>
  4. #include <stdlib.h>
  5.  
  6. using namespace std;
  7. enum
  8. {
  9. ORTO,
  10. ASPECT_1_1,
  11. FRUST,
  12. PERSP,
  13. EXIT,
  14. FULL_WINDOW,
  15. };
  16.  
  17. int rzut,skala;
  18. double xx,xy,zx,yx,obrot_x=0.0,obrot_y=0.0,yy,zy;
  19. double fovy =90,dx=0.0,dy=0.0,dz=0.0;
  20.  
  21. static void Display(void)
  22. {
  23. glClear(GL_COLOR_BUFFER_BIT);
  24. glClearColor(1.0,1.0,1.0,1.0);
  25. glMatrixMode( GL_MODELVIEW );
  26. glLoadIdentity();
  27. gluLookAt(dx, dy, dz, -0.1, -0.1, -0.1, 0.0, 1.0, 0.0);
  28. glRotatef(obrot_x,xx,xy,zx);
  29. glRotatef(obrot_y,xy,yy,zy);
  30. glColor3f(1.0,0.0,0.0);
  31. glBegin(GL_LINES);
  32.  
  33. glVertex3f(-0.5,1.0,0.5);
  34. glVertex3f(0.5,1.0,0.5); //A
  35. glVertex3f(-0.5,1.0,0.5);
  36. glVertex3f(-1.0,0.0,0.5);//B
  37. glVertex3f(-1.0,0.0,0.5);
  38. glVertex3f(-0.5,-1.0,0.5);//C
  39. glVertex3f(-0.5,-1.0,0.5);
  40. glVertex3f(0.5,-1.0,0.5);//D
  41. glVertex3f(0.5,-1.0,0.5);
  42. glVertex3f(1.0,0.0,0.5);//E
  43. glVertex3f(1.0,0.0,0.5);
  44. glVertex3f(0.5,1.0,0.5);
  45.  
  46. glVertex3f(-0.5,1.0,-0.5);
  47. glVertex3f(0.5,1.0,-0.5); //A
  48. glVertex3f(-0.5,1.0,-0.5);
  49. glVertex3f(-1.0,0.0,-0.5);//B
  50. glVertex3f(-1.0,0.0,-0.5);
  51. glVertex3f(-0.5,-1.0,-0.5);//C
  52. glVertex3f(-0.5,-1.0,-0.5);
  53. glVertex3f(0.5,-1.0,-0.5);//D
  54. glVertex3f(0.5,-1.0,-0.5);
  55. glVertex3f(1.0,0.0,-0.5);//E
  56. glVertex3f(1.0,0.0,-0.5);
  57. glVertex3f(0.5,1.0,-0.5);
  58.  
  59. glVertex3f(-0.5,1.0,0.5);
  60. glVertex3f(-0.5,1.0,-0.5);
  61. glVertex3f(-1.0,0.0,0.5);
  62. glVertex3f(-1.0,0.0,-0.5);
  63. glVertex3f(-0.5,-1.0,0.5);
  64. glVertex3f(-0.5,-1.0,-0.5);
  65. glVertex3f(0.5,-1.0,0.5);
  66. glVertex3f(0.5,-1.0,-0.5);
  67. glVertex3f(1.0,0.0,0.5);
  68. glVertex3f(1.0,0.0,-0.5);
  69. glVertex3f(0.5,1.0,0.5);
  70. glVertex3f(0.5,1.0,-0.5);
  71.  
  72. glEnd();
  73.  
  74. glFlush();
  75. glutSwapBuffers();
  76. }
  77. void Reshape(int width, int height)
  78. {
  79. // obszar renderingu - ca³e okno
  80. glViewport (0,0,width,height);
  81. // wybór macierzy rzutowania
  82. glMatrixMode (GL_PROJECTION);
  83. // macierz rzutowania = macierz jednostkowa
  84. glLoadIdentity ();
  85. // ustawienie parametrów zakresu rzutni
  86. GLdouble aspect = 1;
  87. GLfloat zakres = 3.0f;
  88. GLfloat blisko = 1.0f;
  89. GLfloat daleko = 5.0;
  90.  
  91. if (rzut==ORTO)
  92. {
  93. if (skala==ASPECT_1_1)
  94. {
  95. if (width < height && width > 0)
  96. glOrtho (-zakres,zakres,-zakres*height/width,zakres*height/width,-zakres,zakres);
  97. else if (width >= height && height > 0)
  98. glOrtho (-zakres*width/height,zakres*width/height,-zakres,zakres,-zakres,zakres);
  99. }
  100. else
  101. glOrtho (-zakres,zakres,-zakres,zakres,-zakres,zakres);
  102. }
  103.  
  104. if (rzut==FRUST)
  105. {
  106. if (skala==ASPECT_1_1)
  107. {
  108. if (width < height && width > 0)
  109. glFrustum (-zakres,zakres,-zakres*height/width,zakres*height/width,blisko,daleko);
  110. else if (width >= height && height > 0)
  111. glFrustum (-zakres*width/height,zakres*width/height,-zakres,zakres,blisko,daleko);
  112. }
  113. else
  114. glFrustum (-zakres,zakres,-zakres,zakres,blisko,daleko);
  115. }
  116. if (rzut==PERSP)
  117. {
  118. if (height > 0)
  119. aspect = width/(GLdouble)height;
  120. gluPerspective (fovy,aspect,blisko,daleko);
  121. }
  122. Display ();
  123. }
  124. void Menu (int value)
  125. {
  126. switch (value)
  127. {
  128. // wyjœcie
  129. case EXIT:
  130. exit (0);
  131. case FULL_WINDOW:
  132. skala=FULL_WINDOW;
  133. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  134. break;
  135. case ASPECT_1_1:
  136. skala=ASPECT_1_1;
  137. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  138. break;
  139. case ORTO:
  140. rzut=ORTO;
  141. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  142. break;
  143. case FRUST:
  144. rzut=FRUST;
  145. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  146. break;
  147. case PERSP:
  148. rzut=PERSP;
  149. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  150. break;
  151. }
  152. }
  153.  
  154. void Funkcja_klawiatury (unsigned char key, int x, int y)
  155. {
  156. // klawisz +
  157. if (key == 'd')
  158. {
  159. xx=0;
  160. yx=1;
  161. zx=0;
  162. obrot_x=obrot_x+5;
  163. cout<<"obrot_x= "<<obrot_x<<endl;
  164. }
  165. if (key == 'a')
  166. {
  167. xx=0;
  168. yx=1;
  169. zx=0;
  170. obrot_x=obrot_x-5;
  171. cout<<"obrot_x= "<<obrot_x<<endl;
  172. }
  173. if (key == 'w')
  174. {
  175. xy=1;
  176. yy=0;
  177. zy=0;
  178. obrot_y=obrot_y+5;
  179. cout<<"obrot_y= "<<obrot_y<<endl;
  180. }
  181. if (key == 's')
  182. {
  183. xy=1;
  184. yy=0;
  185. zy=0;
  186. obrot_y=obrot_y-5;
  187. cout<<"obrot_y= "<<obrot_y<<endl;
  188. }
  189. if (key == '+')
  190. {
  191.  
  192. obrot_y=obrot_y-5;
  193. cout<<"obrot_y= "<<obrot_y<<endl;
  194. }
  195. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  196. }
  197. void specialKey(int klawisz, int x, int y)
  198. {
  199. cout << " klawisz" << klawisz << endl;
  200. if(klawisz == 100)
  201. {
  202. dx-=0.1;
  203. cout<<"dx="<<dx<<endl;
  204. }
  205. if(klawisz == 102)
  206. {
  207. dx+=0.1;
  208. cout<<"dx="<<dx<<endl;
  209. }
  210. if(klawisz == 101)
  211. {
  212. dy+=0.1;
  213. cout<<"dy="<<dx<<endl;
  214. }
  215. if(klawisz == 103)
  216. {
  217. dy-=0.1;
  218. cout<<"dy="<<dx<<endl;
  219. }
  220. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  221. }
  222.  
  223.  
  224. int main(int argc, char *argv[])
  225. {
  226. glutInit(&argc, argv);
  227. glutInitWindowSize(640,480);
  228. glutInitWindowPosition(10,10);
  229. glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  230.  
  231. glutCreateWindow("Zadanie 2");
  232.  
  233. glutReshapeFunc(Reshape);
  234. glutDisplayFunc(Display);
  235. glutIdleFunc(Display);
  236. glutCreateMenu (Menu); // utworzenie menu podrêcznego
  237. // dodadnie pozycji do menu podrêcznego
  238. glutAddMenuEntry ("Rodzaj skalowania - ca³e okno",FULL_WINDOW);
  239. glutAddMenuEntry ("Rodzaj skalowania - skala 1:1",ASPECT_1_1);
  240. glutAddMenuEntry ("Rzutowanie ortogonalne", ORTO);
  241. glutAddMenuEntry ("Rzutowanie frustum", FRUST);
  242. glutAddMenuEntry ("Rzutowanie perspective", PERSP);
  243. glutAddMenuEntry ("Wyjœcie",EXIT);
  244. glutAttachMenu (GLUT_RIGHT_BUTTON); // okreœlenie przycisku myszki obs³uguj¹cej menu podrêczne
  245. glutKeyboardFunc(Funkcja_klawiatury);
  246. //glutIdleFunc(idle);
  247. glutSpecialFunc(specialKey);
  248.  
  249. cout<<"STROWANIE"<<endl;
  250. cout<<"PRZYBLIZ strzałka w gore"<<endl;
  251. cout<<"ODDAL strzałka w dół"<<endl;
  252. cout<<"OBROT W OKOL OSI Y :'W','S'"<<endl;
  253. cout<<"OBROT W OKOL OSI X :'A','D'"<<endl;
  254.  
  255.  
  256.  
  257. glutMainLoop();
  258.  
  259. return EXIT_SUCCESS;
  260. }
  261.  
Advertisement
Add Comment
Please, Sign In to add comment