Advertisement
Guest User

Untitled

a guest
Jan 25th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.49 KB | None | 0 0
  1. #ifdef WIN32
  2. #include <windows.h>
  3. #endif
  4.  
  5. #include <math.h>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <GL/gl.h>
  9. #include <GL/glu.h>
  10. #include "render.h"
  11. #include "bitmap.h"
  12.  
  13. #define BLACHA_RDZA 10
  14. #define BLACHA_CZARNA 11
  15. #define BLACHA_GRAFIKA 12
  16.  
  17. extern int iMx,iMy;
  18. extern float X,Y,Z;
  19. extern float g_counter;
  20.  
  21. void Asix(void); //funkcja rysujaca osie ukladu wspolrzednych
  22. unsigned int Texture[10]; /* tablica indeksow uzywanych tekstur */
  23.  
  24.  
  25. void tworz_listy_wysw();
  26.  
  27.  
  28.  
  29. /*zmiana rozmiaru okna */
  30. void resizeGLScene(unsigned int width, unsigned int height)
  31. {
  32. if (height == 0) /* zabezpiecznie gdyby wysokosc okna byla mniejsza od 1 */
  33. height = 1;
  34.  
  35. glViewport(0, 0, width, height);
  36. glMatrixMode(GL_PROJECTION);
  37. glLoadIdentity();
  38. gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 1.0f, 500.0f);
  39. glMatrixMode(GL_MODELVIEW);
  40. }
  41.  
  42. /* glowna funkcja inicjujaca */
  43. int initGL(void)
  44. {
  45. GLfloat fogColor[] = { 0.1f, 0.3f, 0.7f, 1.0f }; /* kolor mgly */
  46.  
  47. Texture[0]=loadTextures("Data/grass.bmp");
  48. Texture[1]=loadTextures("Data/glass.bmp");
  49. Texture[2]=loadTextures("Data/glass.bmp");
  50. Texture[3]=loadTextures("Data/KluczaTrzon.bmp");
  51. Texture[4]=loadTextures("Data/drewie.bmp");
  52. Texture[5]=loadTextures("Data/a.bmp");
  53. Texture[6]=loadTextures("Data/b.bmp");
  54. Texture[7]=loadTextures("Data/metalblack03.bmp");
  55. Texture[8]=loadTextures("Data/tongue.bmp");
  56.  
  57.  
  58. tworz_listy_wysw();
  59.  
  60. glEnable(GL_TEXTURE_2D); /* zezwolenie na wyswietlanie tekstur */
  61. glShadeModel(GL_SMOOTH);
  62. glClearColor(0.1f, 0.3f, 0.7f, 0.0f); // niebieskie tlo
  63. //glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // czarne tlo
  64. glClearDepth(1.0f);
  65. glEnable(GL_DEPTH_TEST);
  66. glDepthFunc(GL_LEQUAL);
  67. glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  68. // glBlendFunc(GL_SRC_ALPHA, GL_ONE); /* okreslenie funkcji przezroczystosci */
  69. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* okreslenie funkcji przezroczystosci */
  70.  
  71. glEnable(GL_ALPHA_TEST);
  72. glAlphaFunc(GL_GREATER,0.5);
  73.  
  74. glFogi(GL_FOG_MODE, GL_LINEAR);
  75. glFogfv(GL_FOG_COLOR, fogColor);
  76.  
  77. glFogf(GL_FOG_START, 400.0f);
  78. glFogf(GL_FOG_END, 500.0f);
  79. glEnable(GL_FOG);
  80.  
  81. // Wlaczenie oswietlenie, niestety znika przy tym przezroczystosc i
  82. // jakies oswietlenie standardowe:
  83. glEnable(GL_LIGHTING);
  84.  
  85. return 1;
  86. }
  87.  
  88.  
  89.  
  90. /* Renderowanie sceny */
  91. int drawGLScene(void)
  92. {
  93. GLfloat BlueSurface[] = { 0.0f, 0.0f, 0.4f, 1.0f};
  94. GLfloat GreySurface[] = { 0.7f, 0.7f, 0.7f, 1.0f};
  95.  
  96. GLfloat LightAmbient[] = { 100.0f, 50.0f, 20.0f, 0.5f };
  97. GLfloat LightDiffuse[] = { 10.0f, 0.8f, 0.8f, 0.8f };
  98. GLfloat LightPosition[] = { 0.0f, 1.0f, -5.0f, 1.0f };
  99. GLfloat SpotDirection[] = {sin(g_counter/180*3.14),0,cos(g_counter/180*3.14)};
  100.  
  101.  
  102. glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient); //1 składowa: światło otaczające (bezkierunkowe)
  103. glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse); //2 składowa: światło rozproszone (kierunkowe)
  104. glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
  105. glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 70.0f);
  106. glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 120.0f);
  107. glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, SpotDirection);
  108. glEnable(GL_LIGHT0);
  109.  
  110. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  111.  
  112. glLoadIdentity();
  113.  
  114. //glBindTexture(GL_TEXTURE_2D,0); /* select our texture */
  115. //glTranslatef(0,0,-3);
  116. //glColor3f(0.5,1,0.5);
  117. //glRasterPos2f(-1,1);
  118. //glPrint("OpenGL w systemie Linux");
  119.  
  120.  
  121. glTranslatef(X,Y,Z-50);
  122. // obracanie calej sceny
  123. glRotatef(iMy+90,1,0,0);
  124. glRotatef(iMx,0,1,0);
  125.  
  126. //zerowanie kolorow i tekstor w celu rysowania obiektow nieteksturowanych
  127. glColor4f(1,1,1,1);
  128.  
  129.  
  130. Asix(); // rysunek ukladu wspolrzednych
  131. glEnable(GL_BLEND);
  132. glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
  133.  
  134. glPushMatrix();
  135.  
  136. glColor4f(1,1,1,1);
  137. glBindTexture(GL_TEXTURE_2D, Texture[0]);
  138. // rysowanie podloza sceny
  139. glBegin(GL_QUADS);
  140. glTexCoord2f(0, 0); glVertex3f(-100,0,-100);
  141. glTexCoord2f(0, 4); glVertex3f(-100,0,100);
  142. glTexCoord2f(4, 4); glVertex3f(100,0,100);
  143. glTexCoord2f(4, 0); glVertex3f(100,0,-100);
  144. glEnd();
  145.  
  146.  
  147.  
  148.  
  149. //glDisable(GL_DEPTH_TEST);
  150. //glDisable(GL_CULL_FACE);
  151. glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // Pozwala oswietlac textury
  152. //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); // Pozwala oswietlac textury -swiatlo duzo mocniejsze
  153. glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
  154. //glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
  155. // rysowanie plytek o roznej przezroczystosci:
  156. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, BlueSurface);
  157.  
  158. int moje[9][10] = {
  159. { 1,1,1,1,1,1,1,1,1,1 },
  160. { 1,0,0,0,0,0,0,0,0,1 },
  161. { 1,0,1,1,1,1,1,1,0,1 },
  162. { 1,0,0,0,0,0,0,1,0,1 },
  163. { 1,1,1,1,1,1,0,1,0,1 },
  164. { 1,0,0,0,0,0,0,1,0,1 },
  165. { 1,0,1,1,1,1,1,1,0,1 },
  166. { 1,0,0,0,0,0,0,1,0,1 },
  167. { 1,1,1,1,1,1,0,1,0,1 } };
  168.  
  169. for (int i = 0; i <9 ; i++) {
  170. for (int j = 0; j < 10; j++) {
  171. if (moje[i][j]==1) {
  172. {
  173. glPushMatrix();
  174. int x = -8 + i * 2, z = 2*j;
  175. glColor4f(1.0f, 1.0f, 1.0f, 0.55 + i * 0.05f);
  176. glScalef(5.0f, 5.0f, 5.0f);
  177. glTranslatef(x, 1.0f, z);
  178. glBindTexture(GL_TEXTURE_2D, Texture[5]);
  179. glCallList(BLACHA_RDZA);
  180. glBindTexture(GL_TEXTURE_2D, Texture[7]);
  181. glCallList(BLACHA_CZARNA);
  182. glBindTexture(GL_TEXTURE_2D, Texture[6]);
  183. glCallList(BLACHA_GRAFIKA);
  184. glPopMatrix();
  185. }
  186.  
  187. }
  188.  
  189. }
  190.  
  191. }
  192.  
  193.  
  194. glPopMatrix();
  195. glPushMatrix();
  196. glTranslatef(5.0f,0.0f,5);
  197.  
  198.  
  199. //glDepthMask(0); // zabronienie zapisu do Z-bufora
  200.  
  201. glColor4f(1,1,1,0.7);
  202.  
  203. // RENDER OBJECT
  204. //glBindTexture(GL_TEXTURE_2D,Texture[3]);
  205. //glDisable(GL_TEXTURE_2D);
  206. glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // Pozwala oswietlac textury
  207.  
  208. GLUquadricObj *Qcyl = gluNewQuadric();
  209. GLUquadricObj *Qdisk = gluNewQuadric();
  210. gluDisk(Qdisk,0,5,15,7);
  211. gluCylinder(Qcyl,5,5,2,15,14);
  212. gluDeleteQuadric(Qcyl);gluDeleteQuadric(Qdisk);
  213. glDepthMask(1); //zezwoleniena zapis do Z-bufora
  214.  
  215. //glEnable(GL_DEPTH_TEST);
  216. //glEnable(GL_CULL_FACE);
  217.  
  218.  
  219.  
  220. glEnable(GL_TEXTURE_2D);
  221.  
  222. // Rysowanie sfery z nalozona tekstura
  223. glTranslatef(10.0f,3.0f,5.0f);
  224. // d owi a z ani e wy b rane j t e k s t u r y
  225. glBindTexture(GL_TEXTURE_2D, Texture[5] ) ;
  226. // u s t awi e n i e parametów s r o d owi s k a t e k s t u r
  227. glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE) ;
  228. // u two r z eni e kwadr y k i
  229. GLUquadricObj *quadobj = gluNewQuadric();
  230. // s t y l ( wyg lad ) g ene rowane j kwadr y k i
  231. gluQuadricDrawStyle( quadobj ,GLU_FILL ) ;
  232. // s p o s ó b g e n e r a c j i wektorów normalnych
  233. gluQuadricNormals ( quadobj ,GLU_SMOOTH) ;
  234. // n a ł o z e n i e t e k s t u r y na kwadryke
  235. gluQuadricTexture ( quadobj ,GL_TRUE) ;
  236. // narysowani e k u l i
  237. gluSphere ( quadobj , 2.0 , 50 , 50 ) ;
  238. // u s u n i e c i e kwa dr y k i
  239. gluDeleteQuadric ( quadobj ) ;
  240.  
  241. glDisable(GL_BLEND);
  242.  
  243. glPopMatrix();
  244.  
  245.  
  246. glFlush();
  247.  
  248.  
  249. return 1;
  250. }
  251.  
  252.  
  253.  
  254.  
  255. void Asix(void)
  256. {
  257.  
  258.  
  259. glColor3f(1,0,0);
  260. glBegin(GL_LINES);
  261. glVertex3f(0,0,0);
  262. glVertex3f(2,0,0);
  263. glVertex3f(2,-0.25,0.25);
  264. glVertex3f(2,0.25,-0.25);
  265. glVertex3f(2,-0.25,-0.25);
  266. glVertex3f(2,0.25,0.25);
  267.  
  268. glEnd();
  269. glColor3f(0,1,0);
  270. glBegin(GL_LINES);
  271. glVertex3f(0,0,0);
  272. glVertex3f(0,2,0);
  273. glVertex3f(0,2,0);
  274. glVertex3f(0.25,2,0);
  275. glVertex3f(0,2,0);
  276. glVertex3f(-0.25,2,0.25);
  277. glVertex3f(0,2,0);
  278. glVertex3f(-0.25,2,-0.25);
  279.  
  280. glEnd();
  281. glColor3f(0,0,1);
  282. glBegin(GL_LINES);
  283. glVertex3f(0,0,0);
  284. glVertex3f(0,0,2);
  285. glVertex3f(-0.25,-0.25,2);
  286. glVertex3f(0.25,0.25,2);
  287. glVertex3f(-0.25,-0.25,2);
  288. glVertex3f(0.25,-0.25,2);
  289. glVertex3f(-0.25,0.25,2);
  290. glVertex3f(0.25,0.25,2);
  291.  
  292. glEnd();
  293.  
  294. glColor3f(1,1,1);
  295. }
  296.  
  297. void tworz_listy_wysw()
  298. {
  299. // Kawalek blachy stalowej obustronnie przycietej z apokryfem
  300. float Wierz[8][3] =
  301. {
  302. {-1.0f,-1.0f,1.0f},
  303. {1.0f,-1.0f,1.0f},
  304. {1.0f,1.0f,1.0f},
  305. {-1.0f,1.0f,1.0f},
  306. {-1.0f,-1.0f,-1.0f},
  307. {1.0f,-1.0f,-1.0f},
  308. {1.0f,1.0f,-1.0f},
  309. {-1.0f,1.0f,-1.0f}
  310. };
  311. float TexCord[4][2] =
  312. {
  313. {0.0f,0.0f}, {1.0f,0.0f}, {1.0f,1.0f}, {0.0f,1.0f}
  314. };
  315. int Sciany[6][4] =
  316. {
  317. {0,1,2,3}, //przod
  318. {1,5,6,2}, //prawa
  319. {4,0,3,7}, //lewa
  320. {3,2,6,7}, //gora
  321. {4,5,1,0}, //dol
  322. {5,4,7,6} // tyl
  323. };
  324.  
  325.  
  326.  
  327. glNewList(BLACHA_RDZA,GL_COMPILE);
  328. for (int j=0;j<3;j++) // j-indeks sciany, i-indeks wierzcholka
  329. {
  330. glBegin(GL_QUADS);
  331. for (int i=0;i<4;i++)
  332. {
  333. glTexCoord2fv(TexCord[i]);
  334. glVertex3fv(Wierz[Sciany[j][i]]);
  335. }
  336. glEnd();
  337. }
  338. glEndList();
  339.  
  340. glNewList(BLACHA_CZARNA,GL_COMPILE);
  341. for (int j=3;j<5;j++) // j-indeks sciany, i-indeks wierzcholka
  342. {
  343. glBegin(GL_QUADS);
  344. for (int i=0;i<4;i++)
  345. {
  346. glTexCoord2fv(TexCord[i]);
  347. glVertex3fv(Wierz[Sciany[j][i]]);
  348. }
  349. glEnd();
  350. }
  351. glEndList();
  352.  
  353. glNewList(BLACHA_GRAFIKA,GL_COMPILE);
  354. glBegin(GL_QUADS);
  355. for (int i=0;i<4;i++)
  356. {
  357. glTexCoord2fv(TexCord[i]);
  358. glVertex3fv(Wierz[Sciany[5][i]]);
  359. }
  360. glEnd();
  361. glEndList();
  362. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement