dariahinz

render cpp

Dec 18th, 2017
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.17 KB | None | 0 0
  1. #include <math.h>
  2. #include <stdlib.h>
  3. #include <GL/gl.h>
  4. #include <GL/glu.h>
  5. #include "render.h"
  6.  
  7. enum GLDisplayListNames
  8. {
  9. Wall1=1,
  10. Wall2=2,
  11. Floor=3,
  12. Wall3=4,
  13. Wall4=5,
  14. Wall6=6
  15. };
  16.  
  17. // zmiana rozmiaru okna
  18. void resizeGLScene(unsigned int width, unsigned int height)
  19. {
  20. if (height == 0) height = 1; // zabezpiecznie dla okna o zerowej wysokosci
  21. glViewport(0, 0, width, height);
  22. glMatrixMode(GL_PROJECTION);
  23. glLoadIdentity();
  24. gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 1.0f, 500.0f);
  25. glMatrixMode(GL_MODELVIEW);
  26. }
  27.  
  28. // glowna funkcja inicjujaca
  29. int initGL(void)
  30. {
  31. #define WIDTH 8
  32. #define HEIGHT 8
  33. #define W {255,255,255}
  34. #define R {255,127,127}
  35. GLubyte texture8 [WIDTH][HEIGHT][3]={{W,W,W,W,W,W,W,W}, // definicja tekstury
  36. {R,R,R,W,R,R,R,R},
  37. {R,R,R,W,R,R,R,R},
  38. {R,R,R,W,R,R,R,R},
  39. {W,W,W,W,W,W,W,W},
  40. {R,R,R,R,R,R,R,W},
  41. {R,R,R,R,R,R,R,W},
  42. {R,R,R,R,R,R,R,W}};
  43. glTexImage2D(GL_TEXTURE_2D, 0, 3, WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, texture8);
  44. glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  45. glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
  46. glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
  47. glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
  48. glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); //GL_DECAL
  49. glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  50.  
  51. glClearColor(0.1f, 0.3f, 0.7f, 0.0f); // (0.0f, 0.0f, 0.0f, 0.0f);
  52. glClearDepth(1.0f);
  53. glEnable(GL_LIGHTING);
  54. glEnable(GL_DEPTH_TEST);
  55. glDepthFunc(GL_LEQUAL);
  56. glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  57. return 1;
  58. }
  59.  
  60. // renderowanie sceny
  61. int drawGLScene(int counter)
  62. {
  63. GLfloat BlueSurface[] = { 0.0f, 0.0f, 1.0f, 1.0f};
  64. GLfloat GreenSurface[] = { 0.0f, 1.0f, 0.0f, 1.0f};
  65.  
  66. GLfloat LightAmbient[] = { 0.1f, 0.1f, 0.1f, 0.1f };
  67. GLfloat LightDiffuse[] = { 0.7f, 0.7f, 0.7f, 0.7f };
  68. GLfloat LightPosition[] = { 5.0f, 5.0f, 5.0f, 0.0f };
  69.  
  70. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  71.  
  72. glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient); // swiatlo otoczenia
  73. glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse); // swiatlo rozproszone
  74. glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
  75. glEnable(GL_LIGHT0);
  76. glEnable(GL_TEXTURE_2D);
  77.  
  78. glPushMatrix();
  79.  
  80. gluLookAt(0, 1/*3*/, 10 , 0, 0, 0 , 0, 1, 0);
  81. glRotated(counter, 0, 1, 0);
  82.  
  83. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, BlueSurface);
  84. glCallList(Wall1);
  85. glCallList(Wall2);
  86. glCallList(Wall3);
  87.  
  88. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, GreenSurface);
  89. glCallList(Floor);
  90.  
  91. glPopMatrix();
  92.  
  93. glFlush();
  94.  
  95. return 1;
  96. }
  97.  
  98. void CreateMaze(void)
  99. {
  100. glNewList(Wall1,GL_COMPILE); // GL_COMPILE - lista jest kompilowana,
  101. // ale nie wykonywana
  102.  
  103. glBegin(GL_QUAD_STRIP); // inne opcje: GL_POINTS, GL_LINES, GL_LINE_STRIP,
  104. // GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP,
  105. // GL_TRIANGLE_FAN, GL_QUAD_STRIP, GL_POLYGON
  106. int liczba_scian = 25;
  107. for (int i = 0; i <= liczba_scian+1; i++) {
  108. float kat = i*((1.0/liczba_scian) * (2*3.14)); //radiany
  109. float promien = 1.0;
  110. float wysokosc = 2.0;
  111. glNormal3d( cos(kat),0,sin(kat) );
  112. glVertex3d( promien*cos(kat), wysokosc, promien*sin(kat) );
  113. glVertex3d( promien*cos(kat), 0, promien*sin(kat) ); }
  114. glEnd();
  115. glEndList();
  116.  
  117. glNewList(Wall2,GL_COMPILE); //trojkaty
  118. glBegin(GL_TRIANGLES);
  119. glNormal3d( 0.0, 0.0, 1.0);
  120. glVertex3d( 0.0, 4.0, 1.0);
  121. glVertex3d( -1.0, 2.0, 1.0);
  122. glVertex3d( 1.0, 2.0, 1.0);
  123.  
  124.  
  125. glNormal3d( 0.0, 0.0, -1.0);
  126. glVertex3d( 0.0, 4.0, -1.0);
  127. glVertex3d( -1.0, 2.0, -1.0);
  128. glVertex3d( 1.0, 2.0, -1.0);
  129. glEnd();
  130. glEndList();
  131.  
  132. glNewList(Wall3,GL_COMPILE);
  133. glBegin(GL_QUADS);
  134. glNormal3d( 1.0, 0.0, 0.0);
  135. glVertex3d( 0.0, 4.0, 1.0);
  136. glVertex3d( 0.0, 4.0, -1.0);
  137. glVertex3d( 1.0, 2.0, -1.0);
  138. glVertex3d( 1.0, 2.0, 1.0);
  139.  
  140. glNormal3d( -1.0, 0.0, 0.0);
  141. glVertex3d( 0.0, 4.0, 1.0);
  142. glVertex3d( 0.0, 4.0, -1.0);
  143. glVertex3d( -1.0, 2.0, -1.0);
  144. glVertex3d( -1.0, 2.0, 1.0);
  145. glEnd();
  146. glEndList();
  147.  
  148.  
  149.  
  150. glNewList(Floor,GL_COMPILE);
  151. glBegin(GL_POLYGON);
  152. glNormal3d( 0.0, 1.0, 0.0);
  153. glVertex3d( -10, -1, -30.0);
  154. glVertex3d( -10, -1, 10.0);
  155. glVertex3d( 10, -1, 10.0);
  156. glVertex3d( 10, -1, -30.0);
  157. glEnd();
  158. glEndList();
  159.  
  160.  
  161. }
Add Comment
Please, Sign In to add comment