Guest User

Untitled

a guest
Jan 24th, 2018
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.90 KB | None | 0 0
  1. // Ćwiczenie oparte o:
  2.  
  3. // SphereWorld.cpp
  4. // OpenGL SuperBible
  5. // Demonstrates an immersive 3D environment using actors
  6. // and a camera. This version adds lights and material properties
  7. // and shadows.
  8. // Program by Richard S. Wright Jr.
  9.  
  10. #include <stdio.h>
  11. #include "../shared/gltools.h" // OpenGL toolkit
  12. #include "../shared/math3d.h" // 3D Math Library
  13. #include "../shared/glframe.h" // Frame class
  14. #include "../shared/stopwatch.h" // Timer class
  15. #include <math.h>
  16.  
  17. // 3. Dodaj swoje imię i nazwisko do belki tytułowej
  18. // ...
  19. const char *appTitle = "Display lists & flat shadow. Autor: Jarosław Mielewski";
  20.  
  21.  
  22. bool displayListOn = false; // wyświetlanie przy pomocy list wyświetlania
  23.  
  24. #define NUM_SPHERES 50
  25. GLFrame spheres[ NUM_SPHERES ];
  26. GLFrame frameCamera;
  27.  
  28. // parametry świateł i materiałów
  29. GLfloat fLightPos[ 4 ] = { -100.0f, 100.0f, 50.0f, 1.0f }; // źródło światła punktowego
  30. GLfloat fNoLight[] = { 0.0f, 0.0f, 0.0f, 0.0f };
  31. GLfloat fLowLight[] = { 0.25f, 0.25f, 0.25f, 1.0f };
  32. GLfloat fBrightLight[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  33. GLfloat vLightPos[] = { -80.0f,120.0f,100.0f,0.0f };
  34.  
  35. M3DMatrix44f mShadowMatrix;
  36.  
  37. GLuint sphereList, groundList, torusList; // identyfikatory list wyświetlania
  38.  
  39. void DrawGround( void ); // rysowanie terenu
  40.  
  41. //////////////////////////////////////////////////////////////////
  42. // This function does any needed initialization on the rendering
  43. // context.
  44. // tekstury
  45. const int GROUND_TEXTURE = 0;
  46. const int TORUS_TEXTURE = 1;
  47. const int SPHERE_TEXTURE = 2;
  48. const int TEXTURES_NUM = 3; // liczba wykorzystywanych tekstu
  49. GLuint textures[ TEXTURES_NUM ]; // identyfikatory tekstur
  50. void SetupRC()
  51. {
  52. const char *textureNames[ TEXTURES_NUM ] =
  53. {
  54. "..\\Media\\grass.tga", "..\\Media\\wood.tga", "..\\Media\\orb.tga"
  55. };
  56. int iSphere;
  57. int i;
  58.  
  59. glStencilOp( GL_INCR, GL_INCR, GL_INCR ); // zwiększenie zawartości w przypadku nieudanego testu
  60. glClearStencil( 0 ); // wyczyszczenie bufora szablonu
  61. glStencilFunc( GL_EQUAL, 0x0, 0x01 ); // ustawienie funkcji porównującej bufora szablonu
  62.  
  63.  
  64. // 5b. Ustawienie parametrów rysowania sceny
  65. // - ustawienie koloru tła na szary (fLowLight) funkcją glClearColor()
  66. // - ustawienie nierysowania wewnętrznych ścianek (GL_BACK) funkcją glCullFace()
  67. // - ustawienie funkcją glFrontFace() przednich ścianek jako podawanych w kierunku
  68. // przeciwnym do ruchu wskazówek zegara (GL_CCW)
  69. // - włączenie nierysowania ścianek (GL_CULL_FACE)
  70. // - włączenie testu głębokości (GL_DEPTH_TEST)
  71. // - włączenie wieloprzebiegowych tekstur (GL_MULTISAMPLE_ARB)
  72. glClearColor(fLowLight[0],fLowLight[1],fLowLight[2],fLowLight[3]);
  73. glCullFace(GL_BACK);
  74. glFrontFace(GL_CCW);
  75. glDisable(GL_CULL_FACE);
  76. glEnable(GL_DEPTH_TEST);
  77. glEnable(GL_MULTISAMPLE_ARB);
  78.  
  79.  
  80. // 5c. Ustawienie parametrów oświetlenia
  81. // - Włączenie oświetlenia (GL_LIGHTING)
  82. // - Ustawienie parametrów dla światła GL_LIGHT0 funkcją glLightfv().
  83. // Składowe GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR ustawiamy odpowiednio
  84. // na podstawie wektorów: fLowLight, fBrightLight i fBrightLight
  85. // - Włączenia światła GL_LIGHT0
  86. glEnable(GL_LIGHTING);
  87. glLightfv(GL_LIGHT0,GL_AMBIENT,fLowLight);
  88. glLightfv(GL_LIGHT0,GL_DIFFUSE,fBrightLight);
  89. glLightfv(GL_LIGHT0,GL_SPECULAR,fBrightLight);
  90. glEnable(GL_LIGHT0);
  91.  
  92.  
  93. glLightModelfv( GL_LIGHT_MODEL_AMBIENT, fNoLight ); // brak światła ambient sceny
  94. glLightModeli( GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR );
  95.  
  96. // 5d - Włączenie obsługi materiałów (GL_COLOR_MATERIAL)
  97. // - Ustawianie funkcją glColorMaterial() materiału koloru (GL_AMBIENT_AND_DIFFUSE)
  98. // ścianek przednich (GL_FRONT) na podstawie bieżącego koloru
  99. // - Ustawienie przednich (GL_FRONT) parametrów odbłyskowych materiału
  100. // (GL_SPECULAR, GL_SHININESS) na fBrightLight i 128 funkcjami odpowiednio:
  101. // glMaterialfv() oraz glMateriali
  102. glEnable(GL_COLOR_MATERIAL);
  103. glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
  104. glMaterialfv(GL_FRONT,GL_SPECULAR,fBrightLight);
  105. glMaterialfv(GL_FRONT,GL_SHININESS,fBrightLight);
  106. glMateriali(GL_FRONT,GL_SPECULAR,128);
  107. glMateriali(GL_FRONT,GL_SHININESS,128);
  108.  
  109.  
  110.  
  111. // Obliczenie macierzy cienia mShadowMatrix
  112. M3DVector3f vPoints[ 3 ] =
  113. { // płaszczyzna y = -0.4f
  114. { 0.0f, -0.4f, 0.0f }, { 10.0f, -0.4f, 0.0f }, { 5.0f, -0.4f, -5.0f }
  115. };
  116. M3DVector4f pPlane;
  117. // 40. Wyznaczenie równania płaszczyzny pPlane na podstawie jej 3 punktów (vPoints[])
  118. // Użyj funkcji bibliotecznej m3dGetPlaneEquation( plane, point1, point2, point3 )
  119. // ...
  120.  
  121.  
  122. // 41. Obliczenie w mCubeTransform macierzy rzutowania cienia na płaszczyźnie
  123. // Użyj funkcji m3dMakePlanarShadowMatrix() podając jako parametry macierz
  124. // cienia, równanie płaszczyzny oraz pozycję światła fLightPos
  125. // ...
  126.  
  127.  
  128. // 18. Ustawienie losowych współrzędnych X oraz Z dla wszystkich
  129. // NUM_SPHERES sfer (spheres[]). Współrzędne X i Z mają mieć wartość losową
  130. // z zakresu -20 do 20 z krokiem 0.1, a współrzędna y ma mieć stałą wartość 0.0
  131. // Do ustawienia współrzędnych należy użyć metody SetOrigin( x, y, z )
  132. // ...
  133. for ( iSphere = 0; iSphere < NUM_SPHERES; iSphere++ )
  134. {
  135. spheres[ iSphere ].SetOrigin( ( (float)( ( rand() % 400 ) - 200) * 0.1f ), 0.0, (float)( ( rand() % 400 ) - 200 ) * 0.1f );
  136. }
  137.  
  138. // 23. Włączenie przetwarzania tektur dwuwymiarowych (GL_TEXTURE_2D)
  139. // ...
  140.  
  141.  
  142. // 24. Ustawienie dla tekstur (GL_TEXTURE_ENV) trybu 'funkcji tekstury' (GL_TEXTURE_ENV_MODE)
  143. // na mnożenie kolorów (GL_MODULATE). Użyj funkcji glTexEnvi()
  144. // ...
  145.  
  146.  
  147. // 25. Przydzielenie identyfikatorów dla TEXTURES_NUM tekstur
  148. // Użyj funkcji glGenTextures() zapisując identyfikatory w tabeli textures
  149. // ...
  150.  
  151.  
  152. // 26. W PĘTLI dla KAŻDEJ tekstury
  153. // ...
  154.  
  155.  
  156. {
  157. GLbyte *pBytes;
  158. GLint iWidth, iHeight, iComponents;
  159. GLenum eFormat;
  160.  
  161. // 27. Załaduj teksturę funkcją gltLoadTGA( textureNames[ i ], &nWidth, &nHeight, &iComponents, &eformat );
  162. // PODSTAWIAJĄC wynik do pBytes
  163. // ...
  164.  
  165.  
  166. // 28. Powiąż teksturę (GL_TEXTURE_2D) z odpowiednim identyfikatorem
  167. // funkcją glBindTexture()
  168. // ...
  169.  
  170.  
  171. // 29. Zbudowanie mipmap 2D (GL_TEXTURE_2D) funkcją gluBuild2DMipmaps( rodzaj tesktury, iComponents,
  172. // iWidth, iHeight, eFormat, GL_UNSIGNED_BYTE, pBytes )
  173. // ...
  174.  
  175.  
  176. // 30. Zwolnij pamięć tekstur free( pBytes );
  177. // ...
  178.  
  179.  
  180. // 50. Ustaw parametry filtrowania (GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER)
  181. // i kafelkowania (GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T) dla tekstur dwuwymiarowych (GL_TEXTURE_2D)
  182. // kolejnymi wywołaniami fukcji glTexParameteri()
  183. // filtrowanie liniowe przy powiększeniu (GL_LINEAR) i zmniejszeniu (GL_LINEAR_MIPMAP_LINEAR)
  184. // zawijania (GL_CLAMP_TO_EDGE)
  185. // ..
  186.  
  187. }
  188.  
  189. // 33. Przydzielenie funkcją glGenLists() identyfikatorów dla list:
  190. // groundList, sphereList, torusList
  191. // ...
  192.  
  193.  
  194. // 34. Zdefiniowanie listy wyświetlania dla sfery
  195. // - rozpoczęcie funkcją glNewList() dla sphereList z parametrem kompilacji (GL_COMPILE)
  196. // - narysowanie sfery funkcją gltDrawSphere() - parametry jak w DrawInhabitants()
  197. // - zakończenie funkcją glEndList()
  198. // ...
  199.  
  200.  
  201. // 35. Zdefiniowanie listy wyświetlania dla torusa - parametry jak w DrawInhabitants()
  202. // ...
  203.  
  204.  
  205. // 36. Zdefiniowanie listy wyświetlania dla 'podłoża' - funkcja DrawGround()
  206. // ...
  207.  
  208. }
  209.  
  210. ////////////////////////////////////////////////////////////////////////
  211. void ShutdownRC( void )
  212. { // zwolnienie zaalokowanych zasobów
  213. // 32. Zwolnienie TEXTURES_NUM tekstur funkcją glDeleteTextures()
  214. // ...
  215.  
  216.  
  217. // 37. Zwolnienie 3 list wyświetlania funkcją glDeleteLists()
  218. // ...
  219.  
  220. }
  221.  
  222.  
  223. ///////////////////////////////////////////////////////////
  224. // Draw the ground as a series of triangle strips
  225. void DrawGround( void )
  226. { // rysuje kwadratowy teren wykorzystując paski trójkątów
  227. GLfloat fExtent = 20.0f; // połowa boku kwadratu podłoża (odległość od środka do jego boków)
  228. GLfloat fStep = 1.0f; // krok wyznaczający wielkość trójkątów
  229. GLfloat y = -0.4f; // wysokość terenu
  230. GLint iStrip; // zmienna iterująca w poziomie
  231. GLint iRun; // zmienna iterująca w pionie
  232. GLfloat s = 0.0f; // pozioma współrzędna tekstury
  233. GLfloat t = 0.0f; // pionowa współrzędna tekstury
  234. GLfloat texStep = 1.0f / ( fExtent * 0.075f ); // krok tekstury
  235.  
  236. // 32b. Ustawienie tektury SPHERE_TEXTURE jako aktualnej tekstury dwuwymiarowej
  237. // (GL_TEXTURE_2D) funkcją glBindTexture()
  238. // Ustawienie kafelkowania GL_TEXTURE_WRAP_S i GL_TEXTURE_WRAP_T na powtarzanie
  239. // wzoru (GL_REPEAT) funkcją glTexParameterf()
  240. // ...
  241.  
  242.  
  243.  
  244. // 16. Narysowanie poziomego, kwadratowego podłoża o rozciągłości:
  245. // - w kierunku X (iStrip) od -fExtent do fExtent z krokiem fStep
  246. // - w kierunku Z (iRun) od -fExtent do fExtent z krokiem fStep
  247. // Krok dla tekstury wynosi texStep
  248. // Paski podajemy po DWA (2) wierzchołki na raz (sąsiadujące wzdłuż osi X)
  249. // Dla każdego wierzchołka podajemy:
  250. // - normalną zwróconą do góry (glNormal3f())
  251. // - współrzędne tekstury glTexCoord2f())
  252. // - współrzędne glVertex3f()
  253. for(iStrip = -fExtent; iStrip <= fExtent; iStrip+=fStep)
  254. {
  255. t = 0.0f;
  256. glBegin(GL_TRIANGLE_STRIP);
  257. for(iRun = -fExtent; iRun <= fExtent; iRun+=fStep)
  258. {
  259. glTexCoord2f(s,t);
  260. glNormal3f(0.0f, 1.0f, 0.0f);
  261. glVertex3f(iStrip,y,iRun);
  262.  
  263. glTexCoord2f(s,t);
  264. glNormal3f(0.0f, 1.0f, 0.0f);
  265. glVertex3f(iStrip+fStep,y,iRun);
  266.  
  267. t+= fStep;
  268. }
  269. glEnd();
  270. s+=fStep;
  271. }
  272. /* for (iStrip = - fExtent; iStrip<= fExtent; iStrip=iStrip+fStep)
  273. {
  274. t = 0.0f;
  275. glBegin(GL_TRIANGLE_STRIP);
  276. for (iRun=-fExtent;iRun<=fExtent;iRun+=fStep)
  277. {
  278. glNormal3f(0.0f,1.0f,0.0f);
  279. glTexCoord2f( s,t);
  280. glVertex3f(iStrip,y,iRun);
  281.  
  282. glNormal3f(0.0f,1.0f,0.0f);
  283. glTexCoord2f(s+texStep,t);
  284. glVertex3f(iStrip+fStep,y,iRun);
  285.  
  286. t+=texStep;
  287. }
  288. glEnd();
  289. s+=texStep;
  290. }*/
  291.  
  292.  
  293. }
  294.  
  295. ///////////////////////////////////////////////////////////////////////
  296. // Draw random inhabitants and the rotating torus/sphere duo
  297. void DrawInhabitants( GLint nShadow )
  298. { // nShadow == 1 - rysowanie cieni, nShadow == 0 - rysowanie obieków
  299. static GLfloat yRot = 0.0f; // kąt obrotu
  300. GLint i;
  301.  
  302. if ( nShadow == 0 )
  303. {
  304. yRot += 0.5f; // zwiększenie kąta obrotu kuli i torusa
  305. glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); // biały 'podkład' pod teksturę obiektów
  306. }
  307. // 43. ustawienie czarnego koloru rysowania jeżeli nShadow == 1
  308. // ...
  309.  
  310.  
  311. // 32b. Ustawienie tektury SPHERE_TEXTURE jako aktualnej tekstury dwuwymiarowej
  312. // (GL_TEXTURE_2D) funkcją glBindTexture()
  313. // ...
  314. glBindTexture( GL_TEXTURE_2D, textures[ SPHERE_TEXTURE ] );
  315.  
  316. // 19. Narysowanie losowych NUM_SPHERES sfer
  317. // Przed narysowaniem sfery należy zachować aktualną wartość macierzy widoku modelu
  318. // oraz wykonać przesunięcie współrzędnych metodą ApplyActorTransform()
  319. // Do narysowania sfery o promieniu 0.1 należy użyć funkcji gltDrawSphere() z dokładnością 40
  320. // Po narysowaniu sfery należy odtworzyć aktualną wartość macierzy widoku modelu
  321.  
  322.  
  323.  
  324. glPushMatrix();
  325. glTranslatef( 0.0f, 0.1f, -2.5f );
  326. applyact
  327.  
  328. // 20. Narysowanie sfery obracającej się wokół torusa
  329. // - zachowanie macierzy widoku modelu
  330. // - obrót wokół osi Y o kąt równy 2*yRots
  331. // - przesunięcie o 1 wzdłuż osi X
  332. // - odtworzenie macierzy widoku modelu
  333. // ...
  334.  
  335.  
  336. // 32b. Ustawienie tektury TORUS_TEXTURE jako aktualnej tekstury dwuwymiarowej
  337. // (GL_TEXTURE_2D) funkcją glBindTexture()
  338. // ...
  339.  
  340.  
  341. // 21. Narysowanie obracającego się torusa
  342. // - ustawienie odbłyskowych własności (GL_SPECULAR) materiału dla
  343. // przedniej ścianki (GL_FRONT)na kolor fBrightLight[] funkcją
  344. // glMaterialfv
  345. // - obrót wokół osi Y o kąt yRot
  346. // - narysowanie torusa funkcją gltDrawTorus() z promieniami
  347. // 0.35 i 0.15 oraz z dokładnością 40
  348. // - odtworzenie macierzy widoku modelu
  349. // - usunięcie odbłyskowych własności materiału używając koloru fNoLight
  350. // ...
  351.  
  352. }
  353.  
  354.  
  355. void RenderScene( void )
  356. { // rysowanie sceny
  357. static int iFrames = 0; // licznik ramek
  358. static CStopWatch frameTimer; // timer
  359.  
  360. // 5. Wyczyszczenie okna bieżącym kolorem czyszczenia
  361. // używamy funkcji glClear czyszcząc bufor obrazu (GL_COLOR_BUFFER_BIT),
  362. // bufor głębokości (GL_DEPTH_BUFFER_BIT) oraz bufor szablonu
  363. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
  364.  
  365.  
  366. glPushMatrix();
  367. frameCamera.ApplyCameraTransform();
  368.  
  369. // 14. Ustawienie pozycji (GL_POSITION) światła GL_LIGHT0 na
  370. // wektor vLightPos funkcją glLightfv()
  371. glLightfv(GL_LIGHT0,GL_POSITION,fLightPos);
  372.  
  373.  
  374. glColor3f( 1.0f, 1.0f, 1.0f );
  375. // 17. Narysowanie terenu
  376. //
  377. DrawGround();
  378.  
  379. // 42. Narysowanie cieni
  380. // -wyłączenie testu głębokości (GL_DEPTH_TEST), oświetlenia (GL_LIGHTING),
  381. // teksturowania (GL_TEXTURE_2D)
  382. // - włączenie obsługi przezroczystości (GL_BLEND) i bufora szablonu (GL_STENCIL_TEST)
  383. // - ustawienie funkcji przezroczystości glBlendFunc() na GL_SRC_ALPHA i GL_ONE_MINUS_SRC_ALPHA
  384. // - zapamiętanie bieżacej macierzy przekształceń
  385. // - przemnożenie aktualnej macierzy przekształceń przez macierz cienia mShadowMatrix
  386. // funkcją glMultMatrixf()
  387. // - narysowanie sfer i torusa. UWAGA na parametr!
  388. // odtworzenie macierzy przekształceń
  389. // odtworzenie parametrów stanu
  390. // ...
  391.  
  392.  
  393. // 22. Narysowanie kul i torusa (bez cieni)
  394. // ...
  395.  
  396.  
  397. glPopMatrix(); // odtworzenie macierzy przekształceń
  398.  
  399. glutSwapBuffers(); // wysłanie komend renderowania i przełączenie buforów
  400.  
  401. iFrames++; // zwiększenie licznika ramek
  402.  
  403. if ( iFrames == 100 )
  404. { // obliczenie częstotliwości wyświetlania
  405. float fps;
  406. char cBuffer[ 200 ];
  407. fps = 100.0f / frameTimer.GetElapsedSeconds();
  408. if ( displayListOn )
  409. sprintf( cBuffer, "%s [Display Lists] %.1f fps", appTitle, fps );
  410. else
  411. sprintf( cBuffer, "%s [Tryb bezpośredni] %.1f fps", appTitle, fps );
  412. glutSetWindowTitle( cBuffer );
  413. frameTimer.Reset();
  414. iFrames = 0;
  415. }
  416. }
  417.  
  418. void KeyPressFunc( unsigned char key, int x, int y )
  419. { // obsługa przycisków
  420. switch ( key )
  421. {
  422. case ' ': // spacja
  423. // Naprzemienne włączenie użycia displayList po naciśnięciu spacji
  424. displayListOn = !displayListOn;
  425. break;
  426. case 27: // ESC
  427. // 4. Zamknięcie okna funkcją: void glutDestroyWindow( int window )
  428. // id okna należy pobrać funkcją: int glutGetWindow( void )
  429. glutDestroyWindow( glutGetWindow() );
  430.  
  431. break;
  432. }
  433. glutPostRedisplay(); // odświeżenie okna
  434. }
  435.  
  436. void SpecialKeys( int key, int x, int y )
  437. { // obsługa klawiszy specjalnych
  438. switch ( key )
  439. {
  440. case GLUT_KEY_UP:
  441. frameCamera.MoveForward( 0.1f );
  442. break;
  443. case GLUT_KEY_DOWN:
  444. frameCamera.MoveForward( -0.1f );
  445. break;
  446. case GLUT_KEY_LEFT:
  447. frameCamera.RotateLocalY( 0.01f );
  448. break;
  449. case GLUT_KEY_RIGHT:
  450. frameCamera.RotateLocalY( -0.01f );
  451. break;
  452. }
  453. glutPostRedisplay(); // odświeżenie okna
  454. }
  455.  
  456. ///////////////////////////////////////////////////////////
  457. void TimerFunction( int value )
  458. { // wywoływana przez GLUT w trybie idle
  459. glutPostRedisplay();
  460. glutTimerFunc( 3, TimerFunction, 1 );
  461. }
  462.  
  463. void ChangeSize( int w, int h )
  464. {
  465. // 6. Zabezpieczenie, aby rozmiary okna Viewport nie spadły poniżej 1
  466. if(w<1)
  467. w=1;
  468. if(h<1)
  469. h=1;
  470.  
  471.  
  472. // 7. Ustawienie okna Viewport na całą szerokość okna Window
  473. // Należy skorzystać z funkcji glViewport( .. )
  474. glViewport(0,0,w,h);
  475.  
  476.  
  477. GLfloat fAspect; // proporcje okna
  478. // 8. Wyznaczenie proporcji okna (w/h).
  479. // !!! UWAGA na ograniczenia dzielenia całkowitoliczbowego !!!
  480. fAspect = ((float) w) / ((float) h);
  481.  
  482.  
  483. // 9. Ustawienie macierzy rzutowania (GL_PROJECTION) jako aktualnej macierzy
  484. // funkcją glMatrixMode()
  485. glMatrixMode(GL_PROJECTION);
  486.  
  487.  
  488. // 10. Ustawienie macierzy rzutowania jako macierzy jednostkowej funkcją
  489. glLoadIdentity();
  490. // ...
  491.  
  492.  
  493. // 11. Ustawienie rzutowania perspektywicznego funkcją gluPerspective()
  494. // kąt widzenia = 35 stopni, odległość od bliższej płaszczyzny obcinania = 1
  495. // odległość od dalszej płaszczyzny obcinania = 50
  496. gluPerspective(35.0f,fAspect,1.0f,50.0f);
  497.  
  498.  
  499. // 12. Ustawienie macierzy widoku modelu (GL_MODELVIEW) jako aktualnej macierzy
  500. glMatrixMode(GL_MODELVIEW);
  501.  
  502. // 13. Ustawienie macierzy widoku modelu jako macierzy jednostkowej
  503. glLoadIdentity();
  504.  
  505. }
  506.  
  507. int main( int argc, char* argv[] )
  508. {
  509. glutInit( &argc, argv );
  510. glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL );
  511. glutInitWindowSize( 800, 600 );
  512. glutCreateWindow( appTitle ); // utworzenie okna
  513. glutReshapeFunc( ChangeSize );
  514. glutDisplayFunc( RenderScene );
  515. glutKeyboardFunc( KeyPressFunc ); // funkcja obsługi klawiatury
  516. glutSpecialFunc( SpecialKeys );
  517.  
  518. SetupRC();
  519. glutTimerFunc( 33, TimerFunction, 1 );
  520.  
  521. glutMainLoop();
  522.  
  523. ShutdownRC();
  524. return 0;
  525. }
Add Comment
Please, Sign In to add comment