Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.25 KB | None | 0 0
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <fstream>
  4. #ifdef __APPLE__
  5. #include <GLUT/glut.h>
  6. #else
  7. #include <GL/glut.h>
  8. #endif
  9. #include <stdlib.h>
  10. #include "biblioteka.h"
  11. using namespace std;
  12.  
  13. static int slices = 16;
  14. static int stacks = 16;
  15.  
  16. //wklejone
  17.  
  18. GLfloat PI = 3.14;
  19. GLfloat alfa = -PI/2;
  20. GLfloat skok_point = 300.0f; //odl punktu osberwowoanego
  21. GLfloat skok_eye = 10.0f; //do pozycji oka
  22. GLfloat eyex = 0; //x,y oka
  23. GLfloat eyey = 0;
  24. GLfloat eyez = -1;
  25. GLfloat pointx = skok_point * cos(alfa);
  26. GLfloat pointy = 0.0;
  27. GLfloat pointz = skok_point * sin(alfa);
  28. float k=0;
  29. GLPVector3 vPoints[3]=
  30. {
  31. {0.0f, -1.0f, 0.0f},
  32. {1.0f, -1.0f, 0.0f},
  33. {0.0f, -1.0f, -1.0f}
  34. };
  35. GLPMatrix Macierz_cieni;
  36. const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
  37. const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  38. const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  39. GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
  40. GLPVector4 vLightPos={2.0f, 5.0f, 5.0f, 0.0f};
  41. const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
  42. const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
  43. const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  44. const GLfloat high_shininess[] = { 100.0f };
  45. //wyklejone
  46.  
  47. /* GLUT callback Handlers */
  48.  
  49. #define LICZBA_OB_TEXTUR 3
  50. GLuint obiektyTextur [LICZBA_OB_TEXTUR];
  51. char *plikiTextur[LICZBA_OB_TEXTUR] = {"C:\\Users\\Szymon\\Desktop\\tekturyRAF\\wood.tga", "C:\\Users\\Szymon\\Desktop\\tekturyRAF\\sky_night.tga", "C:\\Users\\Szymon\\Desktop\\tekturyRAF\\Lilie.tga"};
  52.  
  53. int lWez, lEle;
  54. double **Wez;
  55. int **Ele;
  56.  
  57. int lWez2, lEle2;//do wczytywania obiektu zmienne liczba wezlow i liczba elementow
  58. double **Wez2;//tablice do wczytywania zmiennych obiektu
  59. int **Ele2;
  60.  
  61. int lWez3, lEle3;//do wczytywania obiektu zmienne liczba wezlow i liczba elementow
  62. double **Wez3;//tablice do wczytywania zmiennych obiektu
  63. int **Ele3;
  64.  
  65. int lWez4, lEle4;//do wczytywania obiektu zmienne liczba wezlow i liczba elementow
  66. double **Wez4;//tablice do wczytywania zmiennych obiektu
  67. int **Ele4;
  68.  
  69. //wyklejone
  70. static void resize(int width, int height)
  71. {
  72. const float ar = (float) width / (float) height;
  73.  
  74. glViewport(0, 0, width, height);
  75. glMatrixMode(GL_PROJECTION);
  76. glLoadIdentity();
  77. glFrustum(-ar, ar, -1.0, 1.0, 2.0, 400.0);
  78. //glOrtho(-8,8,-8,8,-8,8);
  79. glMatrixMode(GL_MODELVIEW);
  80. glLoadIdentity() ;
  81. }
  82. float difamb[]={1.0, 0.5, 0.3,1.0};
  83. static void display(void)
  84. {
  85. const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
  86. const double a = t*90.0;
  87.  
  88. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  89. glColor3d(1,1,1);
  90. glPushMatrix();
  91. glTranslated(0,15,-50);
  92. glRotatef(-80,1,0,0);
  93. glBindTexture (GL_TEXTURE_2D, obiektyTextur[2]);
  94. glBegin(GL_TRIANGLES);
  95. for(int nrEl=0;nrEl<lEle;nrEl++)
  96. {
  97. glNormal3f(0.0f, 0.0f, 1.0f);
  98. glTexCoord2f(0.0f, 0.0f);
  99. glVertex3f(Wez[Ele[nrEl][0]][0],Wez[Ele[nrEl][0]][1], Wez[Ele[nrEl][0]][2]);
  100. glTexCoord2f(1.0f, 0.0f);
  101. glVertex3f(Wez[Ele[nrEl][1]][0],Wez[Ele[nrEl][1]][1], Wez[Ele[nrEl][1]][2]);
  102. glTexCoord2f(1.0f, 1.0f);
  103. glVertex3f(Wez[Ele[nrEl][2]][0],Wez[Ele[nrEl][2]][1], Wez[Ele[nrEl][2]][2]);
  104. }
  105. glEnd();
  106. glPopMatrix();
  107.  
  108. glPushMatrix();
  109. glTranslated(10,15,-50);
  110. glRotatef(-80,1,0,0);
  111. glBindTexture (GL_TEXTURE_2D, obiektyTextur[2]);
  112. glBegin(GL_TRIANGLES);
  113. for(int nrEl2=0;nrEl2<lEle2;nrEl2++)
  114. {
  115. glNormal3f(0.0f, 0.0f, 1.0f);
  116. glTexCoord2f(0.0f, 0.0f);
  117. glVertex3f(Wez2[Ele2[nrEl2][0]][0],Wez2[Ele2[nrEl2][0]][1], Wez2[Ele2[nrEl2][0]][2]);
  118. glTexCoord2f(1.0f, 0.0f);
  119. glVertex3f(Wez2[Ele2[nrEl2][1]][0],Wez2[Ele2[nrEl2][1]][1], Wez2[Ele2[nrEl2][1]][2]);
  120. glTexCoord2f(1.0f, 1.0f);
  121. glVertex3f(Wez2[Ele2[nrEl2][2]][0],Wez2[Ele2[nrEl2][2]][1], Wez2[Ele2[nrEl2][2]][2]);
  122. }
  123. glEnd();
  124. glPopMatrix();
  125.  
  126. glPushMatrix();
  127. glTranslated(0,0,-60);
  128. glRotatef(-80,1,0,0);
  129. glBindTexture (GL_TEXTURE_2D, obiektyTextur[1]);
  130. glBegin(GL_TRIANGLES);
  131. for(int nrEl3=0;nrEl3<lEle3;nrEl3++)
  132. {
  133. glNormal3f(0.0f, 0.0f, 1.0f);
  134. glTexCoord2f(0.0f, 0.0f);
  135. glVertex3f(Wez3[Ele3[nrEl3][0]][0],Wez3[Ele3[nrEl3][0]][1], Wez3[Ele3[nrEl3][0]][2]);
  136. glTexCoord2f(1.0f, 0.0f);
  137. glVertex3f(Wez3[Ele3[nrEl3][1]][0],Wez3[Ele3[nrEl3][1]][1], Wez3[Ele3[nrEl3][1]][2]);
  138. glTexCoord2f(1.0f, 1.0f);
  139. glVertex3f(Wez3[Ele3[nrEl3][2]][0],Wez3[Ele3[nrEl3][2]][1], Wez3[Ele3[nrEl3][2]][2]);
  140. }
  141. glEnd();
  142. glPopMatrix();
  143.  
  144. glPushMatrix();
  145. glTranslated(5,15,-50);
  146. glRotatef(-80,1,0,0);
  147. glBindTexture (GL_TEXTURE_2D, obiektyTextur[2]);
  148. glBegin(GL_TRIANGLES);
  149. for(int nrEl4=0;nrEl4<lEle4;nrEl4++)
  150. {
  151. glNormal3f(0.0f, 0.0f, 1.0f);
  152. glTexCoord2f(0.0f, 0.0f);
  153. glVertex3f(Wez4[Ele4[nrEl4][0]][0],Wez4[Ele4[nrEl4][0]][1], Wez4[Ele4[nrEl4][0]][2]);
  154. glTexCoord2f(1.0f, 0.0f);
  155. glVertex3f(Wez4[Ele4[nrEl4][1]][0],Wez4[Ele4[nrEl4][1]][1], Wez4[Ele4[nrEl4][1]][2]);
  156. glTexCoord2f(1.0f, 1.0f);
  157. glVertex3f(Wez4[Ele4[nrEl4][2]][0],Wez4[Ele4[nrEl4][2]][1], Wez4[Ele4[nrEl4][2]][2]);
  158. }
  159. glEnd();
  160. glPopMatrix();
  161.  
  162. glPushMatrix();
  163. glTranslated(0,-5,-10);
  164. glRotated(10,1,0,0);
  165. glBindTexture (GL_TEXTURE_2D, obiektyTextur[1]);
  166. glBegin(GL_QUADS);
  167.  
  168. glColor3d(1,1,1);
  169.  
  170. glTexCoord2f(0, 1);
  171. glVertex3d(60,0,-60);
  172. glTexCoord2f(1, 1);
  173. glVertex3d(60,0,60);
  174. glTexCoord2f(1, 0);
  175. glVertex3d(-60,0,60);
  176. glTexCoord2f(0, 0);
  177. glVertex3d(-60,0,-60);
  178.  
  179. glColor3d(0,0,0);
  180. glDisable(GL_DEPTH_TEST);
  181. glDisable(GL_LIGHTING);
  182. glPushMatrix();
  183. glTranslated(0,0,0);
  184. glMultMatrixf(Macierz_cieni);
  185. glutSolidTeapot(1);
  186. //glutSolidTorus(1.0, 2.0, 2, 50);
  187. glPopMatrix();
  188. glEnable(GL_DEPTH_TEST);
  189. glEnable(GL_LIGHTING);
  190.  
  191.  
  192. glEnd();
  193. glPopMatrix();
  194.  
  195. glutSwapBuffers();
  196. }
  197.  
  198.  
  199. static void key(unsigned char key, int x, int y)
  200. {
  201. switch (key)
  202. {
  203. case 27 :
  204. case 'q':
  205. exit(0);
  206. break;
  207.  
  208. case '+':
  209. slices++;
  210. stacks++;
  211. break;
  212. case 'o':
  213. light_position[1]-=0.1;
  214. vLightPos[1]-=0.1;
  215. glpMakeShadowMatrix(vPoints, vLightPos, Macierz_cieni);
  216. glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  217. break;
  218. case 'p':
  219. light_position[1]+=0.1;
  220. vLightPos[1]+=0.1;
  221. glpMakeShadowMatrix(vPoints, vLightPos, Macierz_cieni);
  222. glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  223. break;
  224.  
  225. case '-':
  226. if (slices>3 && stacks>3)
  227. {
  228. slices--;
  229. stacks--;
  230. }
  231. break;
  232. }
  233.  
  234. glutPostRedisplay();
  235. }
  236.  
  237. static void idle(void)
  238. {
  239. glutPostRedisplay();
  240. }
  241.  
  242. void wczytajPlik(char *nazwaPliku,char*nazwaPliku2,char*nazwaPliku3,char*nazwaPliku4){
  243. ifstream plik(nazwaPliku);
  244. int pom1, pom2;
  245. plik>>lWez;
  246. Wez = new double* [lWez];
  247.  
  248. for(int i=0; i<lWez; i++)
  249. Wez[i]=new double[3];
  250.  
  251. for(int i=0;i<lWez;i++)
  252. plik>>pom1>>Wez[i][0]>>Wez[i][1]>>Wez[i][2];
  253. plik>>lEle;
  254.  
  255. Ele = new int* [lEle];
  256.  
  257. for(int i=0; i<lEle; i++)
  258. Ele[i]=new int[3];
  259.  
  260. for(int i=0; i<lEle;i++){
  261. plik>>pom1>>pom1>>pom1>>pom1>>pom1>>Ele[i][0]>>Ele[i][1]>>Ele[i][2];
  262. Ele[i][0]--;
  263. Ele[i][1]--;
  264. Ele[i][2]--;
  265. }
  266.  
  267. cout<<"Liczba wezlow, liczba elementow: "<<lWez<<"\t"<<lEle<<endl;
  268. plik.close();
  269. //koniec 1 obiektu
  270. ifstream plik2(nazwaPliku2);
  271. int pom1x,pom2y;
  272. plik2>>lWez2;
  273. Wez2 = new double* [lWez2];
  274.  
  275. for(int i=0; i<lWez2; i++)
  276. Wez2[i]=new double[3];
  277.  
  278. for(int i=0;i<lWez2;i++)
  279. plik2>>pom1x>>Wez2[i][0]>>Wez2[i][1]>>Wez2[i][2];
  280. plik2>>lEle2;
  281.  
  282. Ele2 = new int* [lEle2];
  283.  
  284. for(int i=0; i<lEle2; i++)
  285. Ele2[i]=new int[3];
  286.  
  287. for(int i=0; i<lEle2;i++){
  288. plik2>>pom1x>>pom1x>>pom1x>>pom1x>>pom1x>>Ele2[i][0]>>Ele2[i][1]>>Ele2[i][2];
  289. Ele2[i][0]--;
  290. Ele2[i][1]--;
  291. Ele2[i][2]--;
  292. }
  293.  
  294. cout<<"Liczba wezlow, liczba elementow: "<<lWez2<<"\t"<<lEle2<<"\n";
  295. plik2.close();
  296.  
  297. //koniec 2 obiektu
  298. ifstream plik3(nazwaPliku3);
  299. int pom1x1,pom2y1;
  300. plik3>>lWez3;
  301. Wez3 = new double* [lWez3];
  302.  
  303. for(int i=0; i<lWez3; i++)
  304. Wez3[i]=new double[3];
  305.  
  306. for(int i=0;i<lWez3;i++)
  307. plik3>>pom1x1>>Wez3[i][0]>>Wez3[i][1]>>Wez3[i][2];
  308. plik3>>lEle3;
  309.  
  310. Ele3 = new int* [lEle3];
  311.  
  312. for(int i=0; i<lEle3; i++)
  313. Ele3[i]=new int[3];
  314.  
  315. for(int i=0; i<lEle3;i++){
  316. plik3>>pom1x1>>pom1x1>>pom1x1>>pom1x1>>pom1x1>>Ele3[i][0]>>Ele3[i][1]>>Ele3[i][2];
  317. Ele3[i][0]--;
  318. Ele3[i][1]--;
  319. Ele3[i][2]--;
  320. }
  321.  
  322. cout<<"Liczba wezlow, liczba elementow: "<<lWez3<<"\t"<<lEle3<<"\n";
  323. plik3.close();
  324. //koniec 3 obiektu
  325.  
  326.  
  327. // 4 obiekt
  328. ifstream plik4(nazwaPliku4);
  329. int pom1x11,pom2y11;
  330. plik4>>lWez4;
  331. Wez4 = new double* [lWez4];
  332.  
  333. for(int i=0; i<lWez4; i++)
  334. Wez4[i]=new double[3];
  335.  
  336. for(int i=0;i<lWez4;i++)
  337. plik4>>pom1x11>>Wez4[i][0]>>Wez4[i][1]>>Wez4[i][2];
  338. plik4>>lEle4;
  339.  
  340. Ele4 = new int* [lEle4];
  341.  
  342. for(int i=0; i<lEle4; i++)
  343. Ele4[i]=new int[3];
  344.  
  345. for(int i=0; i<lEle4;i++){
  346. plik4>>pom1x11>>pom1x11>>pom1x11>>pom1x11>>pom1x11>>Ele4[i][0]>>Ele4[i][1]>>Ele4[i][2];
  347. Ele4[i][0]--;
  348. Ele4[i][1]--;
  349. Ele4[i][2]--;
  350. }
  351.  
  352. cout<<"Liczba wezlow, liczba elementow: "<<lWez4<<"\t"<<lEle4;
  353. plik4.close();
  354. //koniec 4 obiektu
  355. }
  356.  
  357.  
  358.  
  359. /* Program entry point */
  360.  
  361. int main(int argc, char *argv[])
  362. {
  363. glutInit(&argc, argv);
  364. glutInitWindowSize(840,600);
  365. glutInitWindowPosition(10,10);
  366. glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  367.  
  368. wczytajPlik("C:\\Users\\Szymon\\Desktop\\tekturyRAF\\kieliszekprzerobiony.msh","C:\\Users\\Szymon\\Desktop\\tekturyRAF\\butelkaprzerobiona.msh","C:\\Users\\Szymon\\Desktop\\tekturyRAF\\stolprzerobiony.msh","C:\\Users\\Szymon\\Desktop\\tekturyRAF\\szklankaprzerobiona.msh");
  369.  
  370. glutCreateWindow("GLUT Shapes");
  371. glEnable(GL_TEXTURE_2D);
  372. glGenTextures(LICZBA_OB_TEXTUR, obiektyTextur);
  373. glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  374.  
  375. for (int i = 0; i < LICZBA_OB_TEXTUR; i++)
  376. {
  377. GLubyte *pBytes;
  378. GLint iWidth, iHeight, iComponents;
  379. GLenum eFormat;
  380. glBindTexture(GL_TEXTURE_2D, obiektyTextur[i]); // dowiazanie obiektow tekstur
  381. pBytes = glploadtga(plikiTextur[i], &iWidth, &iHeight, &iComponents, &eFormat); // zaladowanie tekstur
  382. gluBuild2DMipmaps(GL_TEXTURE_2D, iComponents, iWidth, iHeight, eFormat, GL_UNSIGNED_BYTE, pBytes); // utworzenie mipmap
  383. free(pBytes); // zwolnienie pamieci
  384. }
  385.  
  386.  
  387. glutReshapeFunc(resize);
  388. glutDisplayFunc(display);
  389. glutKeyboardFunc(key);
  390. glutIdleFunc(idle);
  391.  
  392. glClearColor(0.9,0.9,1,1); //kolor tla
  393. // glEnable(GL_CULL_FACE);
  394. // glCullFace(GL_BACK);
  395.  
  396. glEnable(GL_DEPTH_TEST);
  397. glDepthFunc(GL_LESS);
  398.  
  399. glEnable(GL_LIGHT0);
  400. glEnable(GL_NORMALIZE);
  401. glEnable(GL_COLOR_MATERIAL);
  402. glEnable(GL_LIGHTING);
  403.  
  404. glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
  405. glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  406. glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
  407. glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  408.  
  409. glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  410. glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  411. glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  412. glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
  413.  
  414. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  415. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  416. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  417. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  418.  
  419. glutMainLoop();
  420. glDeleteTextures (LICZBA_OB_TEXTUR, obiektyTextur); // usuniecie obiektow tekstur
  421. return EXIT_SUCCESS;
  422. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement