Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.27 KB | None | 0 0
  1. #include <windows.h>
  2. #include <GL/glut.h>
  3. #include <GL/gl.h>
  4. #include <stdlib.h>
  5. #include "pomoc/glpomoc.h"
  6. #include "pomoc/materials.h"
  7.  
  8. using namespace std;
  9.  
  10. GLPFrame frameCamera; //dla kamery
  11.  
  12. GLfloat fPozycja_swiatla[4]={0.0f,30.0f,50.0f,1.0f};
  13. GLfloat fPozycja_reflektora1[4]={0.0f,30.0f,50.0f,1.0f};
  14. GLfloat fSlabe_swiatlo[]={0.25f,0.25f,0.25f,1.0f};
  15. GLfloat fMocne_swiatlo[]={1.0f,1.0f,1.0f,1.0f};
  16.  
  17. GLfloat fPozycja_reflektora2[4]={0.0f,30.0f,50.0f,1.0f};
  18. GLfloat fKierunek_reflektora2[4]={-5.0f,-2.0f,5.0f,1.0f};
  19.  
  20. GLfloat fPozycja_reflektora3[4]={0.0f,30.0f,50.0f,1.0f};
  21. GLfloat fKierunek_reflektora3[4]={2.0f,-2.0f,1.0f,1.0f};
  22.  
  23.  
  24. GLfloat ambient_chrome[]={0.25,0.25,0.25,0.6};
  25. GLfloat diffuse_chrome[]={0.4,0.4,0.4,0.6};
  26. GLfloat specular_chrome[]={0.774597,0.774597,0.774597,0.6};
  27. GLfloat shininess_chrome=76.8;
  28.  
  29. GLfloat ambient_gold[]={0.24725,0.1995,0.0745,0.6};
  30. GLfloat diffuse_gold[]={0.75164,0.60648,0.22648,0.61};
  31. GLfloat specular_gold[]={0.628281,0.55502,0.36065,0.6};
  32. GLfloat shininess_gold=51.2;
  33.  
  34. const GLfloat * ambient=mtlBrassAmbient;
  35. const GLfloat * diffuse=mtlBrassDiffuse;
  36. const GLfloat * specular=mtlBrassSpecular;
  37. GLfloat shininess=mtlBrassShininess;
  38.  
  39.  
  40. //zmienne wyliczeniowe menu podrecznego
  41. enum
  42. {
  43. BRASS,
  44. BRONZE,
  45. POLISHED_BRONZE,
  46. CHROME,
  47. COPPER,
  48. POLISHED_COPPER,
  49. GOLD,
  50. POLISHED_GOLD,
  51. PEWTER,
  52. SILVER,
  53. POLISHED_SILVER,
  54. EKERALD,
  55. JADE,
  56. OBSIDIAN,
  57. PEARL,
  58. RUBY,
  59. TURQUOISE,
  60. BLACK_PLASTIC,
  61. BLACK_RUBBER,
  62. //EXIT
  63. FULL_WINDOW, // obszar renderingu - ca³e okno
  64. ASPECT_1_1, // obszar renderingu - aspekt 1:1
  65. EXIT, // wyjœcie
  66. ORTHO, // rzutowanie ortogonalne
  67. PERSP // rzutowanie perspektywiczne
  68. };
  69.  
  70. //oswietlenie
  71. bool swiatlo1=0, swiatlo2=0, swiatlo3=0, swiatlo4=0;
  72. float rA=0.0f, rB=-5.0f;
  73. float rCR=0.0f, rCG=0.0f, rCB=0.0f;
  74.  
  75. // Wielkoœæ obrotów i przesuniêcia
  76. GLfloat alfa1 = 0.0f;
  77. GLfloat alfa2 = 0.0f;
  78. GLfloat alfa3 = 0.0f;
  79. float angle1 = 0.0f;
  80. float angle2 = 0.0f;
  81. /**/float angle3 = 0.0f;
  82. float angle4 = 0.0f;
  83. float angle5 = 0.0f;
  84. float angle6 = 0.0f;
  85. float angle7 = 0.0f;
  86. float angle8 = 0.0f;
  87. float angle9 = 0.0f;/**/
  88. float rot1=0.0f, rot2=1.0f, rot3=1.0f;
  89.  
  90. // aspekt obrazu
  91. GLint skala = FULL_WINDOW;
  92.  
  93. // rzutowanie
  94. GLint rzut = PERSP;
  95.  
  96. // k¹t rzutowania
  97. GLdouble fovy = 90;
  98.  
  99. //Definiowanie ustawien dotyczacych sposobu rusowania obiektow
  100. void Ustawienia ()
  101. {
  102. // Czarne t³o
  103. glClearColor(0.0f,0.0f,0.0f,1.0f);
  104.  
  105. // Model cieniowania kolorów - p³aski
  106. glShadeModel(GL_SMOOTH);
  107.  
  108. //Nawiniêcie wielok¹tów
  109. glFrontFace(GL_CCW);
  110.  
  111. //Inicjowanie kamery
  112. glpInitFrame (&frameCamera);
  113.  
  114. // W³¹czenie lub wy³¹czenie mechanizmu eliminowania ukrytych powierzchni
  115. glEnable(GL_CULL_FACE);
  116.  
  117. // W³¹czenie lub wy³¹czenie mechanizmu sprawdzania g³êbi
  118. glEnable(GL_DEPTH_TEST);
  119.  
  120. glEnable(GL_COLOR_MATERIAL);
  121. glEnable(GL_LIGHTING);
  122.  
  123. // Je¿eli ten znacznik bêdzie ustawiony, to wielok¹ty zwrócone
  124. // ty³em do widza bêd¹ rysowane tylko w postaci szkieletu
  125. glPolygonMode(GL_BACK,GL_LINE);
  126. glPolygonMode(GL_FRONT,GL_FILL);
  127.  
  128. glpMoveFrameForward(&frameCamera, -100.0f);
  129. glpMoveFrameUp(&frameCamera, 10.0f);
  130. }
  131.  
  132. //Wyjscie z programu
  133. void Wyjscie (void)
  134. {
  135.  
  136. }
  137.  
  138. //Rysowanie podloza
  139. void Podloze ()
  140. {
  141. GLfloat Range = 20.0f;
  142. GLfloat Tlo_x;
  143. GLfloat Tlo_z;
  144. GLfloat red = 0.1f;
  145. GLfloat green = 0.1f;
  146. GLfloat blue = 0.1f;
  147.  
  148. // glColor3f (red, green, blue);
  149. for (Tlo_x = -Range * 5; Tlo_x <= Range * 5; Tlo_x += 2.0)
  150. {
  151. glColor4f (0.8f, 0.1f, 0.1f, 0.6f);
  152. for (Tlo_z = -Range * 5; Tlo_z <= Range * 5; Tlo_z += 2.0)
  153. {
  154. if (red == 0.1f)
  155. {
  156. red = 0.8f;
  157. green = 0.1f;
  158. blue = 0.1f;
  159. }
  160. else
  161. {
  162. red = 0.1f;
  163. green = 0.1f;
  164. blue = 0.8f;
  165. }
  166. glColor4f (red, green, blue, 0.6f);
  167. glBegin (GL_QUADS);
  168. //wektory normalne wskazujace gore
  169. glNormal3f (0.0f, 1.0f, 0.0f);
  170. glVertex3f (Tlo_x, 0.0f, Tlo_z);
  171. glVertex3f (Tlo_x, 0.0f, Tlo_z + 2.0f);
  172. glVertex3f (Tlo_x + 2.0f, 0.0f, Tlo_z + 2.0f);
  173. glVertex3f (Tlo_x + 2.0f, 0.0f, Tlo_z);
  174. glEnd ();
  175. }
  176.  
  177. }
  178. }
  179.  
  180. float s1=0, s2=0, s3=0;
  181.  
  182. //Rysowaie aktorow na scenie
  183. void Rys_aktorow (GLint czy_cien)
  184. {
  185. glPushMatrix();
  186. glutSolidCube(10.0f);
  187. glTranslatef(s1,s2,s3);
  188. glPopMatrix();
  189.  
  190. GLfloat fKierunek_reflektora1[4]={rA,-2.0f,rB,1.0f};
  191.  
  192. float x1=0;
  193. float y1=0;
  194. float z1=0;
  195. float x2=0;
  196. float y2=0;
  197. float z2=0;
  198.  
  199. /**/
  200. float x3=0;
  201. float y3=0;
  202. float z3=0;
  203. float x4=0;
  204. float y4=0;
  205. float z4=0;
  206. float x5=0;
  207. float y5=0;
  208. float z5=0;
  209. float x6=0;
  210. float y6=0;
  211. float z6=0;
  212. float x7=0;
  213. float y7=0;
  214. float z7=0;
  215. float x8=0;
  216. float y8=0;
  217. float z8=0;
  218. float x9=0;
  219. float y9=0;
  220. float z9=0;
  221. float x10=0;
  222. float y10=0;
  223. float z10=0; /**/
  224.  
  225. alfa1+=1.0;
  226. alfa2+=1.0;
  227. alfa3+=1.0;
  228.  
  229. //ziemia
  230. angle1+=0.02f;
  231. if(angle1>=(2.0f*3.14159f)*1.0f)
  232. angle1=0.0f;
  233.  
  234. //ksiê¿yc
  235. angle2+=0.1f;
  236. if(angle2>=(2.0f*3.14159f)*1.0f)
  237. angle2=0.0f;
  238.  
  239.  
  240. //mars
  241. angle3+=0.01f;
  242. if(angle3>=(2.0f*3.14159f)*1.0f)
  243. angle3=0.0f;
  244.  
  245. //merkury
  246. angle4+=0.1f;
  247. if(angle4>=(2.0f*3.14159f)*1.0f)
  248. angle4=0.0f;
  249.  
  250. //wenus
  251. angle5+=0.05f;
  252. if(angle5>=(2.0f*3.14159f)*1.0f)
  253. angle5=0.0f;
  254.  
  255. //jowisz
  256. angle6+=0.005f;
  257. if(angle6>=(2.0f*3.14159f)*1.0f)
  258. angle6=0.0f;
  259.  
  260. //saturn
  261. angle7+=0.002f;
  262. if(angle7>=(2.0f*3.14159f)*1.0f)
  263. angle7=0.0f;
  264.  
  265. //uran
  266. angle8+=0.001f;
  267. if(angle8>=(2.0f*3.14159f)*1.0f)
  268. angle8=0.0f;
  269.  
  270. //neptun
  271. angle9+=0.0005f;
  272. if(angle9>=(2.0f*3.14159f)*1.0f)
  273. angle9=0.0f;
  274.  
  275. if(swiatlo1)
  276. {
  277. glLightfv(GL_LIGHT0,GL_AMBIENT,fSlabe_swiatlo);
  278. glLightfv(GL_LIGHT0,GL_DIFFUSE,fMocne_swiatlo);
  279. glLightfv(GL_LIGHT0,GL_SPECULAR,fMocne_swiatlo);
  280. glLightfv(GL_LIGHT0,GL_POSITION,fPozycja_swiatla);
  281. glEnable(GL_LIGHT0);
  282. }
  283. else
  284. glDisable(GL_LIGHT0);
  285.  
  286. if(swiatlo2)
  287. {
  288. glLightfv(GL_LIGHT1,GL_AMBIENT,fSlabe_swiatlo);
  289. glLightfv(GL_LIGHT1,GL_DIFFUSE,fMocne_swiatlo);
  290. glLightfv(GL_LIGHT1,GL_SPECULAR,fMocne_swiatlo);
  291. glLightfv(GL_LIGHT1,GL_POSITION,fPozycja_reflektora1);
  292. glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,fKierunek_reflektora1);
  293. glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,30.0f);
  294. glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,10.0f);
  295. glEnable(GL_LIGHT1);
  296. }
  297. else
  298. glDisable(GL_LIGHT1);
  299.  
  300. if(swiatlo3)
  301. {
  302. glLightfv(GL_LIGHT2,GL_AMBIENT,fSlabe_swiatlo);
  303. glLightfv(GL_LIGHT2,GL_DIFFUSE,fMocne_swiatlo);
  304. glLightfv(GL_LIGHT2,GL_SPECULAR,fMocne_swiatlo);
  305. glLightfv(GL_LIGHT2,GL_POSITION,fPozycja_reflektora2);
  306. glLightfv(GL_LIGHT2,GL_SPOT_DIRECTION,fKierunek_reflektora2);
  307. glLightf(GL_LIGHT2,GL_SPOT_CUTOFF,30.0f);
  308. glLightf(GL_LIGHT2,GL_SPOT_EXPONENT,10.0f);
  309. glEnable(GL_LIGHT2);
  310. }
  311. else
  312. glDisable(GL_LIGHT2);
  313.  
  314. if(swiatlo4)
  315. {
  316. glLightfv(GL_LIGHT3,GL_AMBIENT,fSlabe_swiatlo);
  317. glLightfv(GL_LIGHT3,GL_DIFFUSE,fMocne_swiatlo);
  318. glLightfv(GL_LIGHT3,GL_SPECULAR,fMocne_swiatlo);
  319. glLightfv(GL_LIGHT3,GL_POSITION,fPozycja_reflektora3);
  320. glLightfv(GL_LIGHT3,GL_SPOT_DIRECTION,fKierunek_reflektora3);
  321. glLightf(GL_LIGHT3,GL_SPOT_CUTOFF,30.0f);
  322. glLightf(GL_LIGHT3,GL_SPOT_EXPONENT,10.0f);
  323. glEnable(GL_LIGHT3);
  324. }
  325. else
  326. glDisable(GL_LIGHT3);
  327.  
  328. glPushMatrix();
  329. //slonce
  330. glPushMatrix();
  331. glRotatef(alfa1,1.0f,0.0f,0.0f);
  332. // kolor kuli
  333. glColor3f(1.0f,1.0f,0.0f);
  334.  
  335. glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
  336. glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse);
  337. glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
  338. glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
  339. //glTranslatef(0,10,0);
  340. glutSolidSphere(20.0f,50,20);
  341. glPopMatrix();
  342.  
  343. glPushMatrix();
  344. glMaterialfv(GL_FRONT,GL_AMBIENT,ambient_chrome);
  345. glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse_chrome);
  346. glMaterialfv(GL_FRONT,GL_SPECULAR,specular_chrome);
  347. glMaterialf(GL_FRONT,GL_SHININESS,shininess_chrome);
  348. //orbita ziemi
  349. glRotatef(-30,0,1,1);
  350. glPushMatrix();
  351. glColor3f(0,0,1);
  352. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
  353. {
  354. glBegin(GL_POINTS);
  355. x1=50.0f*sin(angle);
  356. z1=50.0f*cos(angle);
  357. glVertex3f(x1,y1,z1);
  358. glEnd();
  359. }
  360. glPopMatrix();
  361.  
  362. //ziemia
  363. glPushMatrix();
  364. x1=50.0f*sin(angle1);
  365. z1=50.0f*cos(angle1);
  366. glTranslatef(x1,y1,z1);
  367. glRotatef(alfa2,x1,y1,z1);
  368. glutSolidSphere(3.0f,20,20);
  369. glPopMatrix();
  370.  
  371. glPopMatrix();
  372. glMaterialfv(GL_FRONT,GL_AMBIENT,ambient_gold);
  373. glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse_gold);
  374. glMaterialfv(GL_FRONT,GL_SPECULAR,specular_gold);
  375. glMaterialf(GL_FRONT,GL_SHININESS,shininess_gold);
  376. glPushMatrix();
  377.  
  378. glColor3f(1,1,1);
  379. //orbita ksiê¿yca
  380. glPushMatrix();
  381. glColor3f(1,1,1);
  382. x1=50.0f*sin(angle1);
  383. z1=50.0f*cos(angle1);
  384. glTranslatef(x1,y1,z1);
  385. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.01f)
  386. {
  387. glBegin(GL_POINTS);
  388. y2=5.0f*sin(angle);
  389. z2=5.0f*cos(angle);
  390. glVertex3f(x2,y2,z2);
  391. glEnd();
  392. }
  393. glPopMatrix();
  394.  
  395. //ksiê¿yc
  396. glPushMatrix();
  397. glTranslatef(x1,y1,z1);
  398. y2=5.0f*sin(angle2);
  399. z2=5.0f*cos(angle2);
  400. glTranslatef(x2,y2,z2);
  401. glRotatef(alfa3,x2,y2,z2);
  402. glutSolidSphere(0.4f,20,20);
  403. glPopMatrix();
  404.  
  405. glPopMatrix();
  406.  
  407. /**/
  408. glPushMatrix();
  409. //orbita marsa
  410. glRotatef(-30,0,1,1);
  411. glPushMatrix();
  412. glColor3f(1,0,0);
  413. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
  414. {
  415. glBegin(GL_POINTS);
  416. x3=60.0f*sin(angle);
  417. z3=60.0f*cos(angle);
  418. glVertex3f(x3,y3,z3);
  419. glEnd();
  420. }
  421. glPopMatrix();
  422.  
  423. //mars
  424. glPushMatrix();
  425. x3=60.0f*sin(angle3);
  426. z3=60.0f*cos(angle3);
  427. glTranslatef(x3,y3,z3);
  428. glRotatef(alfa2,x3,y3,z3);
  429. glutSolidSphere(2.0f,20,20);
  430. glPopMatrix();
  431. glPopMatrix();
  432.  
  433. glPushMatrix();
  434. //orbita merkurego
  435. glRotatef(-30,0,1,1);
  436. glPushMatrix();
  437. glColor3f(1,0,1);
  438. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
  439. {
  440. glBegin(GL_POINTS);
  441. x4=30.0f*sin(angle);
  442. z4=30.0f*cos(angle);
  443. glVertex3f(x4,y4,z4);
  444. glEnd();
  445. }
  446. glPopMatrix();
  447.  
  448. //mrkury
  449. glPushMatrix();
  450. x4=30.0f*sin(angle4);
  451. z4=30.0f*cos(angle4);
  452. glTranslatef(x4,y4,z4);
  453. glRotatef(alfa2,x4,y4,z4);
  454. glutSolidSphere(1.0f,20,20);
  455. glPopMatrix();
  456. glPopMatrix();
  457.  
  458. glPushMatrix();
  459. //orbita wenus
  460. glRotatef(-30,0,1,1);
  461. glPushMatrix();
  462. glColor3f(0.5,0.7,0);
  463. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
  464. {
  465. glBegin(GL_POINTS);
  466. x5=40.0f*sin(angle);
  467. z5=40.0f*cos(angle);
  468. glVertex3f(x5,y5,z5);
  469. glEnd();
  470. }
  471. glPopMatrix();
  472.  
  473. //wenus
  474. glPushMatrix();
  475. x5=40.0f*sin(angle5);
  476. z5=40.0f*cos(angle5);
  477. glTranslatef(x5,y5,z5);
  478. glRotatef(alfa2,x5,y5,z5);
  479. glutSolidSphere(2.0f,20,20);
  480. glPopMatrix();
  481. glPopMatrix();
  482.  
  483. glPushMatrix();
  484.  
  485. glMaterialfv(GL_FRONT,GL_AMBIENT,ambient_chrome);
  486. glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse_chrome);
  487. glMaterialfv(GL_FRONT,GL_SPECULAR,specular_chrome);
  488. glMaterialf(GL_FRONT,GL_SHININESS,shininess_chrome);
  489. //orbita jowisz
  490. glRotatef(-30,0,1,1);
  491. glPushMatrix();
  492. glColor3f(0.5,0.7,0.8);
  493. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
  494. {
  495. glBegin(GL_POINTS);
  496. x6=70.0f*sin(angle);
  497. z6=70.0f*cos(angle);
  498. glVertex3f(x6,y6,z6);
  499. glEnd();
  500. }
  501. glPopMatrix();
  502.  
  503. //jowisz
  504. glPushMatrix();
  505. x6=70.0f*sin(angle6);
  506. z6=70.0f*cos(angle6);
  507. glTranslatef(x6,y6,z6);
  508. glRotatef(alfa2,x6,y6,z6);
  509. glutSolidSphere(5.0f,20,20);
  510. glPopMatrix();
  511. glPopMatrix();
  512.  
  513. glPushMatrix();
  514. //orbita saturn
  515. glRotatef(-30,0,1,1);
  516. glPushMatrix();
  517. glColor3f(0.8,0.8,0.8);
  518. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
  519. {
  520. glBegin(GL_POINTS);
  521. x7=80.0f*sin(angle);
  522. z7=80.0f*cos(angle);
  523. glVertex3f(x7,y7,z7);
  524. glEnd();
  525. }
  526. glPopMatrix();
  527.  
  528. //saturn
  529. glPushMatrix();
  530. x7=80.0f*sin(angle7);
  531. z7=80.0f*cos(angle7);
  532. glTranslatef(x7,y7,z7);
  533. glRotatef(alfa2,x7,y7,z7);
  534. glutSolidSphere(3.0f,20,20);
  535. glPopMatrix();
  536.  
  537. glPushMatrix();
  538. //orbita saturna
  539. glPushMatrix();
  540. glColor3f(0.8,0.8,0.8);
  541. x7=80.0f*sin(angle7);
  542. z7=80.0f*cos(angle7);
  543. glTranslatef(x7,y7,z7);
  544. glRotatef(50,0,1,1);
  545. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.01f)
  546. {
  547. for(float j=5;j<7;j+=0.3)
  548. {
  549. glBegin(GL_POINTS);
  550. y8=j*sin(angle);
  551. z8=j*cos(angle);
  552. glVertex3f(x8,y8,z8);
  553. glEnd();
  554. }
  555. }
  556.  
  557. glPopMatrix();
  558.  
  559. glPopMatrix();
  560.  
  561. glPopMatrix();
  562.  
  563. glPushMatrix();
  564. //orbita uran
  565. glRotatef(-30,0,1,1);
  566. glPushMatrix();
  567. glColor3f(0.9,0.2,0.1);
  568. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
  569. {
  570. glBegin(GL_POINTS);
  571. x9=90.0f*sin(angle);
  572. z9=90.0f*cos(angle);
  573. glVertex3f(x9,y9,z9);
  574. glEnd();
  575. }
  576. glPopMatrix();
  577.  
  578. //uran
  579. glPushMatrix();
  580. x9=90.0f*sin(angle8);
  581. z9=90.0f*cos(angle8);
  582. glTranslatef(x9,y9,z9);
  583. glRotatef(alfa2,x9,y9,z9);
  584. glutSolidSphere(3.0f,20,20);
  585. glPopMatrix();
  586. glPopMatrix();
  587.  
  588. glPushMatrix();
  589. //orbita neptun
  590. glRotatef(-30,0,1,1);
  591. glPushMatrix();
  592. glColor3f(0.9,0.8,0.1);
  593. for(float angle=0.0f;angle<=((2.0f*3.14159f)*1.0f);angle+=0.001f)
  594. {
  595. glBegin(GL_POINTS);
  596. x10=100.0f*sin(angle);
  597. z10=100.0f*cos(angle);
  598. glVertex3f(x10,y10,z10);
  599. glEnd();
  600. }
  601. glPopMatrix();
  602.  
  603. //neptun
  604. glPushMatrix();
  605. x10=100.0f*sin(angle9);
  606. z10=100.0f*cos(angle9);
  607. glTranslatef(x10,y10,z10);
  608. glRotatef(alfa2,x10,y10,z10);
  609. glutSolidSphere(2.0f,20,20);
  610. glPopMatrix();
  611. glPopMatrix();
  612.  
  613. /**/
  614.  
  615. glPopMatrix();
  616. }
  617.  
  618. //Rysowanie sceny
  619. void Display ()
  620. {
  621. // kolor t³a - zawartoœæ bufora koloru
  622. glClearColor (0.0,0.0,0.0,1.0);
  623.  
  624. // czyszczenie bufora koloru
  625. glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  626.  
  627. // Ustawienie stosu macierzy modelowania
  628. glMatrixMode(GL_MODELVIEW);
  629. glLoadIdentity();
  630.  
  631. //dodanie kamery
  632. glpApplyCameraTransform (&frameCamera);
  633.  
  634. glPushMatrix ();
  635. glPushMatrix();
  636. glTranslatef(0,-10,0);
  637. Podloze ();
  638. glPopMatrix();
  639. glTranslatef(0.0,20.0,0.0);
  640. glRotatef(rot1,0.0,0.0,0.0);
  641. glRotatef(rot2,0.0,0.0,1.0);
  642. glRotatef(-rot3,0.0,1.0,0.0);
  643. Rys_aktorow (0);
  644. glPopMatrix ();
  645.  
  646. // skierowanie poleceñ do wykonania
  647. glFlush ();
  648.  
  649. // zamiana buforów koloru
  650. glutSwapBuffers();
  651. }
  652.  
  653. void Reshape (int width, int height)
  654. {
  655. // obszar renderingu - ca³e okno
  656. glViewport (0,0,width,height);
  657.  
  658. // wybór macierzy rzutowania
  659. glMatrixMode (GL_PROJECTION);
  660.  
  661. // macierz rzutowania = macierz jednostkowa
  662. glLoadIdentity ();
  663.  
  664. // obliczenie aspektu obrazu z uwzglêdnieniem
  665. // przypadku, gdy wysokoϾ obrazu wynosi 0
  666. GLdouble aspect = 1;
  667. GLfloat zakres = 250.0f;
  668. GLfloat blisko = 1.0f;
  669. GLfloat daleko = 250.0f;
  670.  
  671. // rzutowanie ortogonalne
  672. if (rzut==ORTHO)
  673. {
  674. // skala 1:1
  675. if (skala==ASPECT_1_1)
  676. {
  677. if (width < height && width > 0)
  678. glOrtho (-zakres,zakres,-zakres*height/width,zakres*height/width,-zakres,zakres);
  679. else
  680. if (width >= height && height > 0)
  681. glOrtho (-zakres*width/height,zakres*width/height,-zakres,zakres,-zakres,zakres);
  682. }
  683. else
  684. glOrtho (-zakres,zakres,-zakres,zakres,-zakres,zakres);
  685. }
  686.  
  687. // rzutowanie perspektywiczne
  688. if (rzut==PERSP)
  689. {
  690. if (height > 0)
  691. aspect = width/(GLdouble)height;
  692. gluPerspective (fovy,aspect,blisko,daleko);
  693. }
  694. Display ();
  695.  
  696. }
  697.  
  698. void Keyboard (unsigned char key, int x, int y)
  699. {
  700. switch(key)
  701. {
  702. case 'a':
  703. rot1+=1.0;
  704. break;
  705. case 'd':
  706. rot2*=1.1;
  707. if(rot2>360.0)
  708. rot2*=0.2;
  709. break;
  710. case 's':
  711. rot3+=1.0;
  712. if(rot3>360.0)
  713. rot3*=0.2;
  714. break;
  715. }
  716. switch(key)
  717. {
  718. case '1':
  719. rA-=0.5f;
  720. break;
  721. case '2':
  722. rA+=0.5f;
  723. break;
  724. case '3':
  725. rB-=0.5f;
  726. break;
  727. case '4':
  728. rB+=0.5f;
  729. break;
  730. }
  731. s1=0.0f;
  732. s2=0.0f;
  733. s3=0.0f;
  734. switch(key)
  735. {
  736. case '8':
  737. s1+=5.0f;
  738. break;
  739. case '5':
  740. s3-=5.0f;
  741. break;
  742. case 'r':
  743. fMocne_swiatlo[0]+=10.0f;
  744. break;
  745. case 'g':
  746. fMocne_swiatlo[1]+=10.0f;
  747. break;
  748. case 'b':
  749. fMocne_swiatlo[2]+=10.0f;
  750. break;
  751. case 'y':
  752. fMocne_swiatlo[3]+=10.0f;
  753. break;
  754. }
  755. if(fMocne_swiatlo[0]>=255.0f)
  756. {
  757. fMocne_swiatlo[0]=0.0f;
  758. fMocne_swiatlo[1]=0.0f;
  759. fMocne_swiatlo[2]=0.0f;
  760. fMocne_swiatlo[3]=0.0f;
  761. }
  762. glutPostRedisplay();
  763. /*switch (key)
  764. {
  765. case '1':
  766. obrot1=!obrot1;
  767. break;
  768. case '2':
  769. obrot2=!obrot2;
  770. break;
  771. case '3':
  772. obrot3=!obrot3;
  773. break;
  774. }
  775. glutPostRedisplay();*/
  776. }
  777.  
  778. void SpecialKeys (int key, int x, int y)
  779. {
  780. switch (key)
  781. {
  782. case GLUT_KEY_LEFT:
  783. glpRotateFrameLocalY(&frameCamera, 0.1);
  784. break;
  785. case GLUT_KEY_RIGHT:
  786. glpRotateFrameLocalY(&frameCamera, -0.1);
  787. break;
  788. case GLUT_KEY_UP:
  789. glpMoveFrameForward(&frameCamera, 0.5f);
  790. break;
  791. case GLUT_KEY_DOWN:
  792. glpMoveFrameForward(&frameCamera, -0.5f);
  793. break;
  794. case GLUT_KEY_PAGE_UP:
  795. glpMoveFrameUp(&frameCamera, 0.1f);
  796. break;
  797. case GLUT_KEY_PAGE_DOWN:
  798. glpMoveFrameUp(&frameCamera, -0.1f);
  799. break;
  800. case GLUT_KEY_F1:
  801. swiatlo1=!swiatlo1;
  802. break;
  803. case GLUT_KEY_F2:
  804. swiatlo2=!swiatlo2;
  805. break;
  806. case GLUT_KEY_F3:
  807. swiatlo3=!swiatlo3;
  808. break;
  809. case GLUT_KEY_F4:
  810. swiatlo4=!swiatlo4;
  811. break;
  812. }
  813. //odswiezenie okna
  814. glutPostRedisplay ();
  815. }
  816.  
  817. //Wywolanie w czasie bezczynnosci
  818.  
  819. void TimerFunction (int value)
  820. {
  821. glutPostRedisplay ();
  822. glutTimerFunc(3, TimerFunction, 1);
  823. }
  824.  
  825. void Menu (int value)
  826. {
  827. switch (value)
  828. {
  829. case BRASS:
  830. ambient=mtlBrassAmbient;
  831. diffuse=mtlBrassDiffuse;
  832. specular=mtlBrassSpecular;
  833. shininess=mtlBrassShininess;
  834. Display();
  835. break;
  836. case BRONZE:
  837. ambient=mtlBronzeAmbient;
  838. diffuse=mtlBronzeDiffuse;
  839. specular=mtlBronzeSpecular;
  840. shininess=mtlBronzeShininess;
  841. Display();
  842. break;
  843. case POLISHED_BRONZE:
  844. ambient=mtlPolishedBronzeAmbient;
  845. diffuse=mtlPolishedBronzeDiffuse;
  846. //specular=mtlPolsihedBronzeSpecular;
  847. shininess=mtlPolishedBronzeShininess;
  848. Display();
  849. break;
  850. case CHROME:
  851. ambient=mtlChromeAmbient;
  852. diffuse=mtlChromeDiffuse;
  853. specular=mtlChromeSpecular;
  854. shininess=mtlChromeShininess;
  855. Display();
  856. break;
  857. case COPPER:
  858. ambient=mtlCopperAmbient;
  859. diffuse=mtlCopperDiffuse;
  860. specular=mtlCopperSpecular;
  861. shininess=mtlCopperShininess;
  862. Display();
  863. break;
  864. case POLISHED_COPPER:
  865. ambient=mtlPolishedCopperAmbient;
  866. diffuse=mtlPolishedCopperDiffuse;
  867. specular=mtlPolishedCopperSpecular;
  868. shininess=mtlPolishedCopperShininess;
  869. Display();
  870. break;
  871. case GOLD:
  872. ambient=mtlGoldAmbient;
  873. diffuse=mtlGoldDiffuse;
  874. specular=mtlGoldSpecular;
  875. shininess=mtlGoldShininess;
  876. Display();
  877. break;
  878. case POLISHED_GOLD:
  879. ambient=mtlPolishedGoldAmbient;
  880. diffuse=mtlPolishedGoldDiffuse;
  881. specular=mtlPolishedGoldSpecular;
  882. shininess=mtlPolishedGoldShininess;
  883. Display();
  884. break;
  885. // obszar renderingu - ca³e okno
  886. case FULL_WINDOW:
  887. skala = FULL_WINDOW;
  888. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  889. break;
  890.  
  891. // obszar renderingu - aspekt 1:1
  892. case ASPECT_1_1:
  893. skala = ASPECT_1_1;
  894. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  895. break;
  896.  
  897. // rzutowanie ortogonalne
  898. case ORTHO:
  899. rzut=ORTHO;
  900. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  901. break;
  902.  
  903. // rzutowanie perspektywiczne
  904. case PERSP:
  905. rzut=PERSP;
  906. Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  907. break;
  908.  
  909. // wyjœcie
  910. case EXIT:
  911. exit (0);
  912. }
  913. glutPostRedisplay();
  914. }
  915.  
  916.  
  917.  
  918. int main (int argc, char **argv)
  919. {
  920. glutCreateMenu(Menu);
  921. glutAddMenuEntry("Mosiadz",BRASS);
  922. glutAddMenuEntry("Mosiadz",BRONZE);
  923. glutAddMenuEntry("Mosiadz",POLISHED_BRONZE);
  924. glutAddMenuEntry("Mosiadz",CHROME);
  925. glutAddMenuEntry("Mosiadz",COPPER);
  926. glutAddMenuEntry("Mosiadz",POLISHED_COPPER);
  927. glutAddMenuEntry("Mosiadz",GOLD);
  928. //glutAddMenuEntry("Mosiadz",BRASS);
  929. //glutAddMenuEntry("Mosiadz",BRASS);
  930. //glutAddMenuEntry("Mosiadz",BRASS);
  931. //glutAddMenuEntry("Mosiadz",BRASS);
  932. //glutAddMenuEntry("Mosiadz",BRASS);
  933. //glutAddMenuEntry("Mosiadz",BRASS);
  934. //glutAddMenuEntry("Mosiadz",BRASS);
  935. glutAddMenuEntry("Mosiadz",PEARL);
  936. glutAddMenuEntry("Mosiadz",RUBY);
  937. glutAddMenuEntry("Mosiadz",TURQUOISE);
  938. glutAddMenuEntry("Mosiadz",BLACK_PLASTIC);
  939. glutAddMenuEntry("Mosiadz",BLACK_RUBBER);
  940. glutAddMenuEntry("Wyjscie",EXIT);
  941. glutAttachMenu(GLUT_RIGHT_BUTTON);
  942. //glutTimeFunc(10,TimerFunction,1);
  943.  
  944. glutInit (&argc, argv);
  945. glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  946. glutInitWindowSize (800, 600);
  947. glutCreateWindow ("Laboratorium 5");
  948. glutReshapeFunc (Reshape);
  949. glutDisplayFunc (Display);
  950. glutKeyboardFunc (Keyboard);
  951. glutSpecialFunc (SpecialKeys);
  952.  
  953. Ustawienia ();
  954.  
  955. // dodanie pozycji do menu podrêcznego
  956. int MenuSkali = glutCreateMenu (Menu);
  957. glutAddMenuEntry ("Skalowanie - ca³e okno", FULL_WINDOW);
  958. glutAddMenuEntry ("Skalowanie - aspect_1_1", ASPECT_1_1);
  959. int MenuRzutowania = glutCreateMenu (Menu);
  960. glutAddMenuEntry ("Rzutowanie ortogonalne", ORTHO);
  961. glutAddMenuEntry ("Rzutowanie perspective", PERSP);
  962. // utworzenie menu podrêcznego
  963. glutCreateMenu (Menu);
  964. glutAddSubMenu ("Skalowanie", MenuSkali);
  965. glutAddSubMenu ("Rzutowanie", MenuRzutowania);
  966. glutAddMenuEntry ("Wyjscie", EXIT);
  967.  
  968. // okreœlenie przycisku myszki obs³uguj¹cej menu podrêczne
  969. glutAttachMenu (GLUT_RIGHT_BUTTON);
  970. glutTimerFunc (3, TimerFunction, 1);
  971. //glutFullScreen();
  972. glutMainLoop ();
  973. Wyjscie ();
  974. return 0;
  975. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement