Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.60 KB | None | 0 0
  1. #include <windows.h>
  2. #include <gl/gl.h>
  3. #include <gl/glut.h>
  4. #include <cmath>
  5. #include <iostream>
  6. #include <fstream>
  7.  
  8. typedef float point3[3];
  9. static GLfloat viewer[] = { 0.0, 0.0, 0.0 };
  10. GLfloat theta = 0.0;
  11. GLfloat phi = 0.0;
  12. GLfloat R = 10.0;
  13. static GLfloat pix2angle;
  14. static GLint status = 0;
  15. static int x_pos_old = 0;
  16. static int y_pos_old = 0;
  17. static int z_pos_old = 0;
  18. float fix = 1.0;
  19.  
  20. #define M_PI 3.14159265358979323846
  21. typedef float point3[3];
  22.  
  23. using namespace std;
  24.  
  25. static int delta_x = 0;
  26. static int delta_y = 0;
  27. static int delta_z = 0;
  28.  
  29. void Mouse(int btn, int state, int x, int y)
  30. {
  31. if (btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
  32. {
  33. x_pos_old = x;
  34. y_pos_old = y;
  35. status = 1;
  36. }
  37. else if (btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
  38. y_pos_old = y;
  39. status = 2;
  40. }
  41. else
  42. status = 0;
  43. }
  44.  
  45. void Motion(GLsizei x, GLsizei y)
  46. {
  47. delta_x = x - x_pos_old;
  48. delta_y = y - y_pos_old;
  49. x_pos_old = x;
  50. y_pos_old = y;
  51. glutPostRedisplay();
  52. }
  53.  
  54. GLbyte *LoadTGAImage(const char *FileName, GLint *ImWidth, GLint *ImHeight, GLint *ImComponents, GLenum *ImFormat)
  55. {
  56. #pragma pack(1)
  57. typedef struct
  58. {
  59. GLbyte idlength;
  60. GLbyte colormaptype;
  61. GLbyte datatypecode;
  62. unsigned short colormapstart;
  63. unsigned short colormaplength;
  64. unsigned char colormapdepth;
  65. unsigned short x_orgin;
  66. unsigned short y_orgin;
  67. unsigned short width;
  68. unsigned short height;
  69. GLbyte bitsperpixel;
  70. GLbyte descriptor;
  71. }TGAHEADER;
  72. #pragma pack(8)
  73.  
  74.  
  75. FILE *pFile;
  76. TGAHEADER tgaHeader;
  77. unsigned long lImageSize;
  78. short sDepth;
  79. GLbyte *pbitsperpixel = NULL;
  80. *ImWidth = 0;
  81. *ImHeight = 0;
  82. *ImFormat = GL_BGR_EXT;
  83. *ImComponents = GL_RGB8;
  84. fopen_s(&pFile, FileName, "rb");
  85. if (pFile == NULL)
  86. return NULL;
  87. fread(&tgaHeader, sizeof(TGAHEADER), 1, pFile);
  88. *ImWidth = tgaHeader.width;
  89. *ImHeight = tgaHeader.height;
  90. sDepth = tgaHeader.bitsperpixel / 8;
  91. if (tgaHeader.bitsperpixel != 8 && tgaHeader.bitsperpixel != 24 && tgaHeader.bitsperpixel != 32)
  92. return NULL;
  93. lImageSize = tgaHeader.width * tgaHeader.height * sDepth;
  94. pbitsperpixel = (GLbyte*)malloc(lImageSize * sizeof(GLbyte));
  95. if (pbitsperpixel == NULL)
  96. return NULL;
  97. if (fread(pbitsperpixel, lImageSize, 1, pFile) != 1)
  98. {
  99. free(pbitsperpixel);
  100. return NULL;
  101. }
  102. switch (sDepth)
  103. {
  104. case 3:
  105. *ImFormat = GL_BGR_EXT;
  106. *ImComponents = GL_RGB8;
  107. break;
  108. case 4:
  109. *ImFormat = GL_BGRA_EXT;
  110. *ImComponents = GL_RGBA8;
  111. break;
  112. case 1:
  113. *ImFormat = GL_LUMINANCE;
  114. *ImComponents = GL_LUMINANCE8;
  115. break;
  116. };
  117. fclose(pFile);
  118. return pbitsperpixel;
  119. }
  120.  
  121. void Axes(void)
  122. {
  123. point3 x_min = { -5.0, 0.0, 0.0 };
  124. point3 x_max = { 5.0, 0.0, 0.0 };
  125. point3 y_min = { 0.0, -5.0, 0.0 };
  126. point3 y_max = { 0.0, 5.0, 0.0 };
  127. point3 z_min = { 0.0, 0.0, -5.0 };
  128. point3 z_max = { 0.0, 0.0, 5.0 };
  129. glColor3f(1.0f, 0.0f, 0.0f);
  130. glBegin(GL_LINES);
  131. glVertex3fv(x_min);
  132. glVertex3fv(x_max);
  133. glEnd();
  134. glColor3f(0.0f, 1.0f, 0.0f);
  135. glBegin(GL_LINES);
  136. glVertex3fv(y_min);
  137. glVertex3fv(y_max);
  138. glEnd();
  139.  
  140. glColor3f(0.0f, 0.0f, 1.0f);
  141. glBegin(GL_LINES);
  142. glVertex3fv(z_min);
  143. glVertex3fv(z_max);
  144. glEnd();
  145. }
  146.  
  147. float wyliczX(float u, float v) {
  148. float PIV = M_PI * v;
  149. return ((-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u) * cos(PIV));
  150. }
  151. float wyliczY(float u, float v) {
  152. return (160 * pow(u, 4) - 320 * pow(u, 3) + 160 * pow(u, 2));
  153. }
  154. float wyliczZ(float u, float v) {
  155. float PIV = M_PI * v;
  156. return ((-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u) * sin(PIV));
  157. }
  158. float wyliczXu(float u, float v) {
  159. float PIV = M_PI * v;
  160. return (-450 * pow(u, 4) + 900 * pow(u, 3) - 810 * pow(u, 2) + 360 * u - 45) * cos(PIV);
  161. }
  162. float wyliczXv(float u, float v) {
  163. float PIV = M_PI * v;
  164. return M_PI * (90 * pow(u, 5) - 225 * pow(u, 4) + 270 * pow(u, 3) - 180 * pow(u, 2) + 45 * u) * sin(PIV);
  165. }
  166. float wyliczYu(float u, float v) {
  167. return (640 * pow(u, 3) - 960 * pow(u, 2) + 320 * u);
  168. }
  169. float wyliczYv(float u, float v) {
  170. return 0;
  171. }
  172. float wyliczZu(float u, float v) {
  173. float PIV = M_PI * v;
  174. return (-450 * pow(u, 4) + 900 * pow(u, 3) - 810 * pow(u, 2) + 360 * u - 45) * sin(PIV);
  175. }
  176. float wyliczZv(float u, float v) {
  177. float PIV = M_PI * v;
  178. return -M_PI * (90 * pow(u, 5) - 225 * pow(u, 4) + 270 * pow(u, 3) - 180 * pow(u, 2) + 45 * u) * cos(PIV);
  179. }
  180. float dlugoscWektora(float xv, float yv, float zv) {
  181. return sqrt(pow(xv, 2) + pow(yv, 2) + pow(zv, 2));
  182. }
  183.  
  184. struct Punkt {
  185. float x;
  186. float y;
  187. float z;
  188. float xRGB;
  189. float yRGB;
  190. float zRGB;
  191. float xV;
  192. float yV;
  193. float zV;
  194. float i;
  195. float j;
  196. };
  197.  
  198.  
  199. /********************************OBSŁUGA********************************/
  200. // 1- punkty, 2- siatka, 3 - wypełnione trójkąty, 4 - czjniczek
  201. int model = 3;
  202. int ruch = 1;
  203. float KAT = 90.0;
  204.  
  205. // Ilosc podzialow boku kwadratu jednostkowego
  206. const int N = 250;
  207. // Obrot
  208. static GLfloat obrot[] = { 0.0, 0.0, 0.0 };
  209. // Tablica sluzaca do zapisywania punktow
  210. struct Punkt punktyJaja[N][N];
  211.  
  212. float krok = 1.0 / N;
  213.  
  214. float x_swiatla = 0;
  215. float y_swiatla = 0;
  216. float x_swiatla2 = 0;
  217. float y_swiatla2 = 0;
  218.  
  219. /********************************KONIEC********************************/
  220.  
  221. void nic() {
  222. // Liczenie Punktow
  223. for (int i = 0; i < N; i++) {
  224. for (int j = 0; j < N; j++) {
  225. punktyJaja[i][j].x = wyliczX(i * krok, j * krok);
  226. punktyJaja[i][j].y = wyliczY(i * krok, j * krok);
  227. punktyJaja[i][j].z = wyliczZ(i * krok, j * krok);
  228. //Kolorki
  229. punktyJaja[i][j].xRGB = ((double)rand() / (RAND_MAX));
  230. punktyJaja[i][j].yRGB = ((double)rand() / (RAND_MAX));
  231. punktyJaja[i][j].zRGB = ((double)rand() / (RAND_MAX));
  232.  
  233. float xU = wyliczXu(i * krok, j * krok);
  234. float xV = wyliczXv(i * krok, j * krok);
  235. float yU = wyliczYu(i * krok, j * krok);
  236. float yV = wyliczYv(i * krok, j * krok);
  237. float zU = wyliczZu(i * krok, j * krok);
  238. float zV = wyliczZv(i * krok, j * krok);
  239. float xVector = (yU * zV - zU * yV);
  240. float yVector = (zU * xV - xU * zV);
  241. float zVector = (xU * yV - yU * xV);
  242. float dl = dlugoscWektora(xVector, yVector, zVector);
  243. punktyJaja[i][j].xV = xVector / dl;
  244. punktyJaja[i][j].yV = yVector / dl;
  245. punktyJaja[i][j].zV = zVector / dl;
  246. punktyJaja[i][j].i = i * krok;
  247. punktyJaja[i][j].j = j * krok;
  248. }
  249. }
  250. }
  251.  
  252. void Jajo() {
  253. nic();
  254. // Punkty
  255. if (model == 1) {
  256. for (int i = 0; i < N; i++) {
  257. for (int j = 0; j < N; j++) {
  258. glBegin(GL_POINTS);
  259. glColor3f(1.0f, 0.0f, 0.0f);
  260. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  261. glEnd();
  262. }
  263. }
  264. }
  265. // Linie
  266. else if (model == 2) {
  267. glBegin(GL_LINES);
  268. glColor3f(1.0f, 1.0f, 1.0f);
  269. //Poziome Linie
  270. for (int i = 0; i < N; i++) {
  271. int pom = N - i;
  272. for (int j = 0; j < N - 1; j++) {
  273. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  274. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  275. }
  276. // Problem z nie rysowaniem łączeń w okregu
  277. if (pom != N) {
  278. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  279. glVertex3f(punktyJaja[pom][N - 1].x, punktyJaja[pom][N - 1].y - 5, punktyJaja[pom][N - 1].z);
  280. }
  281. }
  282.  
  283. //Poionowe Linie
  284. glColor3f(1.0f, 1.0f, 0.0f);
  285. for (int i = 0; i < N; i++) {
  286. int pom = N - i;
  287. for (int j = 0; j < N; j++) {
  288. // Problem w nierysowaniu łączenia z punktem [0][0]
  289. if (i == N - 1) {
  290. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  291. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  292. }
  293. else {
  294. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  295. glVertex3f(punktyJaja[i + 1][j].x, punktyJaja[i + 1][j].y - 5, punktyJaja[i + 1][j].z);
  296. }
  297. }
  298. }
  299.  
  300. //Skośne Linie
  301. glColor3f(0.294f, 0.0f, 0.510f);
  302. for (int i = N / 2; i < N; i++) {
  303. int pom = N - i;
  304. for (int j = 0; j < N - 1; j++) {
  305. if (i == N - 1) {
  306. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  307. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  308. }
  309. else {
  310. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  311. glVertex3f(punktyJaja[i + 1][j + 1].x, punktyJaja[i + 1][j + 1].y - 5, punktyJaja[i + 1][j + 1].z);
  312. }
  313. if (pom != N) {
  314. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  315. glVertex3f(punktyJaja[pom + 1][N - 1].x, punktyJaja[pom + 1][N - 1].y - 5, punktyJaja[pom + 1][N - 1].z);
  316. }
  317. }
  318. }
  319. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  320. glVertex3f(punktyJaja[1][N - 1].x, punktyJaja[1][N - 1].y - 5, punktyJaja[1][N - 1].z);
  321.  
  322. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  323. glVertex3f(punktyJaja[N - 1][N - 1].x, punktyJaja[N - 1][N - 1].y - 5, punktyJaja[N - 1][N - 1].z);
  324. for (int i = 1; i < N / 2 + 1; i++) {
  325. int pom = N - i;
  326. for (int j = 0; j < N - 1; j++) {
  327. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  328. glVertex3f(punktyJaja[i - 1][j + 1].x, punktyJaja[i - 1][j + 1].y - 5, punktyJaja[i - 1][j + 1].z);
  329. if (pom != N) {
  330. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  331. glVertex3f(punktyJaja[pom - 1][N - 1].x, punktyJaja[pom - 1][N - 1].y - 5, punktyJaja[pom - 1][N - 1].z);
  332. }
  333. }
  334. }
  335.  
  336. glEnd();
  337. }
  338. // Kolorki
  339. else if (model == 3) {
  340. glBegin(GL_TRIANGLES);
  341. for (int i = N / 2; i < N; i++) {
  342. int pom = N - i;
  343. for (int j = 0; j < N - 1; j++) {
  344. if (i == N - 1) {
  345. glNormal3f(-punktyJaja[i][j].xV, -punktyJaja[i][j].yV, -punktyJaja[i][j].zV);
  346. glTexCoord2f(-punktyJaja[i][j].i, -punktyJaja[i][j].j);
  347. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  348. glNormal3f(-punktyJaja[i][j + 1].xV, -punktyJaja[i][j + 1].yV, -punktyJaja[i][j + 1].zV);
  349. glTexCoord2f(-punktyJaja[i][j + 1].i, -punktyJaja[i][j + 1].j);
  350. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  351. glNormal3f(-punktyJaja[0][0].xV, -punktyJaja[0][0].yV, -punktyJaja[0][0].zV);
  352. glTexCoord2f(-punktyJaja[0][0].i, -punktyJaja[0][0].j);
  353. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  354. }
  355. else {
  356. glNormal3f(-punktyJaja[i][j].xV, -punktyJaja[i][j].yV, -punktyJaja[i][j].zV);
  357. glTexCoord2f(-punktyJaja[i][j].i, -punktyJaja[i][j].j);
  358. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  359. glNormal3f(-punktyJaja[i + 1][j].xV, -punktyJaja[i + 1][j].yV, -punktyJaja[i + 1][j].zV);
  360. glTexCoord2f(-punktyJaja[i + 1][j].i, -punktyJaja[ i+ 1][j].j);
  361. glVertex3f(punktyJaja[i + 1][j].x, punktyJaja[i + 1][j].y - 5, punktyJaja[i + 1][j].z);
  362. glNormal3f(-punktyJaja[i + 1][j + 1].xV, -punktyJaja[i + 1][j + 1].yV, -punktyJaja[i + 1][j + 1].zV);
  363. glTexCoord2f(-punktyJaja[i + 1][j].i, -punktyJaja[i + 1][j].j);
  364. glVertex3f(punktyJaja[i + 1][j + 1].x, punktyJaja[i + 1][j + 1].y - 5, punktyJaja[i + 1][j + 1].z);
  365.  
  366. glNormal3f(-punktyJaja[i][j].xV, -punktyJaja[i][j].yV, -punktyJaja[i][j].zV);
  367. glTexCoord2f(-punktyJaja[i][j].i, -punktyJaja[i][j].j);
  368. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  369. glNormal3f(-punktyJaja[i][j + 1].xV, -punktyJaja[i][j + 1].yV, -punktyJaja[i][j + 1].zV);
  370. glTexCoord2f(-punktyJaja[i][j + 1].i, -punktyJaja[i][j + 1].j);
  371. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  372. glNormal3f(-punktyJaja[i + 1][j + 1].xV, -punktyJaja[i + 1][j + 1].yV, -punktyJaja[i + 1][j + 1].zV);
  373. glTexCoord2f(-punktyJaja[i + 1][j + 1].i, -punktyJaja[i + 1][j + 1].j);
  374. glVertex3f(punktyJaja[i + 1][j + 1].x, punktyJaja[i + 1][j + 1].y - 5, punktyJaja[i + 1][j + 1].z);
  375. }
  376. if (pom != N) {
  377. glNormal3f(-punktyJaja[i][0].xV, -punktyJaja[i][0].yV, -punktyJaja[i][0].zV);
  378. glTexCoord2f(-punktyJaja[i][0].i, -punktyJaja[i][0].j);
  379. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  380. glNormal3f(punktyJaja[pom][N - 1].xV, punktyJaja[pom][N - 1].yV, punktyJaja[pom][N - 1].zV);
  381. glTexCoord2f(punktyJaja[pom][N - 1].i, punktyJaja[pom][N - 1].j);
  382. glVertex3f(punktyJaja[pom][N - 1].x, punktyJaja[pom][N - 1].y - 5, punktyJaja[pom][N - 1].z);
  383. glNormal3f(punktyJaja[pom + 1][N - 1].xV, punktyJaja[pom + 1][N - 1].yV, punktyJaja[pom + 1][N - 1].zV);
  384. glTexCoord2f(punktyJaja[pom + 1][N - 1].i, punktyJaja[pom + 1][N - 1].j);
  385. glVertex3f(punktyJaja[pom + 1][N - 1].x, punktyJaja[pom + 1][N - 1].y - 5, punktyJaja[pom + 1][N - 1].z);
  386.  
  387. if (i != N / 2) {
  388. glNormal3f(-punktyJaja[i][0].xV, -punktyJaja[i][0].yV, -punktyJaja[i][0].zV);
  389. glTexCoord2f(-punktyJaja[i][0].i, -punktyJaja[i][0].j);
  390. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  391. glNormal3f(-punktyJaja[i - 1][0].xV, -punktyJaja[i - 1][0].yV, -punktyJaja[i - 1][0].zV);
  392. glTexCoord2f(-punktyJaja[i - 1][0].i, -punktyJaja[i - 1][0].j);
  393. glVertex3f(punktyJaja[i - 1][0].x, punktyJaja[i - 1][0].y - 5, punktyJaja[i - 1][0].z);
  394. glNormal3f(punktyJaja[pom + 1][N - 1].xV, punktyJaja[pom + 1][N - 1].yV, punktyJaja[pom + 1][N - 1].zV);
  395. glTexCoord2f(punktyJaja[pom + 1][N - 1].i, punktyJaja[pom + 1][N - 1].j);
  396. glVertex3f(punktyJaja[pom + 1][N - 1].x, punktyJaja[pom + 1][N - 1].y - 5, punktyJaja[pom + 1][N - 1].z);
  397. }
  398. }
  399. }
  400. }
  401. glNormal3f(-punktyJaja[0][0].xV, -punktyJaja[0][0].yV, -punktyJaja[0][0].zV);
  402. glTexCoord2f(-punktyJaja[0][0].i, -punktyJaja[0][0].j);
  403. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  404. glNormal3f(-punktyJaja[N - 1][0].xV, -punktyJaja[N - 1][0].yV, -punktyJaja[N - 1][0].zV);
  405. glTexCoord2f(-punktyJaja[N - 1][0].i,- punktyJaja[N - 1][0].j);
  406. glVertex3f(punktyJaja[N - 1][0].x, punktyJaja[N - 1][0].y - 5, punktyJaja[N - 1][0].z);
  407. glNormal3f(punktyJaja[1][N - 1].xV, punktyJaja[1][N - 1].yV, punktyJaja[1][N - 1].zV);
  408. glTexCoord2f(punktyJaja[1][N - 1].i, punktyJaja[1][N - 1].j);
  409. glVertex3f(punktyJaja[1][N - 1].x, punktyJaja[1][N - 1].y - 5, punktyJaja[1][N - 1].z);
  410.  
  411. glNormal3f(punktyJaja[0][0].xV, punktyJaja[0][0].yV, punktyJaja[0][0].zV);
  412. glTexCoord2f(punktyJaja[0][0].i, punktyJaja[0][0].j);
  413. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  414. glNormal3f(punktyJaja[1][0].xV, punktyJaja[1][0].yV, punktyJaja[1][0].zV);
  415. glTexCoord2f(punktyJaja[1][0].i, punktyJaja[1][0].j);
  416. glVertex3f(punktyJaja[1][0].x, punktyJaja[1][0].y - 5, punktyJaja[1][0].z);
  417. glNormal3f(-punktyJaja[N - 1][N - 1].xV, -punktyJaja[N - 1][N - 1].yV, -punktyJaja[N - 1][N - 1].zV);
  418. glTexCoord2f(-punktyJaja[N - 1][N - 1].i, -punktyJaja[N - 1][N - 1].j);
  419. glVertex3f(punktyJaja[N - 1][N - 1].x, punktyJaja[N - 1][N - 1].y - 5, punktyJaja[N - 1][N - 1].z);
  420.  
  421. for (int i = 0; i < N/ 2 + 1; i++) {
  422. int pom = N - i;
  423. for (int j = 0; j < N - 1; j++) {
  424. if (i == 1) {
  425. glNormal3f(punktyJaja[i][j].xV, punktyJaja[i][j].yV, punktyJaja[i][j].zV);
  426. glTexCoord2f(punktyJaja[i][j].i, punktyJaja[i][j].j);
  427. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  428. glNormal3f(punktyJaja[i][j + 1].xV, punktyJaja[i][j + 1].yV, punktyJaja[i][j + 1].zV);
  429. glTexCoord2f(punktyJaja[i][j + 1].i, punktyJaja[i][j + 1].j);
  430. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  431. glNormal3f(punktyJaja[0][0].xV, punktyJaja[0][0].yV, punktyJaja[0][0].zV);
  432. glTexCoord2f(punktyJaja[0][0].i, punktyJaja[0][0].j);
  433. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  434. }
  435. else {
  436. if (i != 0) {
  437. glNormal3f(punktyJaja[i][j].xV, punktyJaja[i][j].yV, punktyJaja[i][j].zV);
  438. glTexCoord2f(punktyJaja[i][j].i, punktyJaja[i][j].j);
  439. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  440. glNormal3f(punktyJaja[i - 1][j].xV, punktyJaja[i - 1][j].yV, punktyJaja[i - 1][j].zV);
  441. glTexCoord2f(punktyJaja[i - 1][j].i, punktyJaja[i - 1][j].j);
  442. glVertex3f(punktyJaja[i - 1][j].x, punktyJaja[i - 1][j].y - 5, punktyJaja[i - 1][j].z);
  443. glNormal3f(punktyJaja[i - 1][j + 1].xV, punktyJaja[i - 1][j + 1].yV, punktyJaja[i - 1][j + 1].zV);
  444. glTexCoord2f(punktyJaja[i - 1][j + 1].i, punktyJaja[i - 1][j + 1].j);
  445. glVertex3f(punktyJaja[i - 1][j + 1].x, punktyJaja[i - 1][j + 1].y - 5, punktyJaja[i - 1][j + 1].z);
  446. }
  447. glNormal3f(punktyJaja[i][j].xV, punktyJaja[i][j].yV, punktyJaja[i][j].zV);
  448. glTexCoord2f(punktyJaja[i][j].i, punktyJaja[i][j].j);
  449. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  450. glNormal3f(punktyJaja[i][j + 1].xV, punktyJaja[i][j + 1].yV, punktyJaja[i][j + 1].zV);
  451. glTexCoord2f(punktyJaja[i][j + 1].i, punktyJaja[i][j + 1].j);
  452. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  453. glNormal3f(punktyJaja[i - 1][j + 1].xV, punktyJaja[i - 1][j + 1].yV, punktyJaja[i - 1][j + 1].zV);
  454. glTexCoord2f(punktyJaja[i - 1][j + 1].i, punktyJaja[i - 1][j + 1].j);
  455. glVertex3f(punktyJaja[i - 1][j + 1].x, punktyJaja[i - 1][j + 1].y - 5, punktyJaja[i - 1][j + 1].z);
  456. }
  457. if (pom != N) {
  458. glNormal3f(punktyJaja[i][0].xV, punktyJaja[i][0].yV, punktyJaja[i][0].zV);
  459. glTexCoord2f(punktyJaja[i][0].i, punktyJaja[i][0].j);
  460. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  461. glNormal3f(-punktyJaja[pom][N - 1].xV, -punktyJaja[pom][N - 1].yV, -punktyJaja[pom][N - 1].zV);
  462. glTexCoord2f(-punktyJaja[pom][N - 1].i, -punktyJaja[pom][N - 1].j);
  463. glVertex3f(punktyJaja[pom][N - 1].x, punktyJaja[pom][N - 1].y - 5, punktyJaja[pom][N - 1].z);
  464. glNormal3f(-punktyJaja[pom - 1][N - 1].xV, -punktyJaja[pom - 1][N - 1].yV, -punktyJaja[pom - 1][N - 1].zV);
  465. glTexCoord2f(-punktyJaja[pom - 1][N - 1].i, -punktyJaja[pom - 1][N - 1].j);
  466. glVertex3f(punktyJaja[pom - 1][N - 1].x, punktyJaja[pom - 1][N - 1].y - 5, punktyJaja[pom - 1][N - 1].z);
  467. glNormal3f(punktyJaja[i][0].xV, punktyJaja[i][0].yV, punktyJaja[i][0].zV);
  468. glTexCoord2f(punktyJaja[i][0].i, punktyJaja[i][0].j);
  469. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  470. glNormal3f(punktyJaja[i + 1][0].xV, punktyJaja[i + 1][0].yV, punktyJaja[i + 1][0].zV);
  471. glTexCoord2f(punktyJaja[i + 1][0].i, punktyJaja[i + 1][0].j);
  472. glVertex3f(punktyJaja[i + 1][0].x, punktyJaja[i + 1][0].y - 5, punktyJaja[i + 1][0].z);
  473. glNormal3f(-punktyJaja[pom - 1][N - 1].xV, -punktyJaja[pom - 1][N - 1].yV, -punktyJaja[pom - 1][N - 1].zV);
  474. glTexCoord2f(-punktyJaja[pom - 1][N - 1].i, -punktyJaja[pom - 1][N - 1].j);
  475. glVertex3f(punktyJaja[pom - 1][N - 1].x, punktyJaja[pom - 1][N - 1].y - 5, punktyJaja[pom - 1][N - 1].z);
  476. }
  477. }
  478. }
  479. glEnd();
  480. }
  481. else if (model == 4) {
  482. glutSolidTeapot(3.0); // Narysowanie obrazu czajnika do herbaty
  483. }
  484. }
  485.  
  486. void RenderScene(void)
  487. {
  488. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  489. glLoadIdentity();
  490. if (status == 1) {
  491. theta += delta_x*pix2angle / 20.0;
  492. phi += delta_y*pix2angle / 20.;
  493. if (phi>2 * M_PI)
  494. phi = 0;
  495. if (phi<0)
  496. phi = 2 * M_PI;
  497. if (phi>M_PI / 2)
  498. fix = -1.0;
  499. else
  500. fix = 1.0;
  501. if (phi>M_PI + (M_PI / 2))
  502. fix = 1.0;
  503. }
  504. else if (status == 2)
  505. {
  506. R += delta_y*pix2angle / 20.0;
  507. }
  508. viewer[0] = R * cos(theta) * cos(phi);
  509. viewer[1] = R * sin(phi);
  510. viewer[2] = R * sin(theta) * cos(phi);
  511. if (R > 18.00) {
  512. R = 9.00;
  513. }
  514. if (R < 0.50) {
  515. R = 9.00;
  516. }
  517. gluLookAt(viewer[0], viewer[1], viewer[2], 0.0, 0.0, 0.0, 0.0, fix, 0.0);
  518.  
  519. glColor3f(1.0f, 1.0f, 1.0f);
  520. Axes();
  521. Jajo();
  522. glFlush();
  523. glutSwapBuffers();
  524. }
  525.  
  526. void MyInit(void)
  527. {
  528. GLbyte *pBytes;
  529. GLint ImWidth, ImHeight, ImComponents;
  530. GLenum ImFormat;
  531. glColor3f(1.0f, 0.0f, 0.0f);
  532. GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 };
  533. GLfloat mat_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  534. GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
  535. GLfloat mat_shininess = { 50.0 };
  536. GLfloat light_position[] = { 0.0, 0.0, 10.0, 1.0 };
  537. GLfloat light_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
  538. GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  539. GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
  540. GLfloat att_constant = 1.0;
  541. GLfloat att_linear = 0.05;
  542. GLfloat att_quadratic = 0.001;
  543. glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  544. glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  545. glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  546. glMaterialf(GL_FRONT, GL_SHININESS, mat_shininess);
  547. glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
  548. glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  549. glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
  550. glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  551. glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, att_constant);
  552. glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, att_linear);
  553. glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, att_quadratic);
  554. glShadeModel(GL_SMOOTH);
  555. glEnable(GL_LIGHTING);
  556. glEnable(GL_LIGHT0);
  557. glEnable(GL_DEPTH_TEST);
  558. nic();
  559. //glEnable(GL_CULL_FACE);
  560. pBytes = LoadTGAImage("mojapisanka3.tga", &ImWidth, &ImHeight, &ImComponents, &ImFormat);
  561. glTexImage2D(GL_TEXTURE_2D, 0, ImComponents, ImWidth, ImHeight, 0, ImFormat, GL_UNSIGNED_BYTE, pBytes);
  562. free(pBytes);
  563. glEnable(GL_TEXTURE_2D);
  564. glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  565. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  566. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  567. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  568. }
  569.  
  570. void keys(unsigned char key, int x, int y)
  571. {
  572. if (key == 'q') model = 1;
  573. if (key == 'w') model = 2;
  574. if (key == 'e') model = 3;
  575. if (key == 'r') model = 4;
  576.  
  577. RenderScene();
  578. }
  579.  
  580. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  581. {
  582. pix2angle = 360.0 / (float)horizontal;
  583. glMatrixMode(GL_PROJECTION);
  584. glLoadIdentity();
  585. gluPerspective(70, 1.0, 1.0, 30.0);
  586. if (horizontal <= vertical)
  587. glViewport(0, (vertical - horizontal) / 2, horizontal, horizontal);
  588.  
  589. else
  590. glViewport((horizontal - vertical) / 2, 0, vertical, vertical);
  591. glMatrixMode(GL_MODELVIEW);
  592. glLoadIdentity();
  593. }
  594.  
  595. void main(void)
  596. {
  597. int foo = 1;
  598. char * bar[1] = { " " };
  599. glutInit(&foo, bar);
  600. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  601. glutInitWindowSize(1000, 1000);
  602. glutCreateWindow("OpenGL - teksturowanie powierzchni obiektów");
  603. glutDisplayFunc(RenderScene);
  604. glutReshapeFunc(ChangeSize);
  605. MyInit();
  606. glEnable(GL_DEPTH_TEST);
  607. glutKeyboardFunc(keys);
  608. glutMouseFunc(Mouse);
  609. glutMotionFunc(Motion);
  610. glutMainLoop();
  611. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement