SHARE
TWEET

Untitled

a guest Jan 24th, 2020 81 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. //ZESTAW 7, ZADANIE 14 - Indywidualne
  3. #include <GL/glut.h>
  4. #include "math.h"
  5. #include "materials.h"
  6. #include <stdio.h>
  7.  
  8.  
  9.  
  10. // Definicja stalych
  11. #define DLUGOSC_BOKU            10.0
  12. #define OBSERWATOR_ODLEGLOSC    20.0
  13. #define OBSERWATOR_OBROT_X      20.0
  14. #define OBSERWATOR_OBROT_Y      20.0
  15. #define OBSERWATOR_FOV_Y        30.0  
  16. int zmienna = 5;
  17. int zmienna2 = 5;
  18. int smooth = 1;
  19. int fill = 1;
  20. int zrodlo1 = 1;
  21. int zrodlo2 = 1;
  22. int obecnymaterial = 0;
  23. int normalne = 1;
  24. int promien = 10;
  25. float v = 10;
  26. float v1, v2, v3;
  27. float kat;
  28. int zmien = 1;
  29.  
  30. float material1[5][4] = {
  31.     {0.174500, 0.011750, 0.011750, 0.550000},  // [0] wspolczynnik odbicia swiatla otoczenia
  32.     {0.614240, 0.041360, 0.041360, 0.550000},  // [1] wspolczynnik odbicia swiatla rozproszonego
  33.     {0.727811, 0.626959, 0.626959, 0.550000},  // [2] wspolczynnik odbicia swiatla lustrzanego
  34.     {76.8, 0.0, 0.0, 0.0}, // [3] polysk
  35.     {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  36.   // Tablica parametrow materialu nr 2
  37. float material2[5][4] = {
  38.   {1, 1, 1, 1.000000},  // [0] wspolczynnik odbicia swiatla otoczenia
  39.   {1, 1, 1, 1.000000},  // [1] wspolczynnik odbicia swiatla rozproszonego
  40.   {1, 1, 1, 1.000000},  // [2] wspolczynnik odbicia swiatla lustrzanego
  41.   {0, 0.0, 0.0, 0.0},  // [3] polysk
  42.   {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  43. float material3[5][4] = {
  44.     {0.174500, 0.011750, 0.011750, 0.550000},  // [0] wspolczynnik odbicia swiatla otoczenia
  45.     {0.614240, 0.041360, 0.041360, 0.550000},  // [1] wspolczynnik odbicia swiatla rozproszonego
  46.     {0.727811, 0.626959, 0.626959, 0.550000},  // [2] wspolczynnik odbicia swiatla lustrzanego
  47.     {76.8, 0.0, 0.0, 0.0}, // [3] polysk
  48.     {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  49. // Tablica parametrow zrodla swiatla nr 1
  50. GLfloat swiatlo1[5][4] =
  51. {
  52.   {0.8, 0.8, 0, 1.0},   // [0] otoczenie
  53.   {0.1, 0.2, 0.3, 1.0},   // [1] rozproszenie
  54.   {0.2, 0.8, 1, 1.0},   // [2] lustrzane
  55.   {5, 10, 0, 1.0},// [3] polozenie
  56.   {1.0, 1.0, 1.0, 0.0}// [4] kierunek swiecenia
  57. };
  58.  
  59.  
  60.  
  61. // Tablica parametrow zrodla swiatla nr 2
  62. GLfloat swiatlo2[5][4] = {
  63.   {0, 1, 1, 1.0},   // [0] otoczenie
  64.   {0, 0.2, 0.5, 1.0},   // [1] rozproszenie
  65.   {0, 18, 1, 1.0},   // [2] lustrzane
  66.   {10.0, -10.0, 10.0, 1.0},// [3] polozenie
  67.   {-1.0, -1.0, -1.0, 0.0}// [4] kierunek swiecenia
  68. };
  69.  
  70.  
  71.  
  72. // Zmienne globalne
  73. double  bok = DLUGOSC_BOKU; // Dlugosc boku szescianu
  74. int     szerokoscOkna = 800;
  75. int     wysokoscOkna = 600;
  76. int zm1 = 1;
  77. int a = 5;
  78. float length;
  79. GLfloat minOdl = -10.0;
  80. GLfloat maxOdl = -200.0;
  81. GLfloat obsOdl = -30.0;
  82. GLfloat rotObsY = 40.0;
  83. GLfloat rotObsX = 40.0;
  84. GLfloat rotObsZ = 0.0;
  85.  
  86. // Prototypy funkcji
  87. void RysujSzescian(int N);
  88. void UstawParametryWidoku(int szer, int wys);
  89. void WyswietlObraz(void);
  90. void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
  91. void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y);
  92.  
  93. //////////////////////////////////////////////////////////////////////////////////////////
  94. // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
  95. // Srodek szescianu znajduje siÄ™ w punkcie (0,0,0).
  96.  
  97.  
  98. void PoliczNormal(float x1, float x2, float x3, float y1, float y2, float y3, float z1, float z2, float z3, float* normal)
  99. {
  100.     float xa = x2 - x1;
  101.     float ya = y2 - y1;
  102.     float za = z2 - z1;
  103.  
  104.     float xb = x3 - x1;
  105.     float yb = y3 - y1;
  106.     float zb = z3 - z1;
  107.  
  108.     normal[0] = ya * zb - za * yb;
  109.     normal[1] = za * xb - xa * zb;
  110.     normal[2] = xa * yb - ya * xb;
  111.     //normalizacja
  112.     length = sqrtf(normal[0] * normal[0] + normal[1] * normal[1] + normal[2] * normal[2]);
  113.  
  114.     normal[0] /= length;
  115.     normal[1] /= length;
  116.     normal[2] /= length;
  117. }
  118. void UstawSwiatlaIMaterialy()
  119. {
  120.     glEnable(GL_LIGHTING);
  121.     // Odblokowanie zrodla swiatla nr 1
  122.     if (zrodlo1 == 1) {
  123.         glEnable(GL_LIGHT0);
  124.         glLightfv(GL_LIGHT0, GL_AMBIENT, swiatlo1[0]);
  125.         glLightfv(GL_LIGHT0, GL_DIFFUSE, swiatlo1[1]);
  126.         glLightfv(GL_LIGHT0, GL_SPECULAR, swiatlo1[2]);
  127.         glLightfv(GL_LIGHT0, GL_POSITION, swiatlo1[3]);
  128.         glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, swiatlo1[4]);
  129.  
  130.     }
  131.     else {
  132.         //wylaczenie zrodla swiatla nr 1
  133.         glDisable(GL_LIGHT0);
  134.     }
  135.     // Odblokowanie zrodla swiatla nr 2
  136.     if (zrodlo2 == 1) {
  137.         glEnable(GL_LIGHT1);
  138.         glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo2[0]);
  139.         glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo2[1]);
  140.         glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo2[2]);
  141.         glLightfv(GL_LIGHT1, GL_POSITION, swiatlo2[3]);
  142.         glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo2[4]);
  143.  
  144.     }
  145.     else {
  146.         //wylaczenie zrodla swiatla nr 2
  147.         glDisable(GL_LIGHT1);
  148.     }
  149.  
  150.     switch (obecnymaterial)
  151.     {
  152.     case 0:
  153.         glMaterialfv(GL_FRONT, GL_AMBIENT, material1[0]);
  154.         glMaterialfv(GL_FRONT, GL_DIFFUSE, material1[1]);
  155.         glMaterialfv(GL_FRONT, GL_SPECULAR, material1[2]);
  156.         glMaterialfv(GL_FRONT, GL_SHININESS, material1[3]);
  157.         glMaterialfv(GL_FRONT, GL_EMISSION, material1[4]);
  158.         break;
  159.     case 1:
  160.         glMaterialfv(GL_FRONT, GL_AMBIENT, material2[0]);
  161.         glMaterialfv(GL_FRONT, GL_DIFFUSE, material2[1]);
  162.         glMaterialfv(GL_FRONT, GL_SPECULAR, material2[2]);
  163.         glMaterialfv(GL_FRONT, GL_SHININESS, material2[3]);
  164.         glMaterialfv(GL_FRONT, GL_EMISSION, material2[4]);
  165.         break;
  166.     case 2:
  167.         glMaterialfv(GL_FRONT, GL_AMBIENT, material3[0]);
  168.         glMaterialfv(GL_FRONT, GL_DIFFUSE, material3[1]);
  169.         glMaterialfv(GL_FRONT, GL_SPECULAR, material3[2]);
  170.         glMaterialfv(GL_FRONT, GL_SHININESS, material3[3]);
  171.         glMaterialfv(GL_FRONT, GL_EMISSION, material3[4]);
  172.         break;
  173.     default:
  174.         break;
  175.     }
  176. }
  177.  
  178. void RysujTekstRastrowy(void* font, char* tekst)
  179. {
  180.     int i = 0;
  181.     while (tekst[i] != '\0')
  182.     {
  183.         glutBitmapCharacter(font, tekst[i]);
  184.         i++;
  185.     }
  186. }
  187.  
  188.  
  189.  
  190.  
  191. void RysujNakladke(void)
  192. {
  193.     char tab[13][50] =
  194.     { "+ - Oddalenie",
  195.      "- - Przyblizenie",
  196.      "p - Zmiana materialu stozka",
  197.      "o - Sterowanie swiatlem nr. 1",
  198.      "u - Sterowanie swiatlem nr. 2",
  199.      "i - Widocznosc wektorow normalnych",
  200.      "7 - Zmiana cienia (GL_SMOOTH i GL_FLAT)",
  201.      "6 ^ - Zmiana wypelnienia (GL_FILL, GL_LINE)",
  202.      "1 - Zmniejszanie ilosci podzialow pionowych",
  203.      "2 - Zwiekszanie ilosci podzialow pionowych ",
  204.      "4- Zmniejszanie ilosci podzialow poziomych",
  205.      "5- Zwiekszenie ilosci podzialow poziomych",
  206.      "Strzałki + zx  - Sterowanie kamera",
  207.     };
  208.     int i;
  209.  
  210.     // Zmiana typu rzutu z perspektywicznego na ortogonalny
  211.     glDisable(GL_LIGHTING);
  212.     glMatrixMode(GL_PROJECTION);
  213.     glPushMatrix();
  214.     glLoadIdentity();
  215.     glOrtho(0.0, szerokoscOkna, 0.0, wysokoscOkna, -100.0, 100.0);
  216.  
  217.     // Modelowanie sceny 2D (zawartosci nakladki)
  218.     glMatrixMode(GL_MODELVIEW);
  219.     glPushMatrix();
  220.     glLoadIdentity();
  221.  
  222.  
  223.  
  224.     // Okreslenie koloru tekstu
  225.     glColor3f(1.0, 1.0, 1.0);
  226.  
  227.     // RYSOWANIE MENU PARAMETROW ZRODLA SWIATLA
  228.  
  229.     for (i = 0;i < 13;i++)
  230.     {
  231.         glRasterPos2i(10, 10 + i * 13);
  232.         RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, tab[13 - i - 1]);
  233.     }
  234.  
  235.     glMatrixMode(GL_PROJECTION);
  236.     glPopMatrix();
  237.     glMatrixMode(GL_MODELVIEW);
  238.     glPopMatrix();
  239.     glEnable(GL_LIGHTING);
  240. }
  241.  
  242. void RysujStozekBezPodstaw(float R, float r, float y, float h, int n)
  243. {
  244.     float alfa;
  245.     int i;
  246.     float x;
  247.     float z;
  248.  
  249.     float normal[3];
  250.     float x1, x2, x3, z1, z2, z3, y1, y2, y3, xa, za;
  251.  
  252.  
  253.     glBegin(GL_QUAD_STRIP);
  254.  
  255.     alfa = 90.0 / n;   //kat
  256.     for (i = 0; i <= n; i++)
  257.     {
  258.  
  259.         x = cos(0.0174532925f * i * alfa);
  260.         z = sin(0.0174532925f * i * alfa);
  261.         xa = cos(0.0174532925f * (i + 1) * alfa);
  262.         za = sin(0.0174532925f * (i + 1) * alfa);
  263.  
  264.         glVertex3f(x * R, y + 0, z * R);
  265.         glVertex3f(x * r, y + h, z * r);
  266.  
  267.  
  268.  
  269.     }
  270.  
  271.  
  272.     x = cos(0.0);
  273.     z = sin(0.0);
  274.  
  275.     // glVertex3f(R, y + 0, 0);  
  276.     // glVertex3f(r, y + h, 0);    
  277.  
  278.     glEnd();
  279.  
  280. }
  281.  
  282.  
  283.  
  284. void RysujKolo(float R, float y, int n)
  285. {
  286.     float alfa;
  287.     int i;
  288.     float x;
  289.     float z;
  290.  
  291.     glColor3f(0.0, 0.0, 1.0);
  292.     glBegin(GL_TRIANGLE_FAN);
  293.  
  294.     glVertex3f(0, y, 0);
  295.  
  296.     alfa = 90.0f / n;
  297.     for (i = 0; i <= n; i++)
  298.     {
  299.         x = cos(0.0174532925f * i * alfa);
  300.         z = sin(0.0174532925f * i * alfa);
  301.  
  302.         glVertex3f(x * R, y + 0, z * R);
  303.     }
  304.  
  305.  
  306.     x = cos(0.0);
  307.     z = sin(0.0);
  308.  
  309.     glVertex3f(x * R, y + 0, z * R);
  310.  
  311.     glEnd();
  312. }
  313.  
  314.  
  315. void ScianaBoczna(float R, float h)
  316. {
  317.     glColor3f(1, 0.0, 0.5);   // sciana boczna
  318.     glBegin(GL_QUAD_STRIP);
  319.     glVertex3f(R, 0, 0);
  320.     glVertex3f(R, h, 0);
  321.     glVertex3f(0, 0, 0);
  322.     glVertex3f(0, h, 0);
  323.     glVertex3f(0, 0, R);
  324.     glVertex3f(0, h, R);
  325.    
  326.  
  327.     glEnd();
  328.  
  329. }
  330.  
  331. void RysujWektory(float R, float r, float y, float h, int n)
  332. {
  333.     float alfa;
  334.     int i;
  335.     float x;
  336.     float z;
  337.     float normal[3];
  338.     float x1, x2, x3, z1, z2, z3, y1, y2, y3, xa, za;
  339.  
  340.  
  341.  
  342.  
  343.     alfa = 90.0 / n;   //kat
  344.     for (i = 0; i <= n; i++)
  345.     {
  346.  
  347.         x = cos(0.0174532925f * i * alfa);
  348.         z = sin(0.0174532925f * i * alfa);
  349.         xa = cos(0.0174532925f * (i + 1) * alfa);
  350.         za = sin(0.0174532925f * (i + 1) * alfa);
  351.  
  352.         x1 = x * R;
  353.         x2 = x * r;
  354.         x3 = xa * R;
  355.         y1 = y;
  356.         y2 = y + h;
  357.         y3 = y;
  358.         z1 = z * R;
  359.         z2 = z * r;
  360.         z3 = za * R;
  361.  
  362.         PoliczNormal(x1, x2, x3, y1, y2, y3, z1, z2, z3, normal);
  363.  
  364.         if (normalne)
  365.         {
  366.             glBegin(GL_LINES);
  367.  
  368.             glVertex3f(x * R, y + 0, z * R);
  369.             glVertex3f(x1 + normal[0], y1 + normal[1], z1 + normal[2]);
  370.             glVertex3f(x * r, y + h, z * r);
  371.             glVertex3f(x2 + normal[0], y2 + normal[1], z2 + normal[2]);
  372.  
  373.             glEnd();
  374.         }
  375.     }
  376.  
  377.  
  378.  
  379.  
  380. }
  381.  
  382.  
  383.  
  384. void RysujStozekZPodzialami(float R, float r, float h, int n, int m)
  385. {
  386.     int i;
  387.     float dR, dr, dh, y, tmp1, tmp2;
  388.     dh = h / m;   // wysokosc nowego stozka
  389.     for (i = 0; i < m; i++)
  390.     {
  391.  
  392.         y = dh * i;   // poczatkowa wysokosc
  393.         tmp1 = y / h;
  394.         tmp2 = (y + dh) / h;
  395.         dR = R + (r - R) * tmp1;        // promien dolnej podstawy nowego stozka
  396.         dr = R + (r - R) * tmp2;        // promien gornej podstawy nowego stozka
  397.         if (i % 2 == 0)
  398.             glColor3f(0.0, 1.0, 0.0);
  399.         else
  400.             glColor3f(1.0, 0.0, 1.0);
  401.         RysujStozekBezPodstaw(dR, dr, y, dh, n);
  402.         RysujWektory(dR, dr, y, dh, n);
  403.     }
  404.     RysujKolo(R, 0, n);
  405.     RysujKolo(r, h, n);
  406.     ScianaBoczna(R, h);
  407. }
  408.  
  409.  
  410. void RysujSzescian()
  411. {
  412.  
  413.     // Pocztaek tworzenia ukladu wspolrzednych
  414.     glBegin(GL_LINES);
  415.  
  416.     // Os X
  417.     glColor3f(1.0, 0.0, 0.0);
  418.  
  419.     glVertex3f(-25.0, 0.0, 0.0);
  420.     glVertex3f(25.0, 0.0, 0.0);
  421.  
  422.     // Os Y
  423.     glColor3f(0.0, 1.0, 0.0);
  424.     glVertex3f(0.0, -25.0, 0.0);
  425.     glVertex3f(0.0, 25.0, 0.0);
  426.  
  427.     // Os Z
  428.     glColor3f(0.0, 0.0, 1.0);
  429.     glVertex3f(0.0, 0.0, -25.0);
  430.     glVertex3f(0.0, 0.0, 25.0);
  431.  
  432.     // Koniec tworzenia ukladu wspolrzednych
  433.     glEnd();
  434.     glColor3f(1.0, 1.0, 1.0);
  435.     glShadeModel(GL_FLAT);
  436.     // Sciany boczne
  437.     glBegin(GL_QUAD_STRIP);
  438.     glColor3f(1.0, 0, 0);
  439.     glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  440.     glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  441.     glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  442.     glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  443.  
  444.     glColor3f(1.0, 0.5, 0.5);
  445.     glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  446.     glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  447.     glColor3f(0.0, 1.0, 0);
  448.     glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  449.     glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  450.     glColor3f(0.0, 0, 1.0);
  451.     glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  452.     glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  453.     glEnd();
  454.  
  455.     // Gorna sciana
  456.     glColor3f(0.5, 0.5, 1.0);
  457.     glBegin(GL_QUAD_STRIP);
  458.     glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  459.     glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  460.     glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  461.     glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  462.     glEnd();
  463.  
  464.     // Dolna sciana
  465.     glBegin(GL_QUAD_STRIP);
  466.     glColor3f(0.5, 0, 0.5);
  467.     glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  468.     glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  469.     glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  470.     glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  471.     glEnd();
  472.  
  473.  
  474.  
  475. }
  476.  
  477.  
  478.  
  479. //////////////////////////////////////////////////////////////////////////////////////////
  480. // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu. Powinna
  481. // być wywolywana kazdorazowo po zmianie rozmiarow okna programu.
  482. void UstawParametryWidoku(int szer, int wys)
  483. {
  484.     // Zapamietanie wielkosci widoku
  485.     szerokoscOkna = szer;
  486.     wysokoscOkna = wys;
  487.  
  488.     // Ustawienie parametrow viewportu
  489.     glViewport(0, 0, szerokoscOkna, wysokoscOkna);
  490.  
  491.     // Przejscie w tryb modyfikacji macierzy rzutowania
  492.     glMatrixMode(GL_PROJECTION);
  493.     glLoadIdentity();
  494.     gluPerspective(OBSERWATOR_FOV_Y, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
  495. }
  496.  
  497. void SwapLineFill(int zm1)
  498. {
  499.     if (zm1 == 1)
  500.         glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  501.     else
  502.         glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  503.  
  504. }
  505.  
  506. void SyncSmooth()
  507. {
  508.     if (smooth)
  509.         glShadeModel(GL_SMOOTH);
  510.     else
  511.         glShadeModel(GL_FLAT);
  512. }
  513. //////////////////////////////////////////////////////////////////////////////////////////
  514. // Funkcja wyswietlajaca pojedyncza klatke animacji
  515. void WyswietlObraz(void)
  516. {
  517.     // Wyczyszczenie bufora koloru i bufora glebokosci
  518.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  519.  
  520.     // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
  521.     glMatrixMode(GL_MODELVIEW);
  522.  
  523.     // Zastapienie aktywnej macierzy macierza jednostkowa
  524.     glLoadIdentity();
  525.  
  526.     // Ustalenie polozenia obserwatora
  527.     glTranslatef(0, 0, obsOdl);
  528.     glRotatef(rotObsX, 1, 0, 0);
  529.     glRotatef(rotObsY, 0, 1, 0);
  530.     glRotatef(rotObsZ, 0, 0, 1);
  531.     // Narysowanie szescianu
  532.    // RysujSzescian();
  533.     glColor3f(1.0, 1.0, 1.0);
  534.  
  535.     RysujStozekZPodzialami(2, 2, 3, zmienna, zmienna2);
  536.     SwapLineFill(zm1);
  537.     UstawSwiatlaIMaterialy();
  538.     RysujNakladke();
  539.     // Przelaczenie buforow ramki
  540.     glutSwapBuffers();
  541. }
  542.  
  543.  
  544. //////////////////////////////////////////////////////////////////////////////////////////
  545. // Funkcja obslugi klawiatury
  546. void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
  547. {
  548.     switch (klawisz)
  549.     {
  550.     case '+':
  551.         if (obsOdl < minOdl)
  552.             obsOdl++;
  553.         break;
  554.  
  555.     case '-':
  556.         if (obsOdl > maxOdl)
  557.             obsOdl--;
  558.         break;
  559.  
  560.     case 'z':
  561.         rotObsZ++;
  562.         break;
  563.  
  564.     case 'x':
  565.         rotObsZ--;
  566.         break;
  567.  
  568.     case '1':
  569.         zmienna = (zmienna > 4) ? zmienna - 1 : zmienna;
  570.         break;
  571.     case '2':
  572.         zmienna = (zmienna < 64) ? zmienna + 1 : zmienna;
  573.         break;
  574.     case '4':
  575.         zmienna2 = (zmienna2 > 4) ? zmienna2 - 1 : zmienna2;
  576.         break;
  577.     case '5':
  578.         zmienna2 = (zmienna2 < 64) ? zmienna2 + 1 : zmienna2;
  579.         break;
  580.     case '^':
  581.         zm1 = 0;
  582.         break;
  583.     case '6':
  584.         zm1 = 1;
  585.         break;
  586.     case '7':
  587.         smooth = !smooth;
  588.         SyncSmooth();
  589.         break;
  590.  
  591.     case 'p':
  592.         obecnymaterial++;
  593.         if (obecnymaterial > 2)
  594.             obecnymaterial = 0;
  595.         break;
  596.     case 'o':
  597.         zrodlo1 = !zrodlo1;
  598.         break;
  599.     case 'u':
  600.         zrodlo2 = !zrodlo2;
  601.         break;
  602.     case 'i':
  603.         normalne = !normalne;
  604.         break;
  605.  
  606.     }
  607. }
  608.  
  609. void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y)
  610. {
  611.     switch (klawisz)
  612.     {
  613.     case GLUT_KEY_UP:
  614.         rotObsX++;
  615.         break;
  616.  
  617.     case GLUT_KEY_DOWN:
  618.         rotObsX--;
  619.         break;
  620.  
  621.     case GLUT_KEY_LEFT:
  622.         rotObsY++;
  623.         break;
  624.  
  625.     case GLUT_KEY_RIGHT:
  626.         rotObsY--;
  627.         break;
  628.     }
  629. }
  630.  
  631. //////////////////////////////////////////////////////////////////////////////////////////
  632. // Glowna funkcja programu
  633. int  main(int argc, char** argv)
  634. {
  635.  
  636.     // Zainicjowanie biblioteki GLUT
  637.     glutInit(&argc, argv);
  638.  
  639.     // Ustawienie trybu wyswietlania
  640.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  641.  
  642.     // Ustawienie polozenia dolenego lewego rogu okna
  643.     glutInitWindowPosition(100, 100);
  644.  
  645.     // Ustawienie rozmiarow okna
  646.     glutInitWindowSize(szerokoscOkna, wysokoscOkna);
  647.  
  648.     // Utworzenie okna
  649.     glutCreateWindow("Szescian");
  650.  
  651.     // Odblokowanie bufora glebokosci
  652.     glEnable(GL_DEPTH_TEST);
  653.  
  654.     // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
  655.     glClearDepth(1000.0);
  656.  
  657.     // Ustawienie koloru czyszczenia bufora ramki
  658.     glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  659.  
  660.     // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
  661.  
  662.     //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  663.  
  664.  
  665.     // Zarejestrowanie funkcji (callback) odpowiedzialnej za
  666.     glutDisplayFunc(WyswietlObraz);
  667.  
  668.     // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
  669.     // zmieniane sa rozmiary okna
  670.     glutReshapeFunc(UstawParametryWidoku);
  671.  
  672.     // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
  673.     // zadnych zadan
  674.     glutIdleFunc(WyswietlObraz);
  675.  
  676.     // Zarejestrowanie funkcji obslugi klawiatury
  677.     glutKeyboardFunc(ObslugaKlawiatury);
  678.  
  679.     //DOPISANE
  680.     glutSpecialFunc(ObslugaKlawiszySpecjalnych);
  681.  
  682.     // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
  683.     // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
  684.     glutMainLoop();
  685.  
  686.     return 0;
  687. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top