Advertisement
Guest User

Untitled

a guest
May 4th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.84 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <stdlib.h>
  4.  
  5. #include <GL/glut.h>
  6. #include <GL/glext.h>
  7. #include "imageloader.h"
  8. #include "pathconfig.h"
  9. using namespace std;
  10.  
  11. float _angle = 1.f;
  12.  
  13. void handleKeypress(unsigned char key, int x, int y)
  14. {
  15. switch (key)
  16. {
  17. case 27: //Escape key
  18. exit(0);
  19. }
  20. }
  21. // pretvaramo sliku u teksturu, \return id texture
  22. GLuint loadTexture(Image* image)
  23. {
  24. GLuint textureId;
  25. glGenTextures(1, &textureId); //rezervirati mjesto za teksturu
  26. glBindTexture(GL_TEXTURE_2D, textureId); //koju teksturu ce openGL editirati
  27. // preslikavanje slike na teksturu
  28. glTexImage2D(GL_TEXTURE_2D, //uvijek GL_TEXTURE_2D
  29. 0, // level mipmape - 0 za sada
  30. GL_RGB, // format koji opengl koristi za slikuFormat OpenGL uses for image
  31. image->width, image->height, // mozda sirina i visina?
  32. 0, //rub slike
  33. GL_RGB, //GL_RGB, jer su pikseli u tom formatu
  34. GL_UNSIGNED_BYTE, //GL_UNSIGNED_BYTE, jer su pikseli unsigned brojevi
  35. image->pixels); // napokon podaci
  36.  
  37. return textureId; //vracamo id teksture
  38. }
  39.  
  40. // pretvaramo sliku u mipmapu - teksturu, \return id texture
  41. GLuint loadMipmappedTexture(Image *image)
  42. {
  43. // argumenti isti kao i kod loadTexture
  44. GLuint textureId;
  45. glGenTextures(1, &textureId);
  46. glBindTexture(GL_TEXTURE_2D, textureId);
  47.  
  48. gluBuild2DMipmaps(GL_TEXTURE_2D,
  49. GL_RGB,
  50. image->width, image->height,
  51. GL_RGB,
  52. GL_UNSIGNED_BYTE,
  53. image->pixels);
  54. return textureId;
  55. }
  56.  
  57. GLuint _textureId1; // id teksture
  58. GLuint _textureId2;
  59. GLuint _textureId3;
  60. GLuint _textureId4;
  61. GLuint _textureId5;
  62. GLuint _textureId6;
  63.  
  64. void initRendering()
  65. {
  66. glEnable(GL_DEPTH_TEST);
  67. glEnable(GL_LIGHTING);
  68. glEnable(GL_LIGHT0);
  69. glEnable(GL_NORMALIZE);
  70. glEnable(GL_COLOR_MATERIAL);
  71.  
  72. filePathBuilder fpath;
  73. Image* image1 = loadBMP(fpath.filePath("BugsBunny.bmp"));
  74. _textureId1 = loadMipmappedTexture(image1);
  75. delete image1;
  76.  
  77. Image* image2 = loadBMP(fpath.filePath("checkerboard.bmp"));
  78. _textureId2 = loadMipmappedTexture(image2);
  79. delete image2;
  80.  
  81. Image* image3 = loadBMP(fpath.filePath("marble02.bmp"));
  82. _textureId3 = loadMipmappedTexture(image3);
  83. delete image3;
  84.  
  85. Image* image4 = loadBMP(fpath.filePath("marble03.bmp"));
  86. _textureId4 = loadMipmappedTexture(image4);
  87. delete image4;
  88.  
  89. Image* image5 = loadBMP(fpath.filePath("plank01.bmp"));
  90. _textureId5 = loadMipmappedTexture(image5);
  91. delete image5;
  92.  
  93. Image* image6 = loadBMP(fpath.filePath("sunset.bmp"));
  94. _textureId6 = loadMipmappedTexture(image6);
  95. delete image6;
  96. }
  97.  
  98. void handleResize(int w, int h)
  99. {
  100. glViewport(0, 0, w, h);
  101. glMatrixMode(GL_PROJECTION);
  102. glLoadIdentity();
  103. gluPerspective(45.0, (float)w / (float)h, 1.0, 200.0);
  104. }
  105.  
  106. const float BOX_SIZE = 7.0f;
  107. void drawBox()
  108. {
  109. glEnable(GL_TEXTURE_2D);
  110. glBindTexture(GL_TEXTURE_2D, _textureId1);
  111. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  112. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  113.  
  114. glBegin(GL_QUADS);
  115. //Top face
  116. glColor3f(1.0f, 1.0f, 1.0f);
  117. glNormal3f(0.0, 1.0f, 0.0f);
  118. glTexCoord2f(0.0f, 0.0f);
  119. glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  120. glTexCoord2f(1.0f, 0.0f);
  121. glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
  122. glTexCoord2f(1.0f, 1.0f);
  123. glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
  124. glTexCoord2f(0.0f, 1.0f);
  125. glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  126. glEnd();
  127.  
  128. glDisable(GL_TEXTURE_2D);
  129. glEnable(GL_TEXTURE_2D);
  130. glBindTexture(GL_TEXTURE_2D, _textureId2);
  131. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  132. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  133.  
  134. glBegin(GL_QUADS);
  135. //Bottom face
  136. glColor3f(1.0f, 1.0f, 1.0f);
  137. glNormal3f(0.0, -1.0f, 0.0f);
  138. glTexCoord2f(0.0f, 0.0f);
  139. glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  140. glTexCoord2f(1.0f, 0.0f);
  141. glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  142. glTexCoord2f(1.0f, 1.0f);
  143. glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  144. glTexCoord2f(0.0f, 1.0f);
  145. glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  146. glEnd();
  147.  
  148. glDisable(GL_TEXTURE_2D);
  149. glEnable(GL_TEXTURE_2D);
  150. glBindTexture(GL_TEXTURE_2D, _textureId3);
  151. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  152. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  153.  
  154. glBegin(GL_QUADS);
  155. //Left face
  156. glColor3f(1.0f, 1.0f, 1.0f);
  157. glNormal3f(1.0, 1.0f, 1.0f);
  158. glTexCoord2f(0.0f, 0.0f);
  159. glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  160. glTexCoord2f(1.0f, 0.0f);
  161. glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  162. glTexCoord2f(1.0f, 1.0f);
  163. glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
  164. glTexCoord2f(0.0f, 1.0f);
  165. glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  166. glEnd();
  167.  
  168. glDisable(GL_TEXTURE_2D);
  169. glEnable(GL_TEXTURE_2D);
  170. glBindTexture(GL_TEXTURE_2D, _textureId4);
  171. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  172. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  173.  
  174. glBegin(GL_QUADS);
  175. //Right face
  176. glColor3f(1.0f, 1.0f, 1.0f);
  177. glNormal3f(1.0, 1.0f, 1.0f);
  178. glTexCoord2f(0.0f, 0.0f);
  179. glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  180. glTexCoord2f(1.0f, 0.0f);
  181. glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  182. glTexCoord2f(1.0f, 1.0f);
  183. glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
  184. glTexCoord2f(0.0f, 1.0f);
  185. glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  186. glEnd();
  187.  
  188. glDisable(GL_TEXTURE_2D);
  189. glEnable(GL_TEXTURE_2D);
  190. glBindTexture(GL_TEXTURE_2D, _textureId5);
  191. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  192. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  193.  
  194. glBegin(GL_QUADS);
  195. //Front face
  196. glColor3f(1.0f, 1.0f, 1.0f);
  197. glNormal3f(0.0, 0.0f, 1.0f);
  198. glTexCoord2f(0.0f, 0.0f);
  199. glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  200. glTexCoord2f(1.0f, 0.0f);
  201. glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  202. glTexCoord2f(1.0f, 1.0f);
  203. glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
  204. glTexCoord2f(0.0f, 1.0f);
  205. glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
  206. glEnd();
  207.  
  208. glDisable(GL_TEXTURE_2D);
  209. glEnable(GL_TEXTURE_2D);
  210. glBindTexture(GL_TEXTURE_2D, _textureId6);
  211. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  212. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  213.  
  214. glBegin(GL_QUADS);
  215. //Back face
  216. glColor3f(1.0f, 1.0f, 1.0f);
  217. glNormal3f(0.0, 0.0f, -1.0f);
  218. glTexCoord2f(0.0f, 0.0f);
  219. glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  220. glTexCoord2f(1.0f, 0.0f);
  221. glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  222. glTexCoord2f(1.0f, 1.0f);
  223. glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  224. glTexCoord2f(0.0f, 1.0f);
  225. glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  226. glEnd();
  227. }
  228.  
  229. void drawScene()
  230. {
  231. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  232.  
  233. glMatrixMode(GL_MODELVIEW);
  234. glLoadIdentity();
  235.  
  236. glTranslatef(0.0f, 0.0f, -20.0f);
  237.  
  238. GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};
  239. glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
  240.  
  241. GLfloat lightColor[] = {0.7f, 0.7f, 0.7f, 1.0f};
  242. GLfloat lightPos[] = {-0.2f, 0.3f, -1, 0.0f};
  243. glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
  244. glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
  245.  
  246. glRotatef(-_angle, 1.0f, 1.0f, 0.0f);
  247.  
  248.  
  249. glEnable(GL_TEXTURE_2D);
  250. glBindTexture(GL_TEXTURE_2D, _textureId1);
  251. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  252. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  253.  
  254. drawBox();
  255.  
  256. glutSwapBuffers();
  257. }
  258.  
  259. void update(int value) {
  260. _angle += 1.0f;
  261. if (_angle > 360) {
  262. _angle -= 360;
  263. }
  264.  
  265. glutPostRedisplay();
  266. glutTimerFunc(25, update, 0);
  267. }
  268.  
  269. int main(int argc, char** argv)
  270. {
  271. glutInit(&argc, argv);
  272. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  273. glutInitWindowSize(400, 400);
  274.  
  275. glutCreateWindow("gl_teksture");
  276. initRendering();
  277.  
  278. glutDisplayFunc(drawScene);
  279. glutKeyboardFunc(handleKeypress);
  280. glutReshapeFunc(handleResize);
  281. glutTimerFunc(25, update, 0);
  282.  
  283. glutMainLoop();
  284. return 0;
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement