CzarnyBarszcz

zadanie4

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