Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.19 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.  
  7. typedef float point3[3];
  8. static GLfloat viewer[] = { 0.0, 0.0, 10.0 };
  9. GLfloat theta = 0.0;
  10. GLfloat phi = 0.0;
  11. GLfloat R = 10.0;
  12. static GLfloat pix2angle;
  13. static GLint status = 0;
  14. static GLint statusShift = 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 Axes(void)
  30. {
  31. point3 x_min = { -5.0, 0.0, 0.0 };
  32. point3 x_max = { 5.0, 0.0, 0.0 };
  33. point3 y_min = { 0.0, -5.0, 0.0 };
  34. point3 y_max = { 0.0, 5.0, 0.0 };
  35. point3 z_min = { 0.0, 0.0, -5.0 };
  36. point3 z_max = { 0.0, 0.0, 5.0 };
  37. glColor3f(1.0f, 0.0f, 0.0f);
  38. glBegin(GL_LINES);
  39. glVertex3fv(x_min);
  40. glVertex3fv(x_max);
  41. glEnd();
  42. glColor3f(0.0f, 1.0f, 0.0f);
  43. glBegin(GL_LINES);
  44. glVertex3fv(y_min);
  45. glVertex3fv(y_max);
  46. glEnd();
  47. glColor3f(0.0f, 0.0f, 1.0f);
  48. glBegin(GL_LINES);
  49. glVertex3fv(z_min);
  50. glVertex3fv(z_max);
  51. glEnd();
  52. }
  53.  
  54. void Mouse(int btn, int state, int x, int y)
  55. {
  56. if (btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
  57. {
  58. x_pos_old = x;
  59. y_pos_old = y;
  60. if (statusShift == 1) {
  61. status = 3;
  62. }
  63. else {
  64. status = 1;
  65. }
  66. }
  67. else if (btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
  68. y_pos_old = y;
  69. if (statusShift == 1) {
  70. status = 4;
  71. }
  72. else
  73. {
  74. status = 2;
  75. }
  76. }
  77. else
  78. status = 0;
  79. }
  80.  
  81. void Motion(GLsizei x, GLsizei y)
  82. {
  83. delta_x = x - x_pos_old;
  84. delta_y = y - y_pos_old;
  85. x_pos_old = x;
  86. y_pos_old = y;
  87. glutPostRedisplay();
  88. }
  89.  
  90. float wyliczX(float u, float v) {
  91. float PIV = M_PI * v;
  92. return ((-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u) * cos(PIV));
  93. }
  94. float wyliczY(float u, float v) {
  95. return (160 * pow(u, 4) - 320 * pow(u, 3) + 160 * pow(u, 2));
  96. }
  97. float wyliczZ(float u, float v) {
  98. float PIV = M_PI * v;
  99. return ((-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u) * sin(PIV));
  100. }
  101. float wyliczXu(float u, float v) {
  102. float PIV = M_PI * v;
  103. return (-450 * pow(u, 4) + 900 * pow(u, 3) - 810 * pow(u, 2) + 360 * u - 45) * cos(PIV);
  104. }
  105. float wyliczXv(float u, float v) {
  106. float PIV = M_PI * v;
  107. return M_PI * (90 * pow(u, 5) - 225 * pow(u, 4) + 270 * pow(u, 3) - 180 * pow(u, 2) + 45 * u) * sin(PIV);
  108. }
  109. float wyliczYu(float u, float v) {
  110. return (640 * pow(u, 3) - 960 * pow(u, 2) + 320 * u);
  111. }
  112. float wyliczYv(float u, float v) {
  113. return 0;
  114. }
  115. float wyliczZu(float u, float v) {
  116. float PIV = M_PI * v;
  117. return (-450 * pow(u, 4) + 900 * pow(u, 3) - 810 * pow(u, 2) + 360 * u - 45) * sin(PIV);
  118. }
  119. float wyliczZv(float u, float v) {
  120. float PIV = M_PI * v;
  121. return -M_PI * (90 * pow(u, 5) - 225 * pow(u, 4) + 270 * pow(u, 3) - 180 * pow(u, 2) + 45 * u) * cos(PIV);
  122. }
  123. float dlugoscWektora(float xv, float yv, float zv) {
  124. return sqrt(pow(xv, 2) + pow(yv, 2) + pow(zv, 2));
  125. }
  126.  
  127. struct Punkt {
  128. float x;
  129. float y;
  130. float z;
  131. float xRGB;
  132. float yRGB;
  133. float zRGB;
  134. float xV;
  135. float yV;
  136. float zV;
  137. };
  138.  
  139. /********************************OBSŁUGA********************************/
  140. // 1- punkty, 2- siatka, 3 - wypełnione trójkąty, 4 - czjniczek
  141. int model = 3;
  142. int ruch = 1;
  143. float KAT = 0.0;
  144.  
  145. // Ilosc podzialow boku kwadratu jednostkowego
  146. const int N = 90;
  147. // Obrot
  148. static GLfloat obrot[] = { 0.0, 0.0, 0.0 };
  149. // Tablica sluzaca do zapisywania punktow
  150. struct Punkt punktyJaja[N][N];
  151.  
  152. float krok = 1.0 / N;
  153.  
  154. float x_swiatla = 0;
  155. float y_swiatla = 0;
  156. float x_swiatla2 = 0;
  157. float y_swiatla2 = 0;
  158.  
  159. /********************************KONIEC********************************/
  160.  
  161. void nic() {
  162. // Liczenie Punktow
  163. for (int i = 0; i < N; i++) {
  164. for (int j = 0; j < N; j++) {
  165. punktyJaja[i][j].x = wyliczX(i * krok, j * krok);
  166. punktyJaja[i][j].y = wyliczY(i * krok, j * krok);
  167. punktyJaja[i][j].z = wyliczZ(i * krok, j * krok);
  168. //Kolorki
  169. punktyJaja[i][j].xRGB = ((double)rand() / (RAND_MAX));
  170. punktyJaja[i][j].yRGB = ((double)rand() / (RAND_MAX));
  171. punktyJaja[i][j].zRGB = ((double)rand() / (RAND_MAX));
  172.  
  173. float xU = wyliczXu(i * krok, j * krok);
  174. float xV = wyliczXv(i * krok, j * krok);
  175. float yU = wyliczYu(i * krok, j * krok);
  176. float yV = wyliczYv(i * krok, j * krok);
  177. float zU = wyliczZu(i * krok, j * krok);
  178. float zV = wyliczZv(i * krok, j * krok);
  179. float xVector = (yU * zV - zU * yV);
  180. float yVector = (zU * xV - xU * zV);
  181. float zVector = (xU * yV - yU * xV);
  182. float dl = dlugoscWektora(xVector, yVector, zVector);
  183. punktyJaja[i][j].xV = xVector / dl;
  184. punktyJaja[i][j].yV = yVector / dl;
  185. punktyJaja[i][j].zV = zVector / dl;
  186. }
  187. }
  188. }
  189.  
  190. void Jajo() {
  191. nic();
  192. // Punkty
  193. if (model == 1) {
  194. for (int i = 0; i < N; i++) {
  195. for (int j = 0; j < N; j++) {
  196. glBegin(GL_POINTS);
  197. glColor3f(1.0f, 0.0f, 0.0f);
  198. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  199. glEnd();
  200. }
  201. }
  202. }
  203. // Linie
  204. else if (model == 2) {
  205. glBegin(GL_LINES);
  206. glColor3f(1.0f, 1.0f, 1.0f);
  207. //Poziome Linie
  208. for (int i = 0; i < N; i++) {
  209. int pom = N - i;
  210. for (int j = 0; j < N - 1; j++) {
  211. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  212. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  213. }
  214. // Problem z nie rysowaniem łączeń w okregu
  215. if (pom != N) {
  216. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  217. glVertex3f(punktyJaja[pom][N - 1].x, punktyJaja[pom][N - 1].y - 5, punktyJaja[pom][N - 1].z);
  218. }
  219. }
  220.  
  221. //Poionowe Linie
  222. glColor3f(1.0f, 1.0f, 0.0f);
  223. for (int i = 0; i < N; i++) {
  224. int pom = N - i;
  225. for (int j = 0; j < N; j++) {
  226. // Problem w nierysowaniu łączenia z punktem [0][0]
  227. if (i == N - 1) {
  228. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  229. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  230. }
  231. else {
  232. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  233. glVertex3f(punktyJaja[i + 1][j].x, punktyJaja[i + 1][j].y - 5, punktyJaja[i + 1][j].z);
  234. }
  235. }
  236. }
  237.  
  238. //Skośne Linie
  239. glColor3f(0.294f, 0.0f, 0.510f);
  240. for (int i = N / 2; i < N; i++) {
  241. int pom = N - i;
  242. for (int j = 0; j < N - 1; j++) {
  243. if (i == N - 1) {
  244. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  245. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  246. }
  247. else {
  248. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  249. glVertex3f(punktyJaja[i + 1][j + 1].x, punktyJaja[i + 1][j + 1].y - 5, punktyJaja[i + 1][j + 1].z);
  250. }
  251. if (pom != N) {
  252. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  253. glVertex3f(punktyJaja[pom + 1][N - 1].x, punktyJaja[pom + 1][N - 1].y - 5, punktyJaja[pom + 1][N - 1].z);
  254. }
  255. }
  256. }
  257. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  258. glVertex3f(punktyJaja[1][N - 1].x, punktyJaja[1][N - 1].y - 5, punktyJaja[1][N - 1].z);
  259.  
  260. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  261. glVertex3f(punktyJaja[N - 1][N - 1].x, punktyJaja[N - 1][N - 1].y - 5, punktyJaja[N - 1][N - 1].z);
  262. for (int i = 1; i < N / 2 + 1; i++) {
  263. int pom = N - i;
  264. for (int j = 0; j < N - 1; j++) {
  265. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  266. glVertex3f(punktyJaja[i - 1][j + 1].x, punktyJaja[i - 1][j + 1].y - 5, punktyJaja[i - 1][j + 1].z);
  267. if (pom != N) {
  268. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  269. glVertex3f(punktyJaja[pom - 1][N - 1].x, punktyJaja[pom - 1][N - 1].y - 5, punktyJaja[pom - 1][N - 1].z);
  270. }
  271. }
  272. }
  273.  
  274. glEnd();
  275. }
  276. // Kolorki
  277. else if (model == 3) {
  278. glBegin(GL_TRIANGLES);
  279. for (int i = N / 2; i < N; i++) {
  280. int pom = N - i;
  281. for (int j = 0; j < N - 1; j++) {
  282. if (i == N - 1) {
  283. glNormal3f(-punktyJaja[i][j].xV, -punktyJaja[i][j].yV, -punktyJaja[i][j].zV);
  284. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  285. glNormal3f(-punktyJaja[i][j + 1].xV, -punktyJaja[i][j + 1].yV, -punktyJaja[i][j + 1].zV);
  286. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  287. glNormal3f(-punktyJaja[0][0].xV, -punktyJaja[0][0].yV, -punktyJaja[0][0].zV);
  288. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  289. }
  290. else {
  291. glNormal3f(-punktyJaja[i][j].xV, -punktyJaja[i][j].yV, -punktyJaja[i][j].zV);
  292. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  293. glNormal3f(-punktyJaja[i + 1][j].xV, -punktyJaja[i + 1][j].yV, -punktyJaja[i + 1][j].zV);
  294. glVertex3f(punktyJaja[i + 1][j].x, punktyJaja[i + 1][j].y - 5, punktyJaja[i + 1][j].z);
  295. glNormal3f(-punktyJaja[i + 1][j + 1].xV, -punktyJaja[i + 1][j + 1].yV, -punktyJaja[i + 1][j + 1].zV);
  296. glVertex3f(punktyJaja[i + 1][j + 1].x, punktyJaja[i + 1][j + 1].y - 5, punktyJaja[i + 1][j + 1].z);
  297.  
  298. glNormal3f(-punktyJaja[i][j].xV, -punktyJaja[i][j].yV, -punktyJaja[i][j].zV);
  299. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  300. glNormal3f(-punktyJaja[i][j + 1].xV, -punktyJaja[i][j + 1].yV, -punktyJaja[i][j + 1].zV);
  301. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  302. glNormal3f(-punktyJaja[i + 1][j + 1].xV, -punktyJaja[i + 1][j + 1].yV, -punktyJaja[i + 1][j + 1].zV);
  303. glVertex3f(punktyJaja[i + 1][j + 1].x, punktyJaja[i + 1][j + 1].y - 5, punktyJaja[i + 1][j + 1].z);
  304. }
  305. if (pom != N) {
  306. glNormal3f(-punktyJaja[i][0].xV, -punktyJaja[i][0].yV, -punktyJaja[i][0].zV);
  307. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  308. glNormal3f(punktyJaja[pom][N - 1].xV, punktyJaja[pom][N - 1].yV, punktyJaja[pom][N - 1].zV);
  309. glVertex3f(punktyJaja[pom][N - 1].x, punktyJaja[pom][N - 1].y - 5, punktyJaja[pom][N - 1].z);
  310. glNormal3f(punktyJaja[pom + 1][N - 1].xV, punktyJaja[pom + 1][N - 1].yV, punktyJaja[pom + 1][N - 1].zV);
  311. glVertex3f(punktyJaja[pom + 1][N - 1].x, punktyJaja[pom + 1][N - 1].y - 5, punktyJaja[pom + 1][N - 1].z);
  312.  
  313. if (i != N / 2) {
  314. glNormal3f(-punktyJaja[i][0].xV, -punktyJaja[i][0].yV, -punktyJaja[i][0].zV);
  315. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  316. glNormal3f(-punktyJaja[i - 1][0].xV, -punktyJaja[i - 1][0].yV, -punktyJaja[i - 1][0].zV);
  317. glVertex3f(punktyJaja[i - 1][0].x, punktyJaja[i - 1][0].y - 5, punktyJaja[i - 1][0].z);
  318. glNormal3f(punktyJaja[pom + 1][N - 1].xV, punktyJaja[pom + 1][N - 1].yV, punktyJaja[pom + 1][N - 1].zV);
  319. glVertex3f(punktyJaja[pom + 1][N - 1].x, punktyJaja[pom + 1][N - 1].y - 5, punktyJaja[pom + 1][N - 1].z);
  320. }
  321. }
  322. }
  323. }
  324. glNormal3f(-punktyJaja[0][0].xV, -punktyJaja[0][0].yV, -punktyJaja[0][0].zV);
  325. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  326. glNormal3f(-punktyJaja[N - 1][0].xV, -punktyJaja[N - 1][0].yV, -punktyJaja[N - 1][0].zV);
  327. glVertex3f(punktyJaja[N - 1][0].x, punktyJaja[N - 1][0].y - 5, punktyJaja[N - 1][0].z);
  328. glNormal3f(punktyJaja[1][N - 1].xV, punktyJaja[1][N - 1].yV, punktyJaja[1][N - 1].zV);
  329. glVertex3f(punktyJaja[1][N - 1].x, punktyJaja[1][N - 1].y - 5, punktyJaja[1][N - 1].z);
  330.  
  331.  
  332. glNormal3f(punktyJaja[0][0].xV, punktyJaja[0][0].yV, punktyJaja[0][0].zV);
  333. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  334. glNormal3f(punktyJaja[1][0].xV, punktyJaja[1][0].yV, punktyJaja[1][0].zV);
  335. glVertex3f(punktyJaja[1][0].x, punktyJaja[1][0].y - 5, punktyJaja[1][0].z);
  336. glNormal3f(-punktyJaja[N - 1][N - 1].xV, -punktyJaja[N - 1][N - 1].yV, -punktyJaja[N - 1][N - 1].zV);
  337. glVertex3f(punktyJaja[N - 1][N - 1].x, punktyJaja[N - 1][N - 1].y - 5, punktyJaja[N - 1][N - 1].z);
  338.  
  339.  
  340. for (int i = 0; i < N / 2 + 1; i++) {
  341. int pom = N - i;
  342. for (int j = 0; j < N - 1; j++) {
  343. if (i == 1) {
  344. glNormal3f(punktyJaja[i][j].xV, punktyJaja[i][j].yV, punktyJaja[i][j].zV);
  345. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  346. glNormal3f(punktyJaja[i][j + 1].xV, punktyJaja[i][j + 1].yV, punktyJaja[i][j + 1].zV);
  347. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  348. glNormal3f(punktyJaja[0][0].xV, punktyJaja[0][0].yV, punktyJaja[0][0].zV);
  349. glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
  350. }
  351. else {
  352. if (i != 0) {
  353. glNormal3f(punktyJaja[i][j].xV, punktyJaja[i][j].yV, punktyJaja[i][j].zV);
  354. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  355. glNormal3f(punktyJaja[i - 1][j].xV, punktyJaja[i - 1][j].yV, punktyJaja[i - 1][j].zV);
  356. glVertex3f(punktyJaja[i - 1][j].x, punktyJaja[i - 1][j].y - 5, punktyJaja[i - 1][j].z);
  357. glNormal3f(punktyJaja[i - 1][j + 1].xV, punktyJaja[i - 1][j + 1].yV, punktyJaja[i - 1][j + 1].zV);
  358. glVertex3f(punktyJaja[i - 1][j + 1].x, punktyJaja[i - 1][j + 1].y - 5, punktyJaja[i - 1][j + 1].z);
  359. }
  360.  
  361.  
  362. glNormal3f(punktyJaja[i][j].xV, punktyJaja[i][j].yV, punktyJaja[i][j].zV);
  363. glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
  364. glNormal3f(punktyJaja[i][j + 1].xV, punktyJaja[i][j + 1].yV, punktyJaja[i][j + 1].zV);
  365. glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
  366. glNormal3f(punktyJaja[i - 1][j + 1].xV, punktyJaja[i - 1][j + 1].yV, punktyJaja[i - 1][j + 1].zV);
  367. glVertex3f(punktyJaja[i - 1][j + 1].x, punktyJaja[i - 1][j + 1].y - 5, punktyJaja[i - 1][j + 1].z);
  368. }
  369. if (pom != N) {
  370. glNormal3f(punktyJaja[i][0].xV, punktyJaja[i][0].yV, punktyJaja[i][0].zV);
  371. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  372. glNormal3f(-punktyJaja[pom][N - 1].xV, -punktyJaja[pom][N - 1].yV, -punktyJaja[pom][N - 1].zV);
  373. glVertex3f(punktyJaja[pom][N - 1].x, punktyJaja[pom][N - 1].y - 5, punktyJaja[pom][N - 1].z);
  374. glNormal3f(-punktyJaja[pom - 1][N - 1].xV, -punktyJaja[pom - 1][N - 1].yV, -punktyJaja[pom - 1][N - 1].zV);
  375. glVertex3f(punktyJaja[pom - 1][N - 1].x, punktyJaja[pom - 1][N - 1].y - 5, punktyJaja[pom - 1][N - 1].z);
  376.  
  377.  
  378. glNormal3f(punktyJaja[i][0].xV, punktyJaja[i][0].yV, punktyJaja[i][0].zV);
  379. glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
  380. glNormal3f(punktyJaja[i + 1][0].xV, punktyJaja[i + 1][0].yV, punktyJaja[i + 1][0].zV);
  381. glVertex3f(punktyJaja[i + 1][0].x, punktyJaja[i + 1][0].y - 5, punktyJaja[i + 1][0].z);
  382. glNormal3f(-punktyJaja[pom - 1][N - 1].xV, -punktyJaja[pom - 1][N - 1].yV, -punktyJaja[pom - 1][N - 1].zV);
  383. glVertex3f(punktyJaja[pom - 1][N - 1].x, punktyJaja[pom - 1][N - 1].y - 5, punktyJaja[pom - 1][N - 1].z);
  384. }
  385. }
  386. }
  387. glEnd();
  388. }
  389. else if (model == 4) {
  390. glutSolidTeapot(3.0); // Narysowanie obrazu czajnika do herbaty
  391. }
  392. }
  393.  
  394. void RenderScene(void)
  395. {
  396. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  397. glLoadIdentity();
  398. if (status == 1) {
  399. theta += delta_x*pix2angle / 20.0;
  400. phi += delta_y*pix2angle / 20.;
  401. if (phi>2 * M_PI)
  402. phi = 0;
  403. if (phi<0)
  404. phi = 2 * M_PI;
  405. if (phi>M_PI / 2)
  406. fix = -1.0;
  407. else
  408. fix = 1.0;
  409. if (phi>M_PI + (M_PI / 2))
  410. fix = 1.0;
  411. }
  412. else if (status == 2)
  413. {
  414. R += delta_y*pix2angle / 20.0;
  415. }
  416. else if (status == 3)
  417. {
  418. x_swiatla += delta_x*pix2angle;
  419. y_swiatla -= delta_y*pix2angle;
  420. }
  421. else if (status == 4) {
  422. x_swiatla2 += delta_x*pix2angle;
  423. y_swiatla2 -= delta_y*pix2angle;
  424. }
  425. viewer[0] = R * cos(theta) * cos(phi);
  426. viewer[1] = R * sin(phi);
  427. viewer[2] = R * sin(theta) * cos(phi);
  428. if (R > 18.00) {
  429. R = 9.00;
  430. }
  431. if (R < 0.50) {
  432. R = 9.00;
  433. }
  434. gluLookAt(viewer[0], viewer[1], viewer[2], 0.0, 0.0, 0.0, 0.0, fix, 0.0);
  435.  
  436. glColor3f(1.0f, 1.0f, 1.0f);
  437. Axes();
  438. GLfloat light_position[] = { x_swiatla / 15, y_swiatla / 15, 0.0f, 1.0f };
  439. GLfloat light_position2[] = { x_swiatla2 / 15, y_swiatla2 / 15, 0.0f, 1.0f };
  440. glLightfv(GL_LIGHT1, GL_POSITION, light_position);
  441. glLightfv(GL_LIGHT0, GL_POSITION, light_position2);
  442. Jajo();
  443. glFlush();
  444. glutSwapBuffers();
  445. }
  446.  
  447. void keys(unsigned char key, int x, int y)
  448. {
  449. if (key == 'q') model = 1;
  450. if (key == 'w') model = 2;
  451. if (key == 'e') model = 3;
  452. if (key == 'r') model = 4;
  453. if (key == 'z') statusShift = 1;
  454.  
  455. RenderScene();
  456. }
  457.  
  458. void MyInit(void)
  459. {
  460. GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 };
  461. GLfloat mat_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  462. GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
  463. GLfloat mat_shininess = { 10.0 };
  464. GLfloat light_position[] = { 0.0f, 10.0f, 0.0f, 1.0f };
  465. GLfloat light_ambient[] = { 0.0f, 0.0f, 1.0f, 1.0f };
  466. GLfloat light_diffuse[] = { 0.0f, 0.0f, 1.0f, 1.0f };
  467. GLfloat light_specular[] = { 0.0f, 0.0f, 1.0f, 1.0f };
  468. GLfloat att_constant = { 1.0f };
  469. GLfloat att_linear = { 0.05f };
  470. GLfloat att_quadratic = { 0.001f };
  471. GLfloat light_position2[] = { 10.0f, 0.0f, 0.0f, 1.0f };
  472. GLfloat light_ambient2[] = { 1.0f, 0.0f, 0.0f, 1.0f };
  473. GLfloat light_diffuse2[] = { 1.0f, 0.0f, 0.0f, 1.0f };
  474. GLfloat light_specular2[] = { 1.0f, 0.0f, 0.0f, 1.0f };
  475. GLfloat att_constant2 = { 1.0f };
  476. GLfloat att_linear2 = { 0.05f };
  477. GLfloat att_quadratic2 = { 0.001f };
  478. glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  479. glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  480. glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  481. glMaterialf(GL_FRONT, GL_SHININESS, mat_shininess);
  482. glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
  483. glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  484. glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
  485. glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  486. glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, att_constant);
  487. glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, att_linear);
  488. glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, att_quadratic);
  489. glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient2);
  490. glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse2);
  491. glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular2);
  492. glLightfv(GL_LIGHT1, GL_POSITION, light_position2);
  493. glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, att_constant2);
  494. glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, att_linear2);
  495. glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, att_quadratic2);
  496. glShadeModel(GL_SMOOTH);
  497. glEnable(GL_LIGHTING);
  498. glEnable(GL_LIGHT0);
  499. glEnable(GL_LIGHT1);
  500. glEnable(GL_DEPTH_TEST);
  501. }
  502.  
  503. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  504. {
  505. pix2angle = 360.0 / (float)horizontal;
  506. glMatrixMode(GL_PROJECTION);
  507. glLoadIdentity();
  508. gluPerspective(70, 1.0, 1.0, 30.0);
  509. if (horizontal <= vertical)
  510. glViewport(0, (vertical - horizontal) / 2, horizontal, horizontal);
  511. else
  512. glViewport((horizontal - vertical) / 2, 0, vertical, vertical);
  513. glMatrixMode(GL_MODELVIEW);
  514. glLoadIdentity();
  515. }
  516.  
  517. void main(void)
  518. {
  519. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  520. glutInitWindowSize(1000, 1000);
  521. glutCreateWindow("OpenGL - oświetlenie scen 3D");
  522. glutDisplayFunc(RenderScene);
  523. glutReshapeFunc(ChangeSize);
  524. glutMouseFunc(Mouse);
  525. glutMotionFunc(Motion);
  526. MyInit();
  527. glEnable(GL_DEPTH_TEST);
  528. glutKeyboardFunc(keys);
  529. glutMainLoop();
  530. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement