Advertisement
CzarnyBarszcz

filtry

Mar 7th, 2021
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.18 KB | None | 0 0
  1. /*
  2. * GLUT Shapes Demo
  3. *
  4. * Written by Nigel Stewart November 2003
  5. *
  6. * This program is test harness for the sphere, cone
  7. * and torus shapes in GLUT.
  8. *
  9. * Spinning wireframe and smooth shaded shapes are
  10. * displayed until the ESC or q key is pressed. The
  11. * number of geometry stacks and slices can be adjusted
  12. * using the + and - keys.
  13. */
  14. #include <windows.h>
  15. #ifdef __APPLE__
  16. #include <GLUT/glut.h>
  17. #else
  18. #include <GL/glut.h>
  19. #endif
  20.  
  21. #include <stdlib.h>
  22. #include <fstream>
  23. #include <iostream>
  24. #include <math.h>
  25. using namespace std;
  26.  
  27. static int slices = 16;
  28. static int stacks = 16;
  29. double gamma=1.0;
  30. const int nx = 1339;
  31. const int ny = 2000;
  32. double rOrg[nx][ny];
  33. double rO0[nx][ny];
  34. double rNew[nx][ny];
  35. double gOrg[nx][ny];
  36. double gO0[nx][ny];
  37. double gNew[nx][ny];
  38. double bOrg[nx][ny];
  39. double bO0[nx][ny];
  40. double bNew[nx][ny];
  41. double mUsK[3][3]={{-1,-1,-1},
  42. {-1,9,-1},
  43. {-1,-1,-1}};
  44. double mUs[3][3]={{0,-1,0},
  45. {0,1,0},
  46. {0,0,0}};
  47. double pS=1;
  48.  
  49. int czytanie(const string& nazwaPliku)
  50. {
  51. int szer,wys;
  52. ifstream plik(nazwaPliku.c_str());
  53. plik>>szer>>wys;
  54. for(int i=0;i<nx;i++)
  55. for(int j=0;j<ny;j++)
  56. {
  57. plik>>rOrg[i][j];
  58. plik>>gOrg[i][j];
  59. plik>>bOrg[i][j];
  60. rOrg[i][j]/=255.0;
  61. gOrg[i][j]/=255.0;
  62. bOrg[i][j]/=255.0;
  63. // cout<<rOrg[i][j]<<"\t"<<gOrg[i][j]<<"\t"<<bOrg[i][j]<<endl;
  64. }
  65. for(int i=0;i<nx;i++)
  66. for(int j=0;j<ny;j++)
  67. {
  68. rNew[i][j]=rOrg[i][j];
  69. gNew[i][j]=gOrg[i][j];
  70. bNew[i][j]=bOrg[i][j];
  71. rO0[i][j]=rOrg[i][j];
  72. gO0[i][j]=gOrg[i][j];
  73. bO0[i][j]=bOrg[i][j];
  74. // cout<<rOrg[i][j]<<"\t"<<gOrg[i][j]<<"\t"<<bOrg[i][j]<<endl;
  75. }
  76. cout<<"szer="<<szer<<"\twys="<<wys<<endl;
  77. plik.close();
  78.  
  79. return 0;
  80. }
  81. /* GLUT callback Handlers */
  82.  
  83. static void resize(int width, int height)
  84. {
  85. const float ar = (float) width / (float) height;
  86.  
  87. glViewport(0, 0, width, height);
  88. glMatrixMode(GL_PROJECTION);
  89. glLoadIdentity();
  90. glOrtho(0,ny,0,nx,-5,5);
  91. if((double)width/ny>(double)height/nx)
  92. pS=(double)width/ny;
  93. else
  94. pS=(double)height/nx;
  95.  
  96. glMatrixMode(GL_MODELVIEW);
  97. glLoadIdentity() ;
  98. }
  99.  
  100. static void display(void)
  101. {
  102. const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
  103. const double a = t*90.0;
  104.  
  105. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  106. glPointSize(pS);
  107. glBegin(GL_POINTS);
  108. for(int i=0;i<nx;i++)
  109. for(int j=0;j<ny;j++)
  110. {
  111. glColor3d(rNew[i][j],gNew[i][j],bNew[i][j]);
  112. glVertex3d(j,i,0);
  113. }
  114. glEnd();
  115. glutSwapBuffers();
  116. }
  117.  
  118.  
  119. static void key(unsigned char key, int x, int y)
  120. {
  121.  
  122. switch (key)
  123. {
  124. case 27 :
  125. case 'q':
  126. exit(0);
  127. break;
  128. case '0':
  129. {
  130.  
  131. for(int i=0; i<nx; i++)
  132. for(int j=0; j<ny; j++)
  133. {
  134. rNew[i][j]=rO0[i][j];
  135. gNew[i][j]=gO0[i][j];
  136. bNew[i][j]=bO0[i][j];
  137. }
  138. gamma=1.0;
  139. }
  140. break;
  141. case 'r':
  142. for(int i=0;i<nx;i++)
  143. for(int j=0;j<ny;j++)
  144. {
  145. rNew[i][j]+=0.1;
  146. }
  147. break;
  148. case 'g':
  149. for(int i=0;i<nx;i++)
  150. for(int j=0;j<ny;j++)
  151. {
  152. gNew[i][j]+=0.1;
  153. }
  154. case 'b':
  155. for(int i=0;i<nx;i++)
  156. for(int j=0;j<ny;j++)
  157. {
  158. bNew[i][j]+=0.1;
  159. }
  160. break;
  161. case '1':
  162. for(int i=0;i<nx;i++)
  163. for(int j=0;j<ny;j++)
  164. {
  165. rNew[i][j]+=0.1;
  166. gNew[i][j]+=0.1;
  167. bNew[i][j]+=0.1;
  168. }
  169. break;
  170. case '4':
  171. {
  172. for(int i=0;i<nx;i++)
  173. for(int j=0;j<ny;j++)
  174. {
  175. rNew[i][j]=pow(rOrg[i][j],gamma);
  176. gNew[i][j]=pow(gOrg[i][j],gamma);
  177. bNew[i][j]=pow(bOrg[i][j],gamma);
  178. }
  179. gamma+=1.0;
  180. cout<<"gamma = "<<gamma<<endl;
  181. }
  182. break;
  183. case '5':
  184. {
  185. for(int i=0;i<nx;i++)
  186. for(int j=0;j<ny;j++)
  187. {
  188. rNew[i][j]=pow(rOrg[i][j],gamma);
  189. gNew[i][j]=pow(gOrg[i][j],gamma);
  190. bNew[i][j]=pow(bOrg[i][j],gamma);
  191. }
  192.  
  193. gamma-=1.0;
  194. cout<<"gamma = "<<gamma<<endl;
  195. }
  196. break;
  197. case '2':
  198. for(int i=0;i<nx;i++)
  199. for(int j=0;j<ny;j++)
  200. {
  201. rNew[i][j]-=0.1;
  202. gNew[i][j]-=0.1;
  203. bNew[i][j]-=0.1;
  204. // if(rNew[i][j]<0)rNew[i][j] = 0;
  205. // if(gNew[i][j]<0)gNew[i][j] = 0;
  206. // if(bNew[i][j]<0)bNew[i][j] = 0;
  207. }
  208. break;
  209. case '3':
  210. {
  211.  
  212.  
  213. double sumaWg = mUs[0][0]+mUs[0][1]+mUs[0][2]+
  214. mUs[1][0]+mUs[1][1]+mUs[1][2]+
  215. mUs[2][0]+mUs[2][1]+mUs[2][2];
  216. cout<<sumaWg;
  217. if (sumaWg==0)sumaWg=1;
  218.  
  219. for(int i=1;i<nx-1;i++)
  220. for(int j=1;j<ny-1;j++)
  221. {
  222.  
  223. rNew[i][j]=(mUs[0][0]*rOrg[i-1][j-1]+
  224. mUs[0][1]*rOrg[i-1][j ]+
  225. mUs[0][2]*rOrg[i-1][j+1]+
  226. mUs[1][0]*rOrg[i ][j-1]+
  227. mUs[1][1]*rOrg[i ][j ]+
  228. mUs[1][2]*rOrg[i ][j+1]+
  229. mUs[2][0]*rOrg[i+1][j-1]+
  230. mUs[2][1]*rOrg[i+1][j ]+
  231. mUs[2][2]*rOrg[i+1][j+1])/sumaWg;
  232. gNew[i][j]=(mUs[0][0]*gOrg[i-1][j-1]+
  233. mUs[0][1]*gOrg[i-1][j ]+
  234. mUs[0][2]*gOrg[i-1][j+1]+
  235. mUs[1][0]*gOrg[i ][j-1]+
  236. mUs[1][1]*gOrg[i ][j ]+
  237. mUs[1][2]*gOrg[i ][j+1]+
  238. mUs[2][0]*gOrg[i+1][j-1]+
  239. mUs[2][1]*gOrg[i+1][j ]+
  240. mUs[2][2]*gOrg[i+1][j+1])/sumaWg;
  241. bNew[i][j]=(mUs[0][0]*bOrg[i-1][j-1]+
  242. mUs[0][1]*bOrg[i-1][j ]+
  243. mUs[0][2]*bOrg[i-1][j+1]+
  244. mUs[1][0]*bOrg[i ][j-1]+
  245. mUs[1][1]*bOrg[i ][j ]+
  246. mUs[1][2]*bOrg[i ][j+1]+
  247. mUs[2][0]*bOrg[i+1][j-1]+
  248. mUs[2][1]*bOrg[i+1][j ]+
  249. mUs[2][2]*bOrg[i+1][j+1])/sumaWg;
  250.  
  251. }
  252. for(int i=0;i<nx;i++)
  253. for(int j=0;j<ny;j++)
  254. {
  255. rOrg[i][j]=rNew[i][j];
  256. gOrg[i][j]=gNew[i][j];
  257. bOrg[i][j]=bNew[i][j];
  258.  
  259. }
  260. }
  261. break;
  262.  
  263. case '+':
  264. break;
  265.  
  266. case '-':
  267. if (slices>3 && stacks>3)
  268. {
  269. slices--;
  270. stacks--;
  271. }
  272. break;
  273. }
  274.  
  275. glutPostRedisplay();
  276. }
  277.  
  278. static void idle(void)
  279. {
  280. glutPostRedisplay();
  281. }
  282.  
  283. const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
  284. const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  285. const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  286. const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
  287.  
  288. const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
  289. const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
  290. const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  291. const GLfloat high_shininess[] = { 100.0f };
  292.  
  293. /* Program entry point */
  294.  
  295. int main(int argc, char *argv[])
  296. {
  297. czytanie("c:\\tmp\\zd5.txt");
  298. glutInit(&argc, argv);
  299. glutInitWindowSize(ny,nx);
  300. glutInitWindowPosition(10,10);
  301. glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  302.  
  303. glutCreateWindow("GLUT Shapes");
  304.  
  305. glutReshapeFunc(resize);
  306. glutDisplayFunc(display);
  307. glutKeyboardFunc(key);
  308. glutIdleFunc(idle);
  309.  
  310. glClearColor(1,1,1,1);
  311. glEnable(GL_CULL_FACE);
  312. glCullFace(GL_BACK);
  313.  
  314. glEnable(GL_DEPTH_TEST);
  315. glDepthFunc(GL_LESS);
  316.  
  317. glEnable(GL_LIGHT0);
  318. glEnable(GL_NORMALIZE);
  319. glEnable(GL_COLOR_MATERIAL);
  320. glEnable(GL_LIGHTING);
  321.  
  322. glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
  323. glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  324. glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
  325. glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  326.  
  327. glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  328. glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  329. glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  330. glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
  331.  
  332. glutMainLoop();
  333.  
  334. return EXIT_SUCCESS;
  335. }
  336.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement