Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.69 KB | None | 0 0
  1. // lab2jajko.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
  2. //
  3.  
  4. #include "pch.h"
  5. #include <iostream>
  6. #include <windows.h>
  7. #include <gl/gl.h>
  8. #include <gl/glut.h>
  9. #include <ctime>
  10.  
  11.  
  12. typedef float point3[3];
  13.  
  14. static GLfloat viewer[] = { 0.0, 0.0, 0.0 }; // inicjalizacja położenia obserwatora, viewer[2] przybliżanie
  15.  
  16. static GLfloat theta[] = { 0.0, 0.0, 0.0 }; // trzy kąty obrotu   // kąt obrotu obiektu
  17. static GLfloat pix2angleX;     // przelicznik pikseli na stopnie
  18. static GLfloat pix2angleY;
  19. static GLfloat thetaY = 0.0;   // kąt obrotu obiektu
  20.  
  21. static GLint status = 0;       // stan klawiszy myszy 0 - nie naciśnięto żadnego klawisza, 1 - naciśnięty zostać lewy klawisz, 2 - naciśnięto prawy klawisz myszy
  22.  
  23. static int x_pos_old = 0;       // poprzednia pozycja kursora myszy
  24. static int delta_x = 0;        // różnica pomiędzy pozycją bieżącą i poprzednią kursora myszy
  25. static int y_pos_old = 0;
  26. static int delta_y = 0;
  27.  
  28. const double MOJE_PI = 3.14159265359;
  29. int model = 3;
  30. const int N = 30;
  31.  
  32.  
  33. int R = 20;
  34. /*************************************************************************************/
  35. // Mój program do rysowania jajka
  36.  
  37. struct point2
  38. {
  39.     float u;
  40.     float v;
  41. };
  42.  
  43. struct clors
  44. {
  45.     float R;
  46.     float G;
  47.     float B;
  48. };
  49.  
  50. clors colors[N][N];
  51.  
  52. //static GLfloat theta[] = { 0.0, 0.0, 0.0 }; // trzy kąty obrotu
  53.  
  54. //równania do krzywej Beziera
  55. double x(double u, double v)
  56. {
  57.     return (-90.0 * u*u*u*u*u + 225 * u*u*u*u - 270 * u*u*u + 180 * u*u - 45 * u)*cos(MOJE_PI*v);
  58. }
  59.  
  60. double y(double u, double v)
  61. {
  62.     return (160 * u*u*u*u - 320 * u*u*u + 160 * u*u);
  63. }
  64.  
  65. double z(double u, double v)
  66. {
  67.     return (-90.0 * u*u*u*u*u + 225 * u*u*u*u - 270 * u*u*u + 180 * u*u - 45 * u)*sin(MOJE_PI*v);
  68. }
  69.  
  70. void Egg()
  71. {
  72.     point3 tab3D[N][N];//przestrzeń 3D
  73.     point2 kwadratJednostkowy[N][N];
  74.     //double u = 0, v = 0;
  75.     double webLevel = 1.0f / N;
  76.  
  77.     for (int j = 0; j < N; j++)
  78.     {
  79.         for (int i = 0; i < N; i++)
  80.         {
  81.             kwadratJednostkowy[i][j].u = (1.0f / (N - 1)) * i;
  82.             kwadratJednostkowy[i][j].v = (1.0f / (N - 1)) * j;
  83.  
  84.             //std::cout << "u: " << kwadratJednostkowy[i][j].u << ", v: " << kwadratJednostkowy[i][j].v << "\n";
  85.         }
  86.         //std::cout << "\n";
  87.     }
  88.  
  89.     glTranslated(0, -5, 0);//przesunięcie w dół jajka
  90.     glRotated(0, 0.0, 0.0, 0.0);//obrócenie o -30 stopni wokół osi
  91.     glColor3f(255.0f, 255.0f, 0.0f);//żółte punkty
  92.  
  93.     if (model == 1)
  94.     {
  95.         glBegin(GL_POINTS);
  96.         for (int j = 0; j < N; j++)
  97.         {
  98.             for (int i = 0; i < N; i++)
  99.             {
  100.                 glVertex3f(x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), z(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v));
  101.             }
  102.         }
  103.         glEnd();
  104.     }
  105.     else if (model == 2)
  106.     {
  107.         glBegin(GL_LINES);
  108.         for (int j = 0; j < N; j++)
  109.         {
  110.             for (int i = 0; i < N; i++)
  111.             {
  112.  
  113.                 if (i - 1 >= 0)
  114.                     glVertex3f(z(kwadratJednostkowy[i - 1][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[i - 1][j].u, kwadratJednostkowy[i][j].v), x(kwadratJednostkowy[i - 1][j].u, kwadratJednostkowy[i][j].v));
  115.                 else
  116.                     glVertex3f(z(kwadratJednostkowy[N - 1][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[N - 1][j].u, kwadratJednostkowy[i][j].v), x(kwadratJednostkowy[N - 1][j].u, kwadratJednostkowy[i][j].v));
  117.                 glVertex3f(z(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v));
  118.  
  119.                 if (i - 1 >= 0)
  120.                     glVertex3f(z(kwadratJednostkowy[i - 1][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[i - 1][j].u, kwadratJednostkowy[i][j].v), x(kwadratJednostkowy[i - 1][j].u, kwadratJednostkowy[i][j].v));
  121.                 else
  122.                     glVertex3f(z(kwadratJednostkowy[N - 1][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[N - 1][j].u, kwadratJednostkowy[i][j].v), x(kwadratJednostkowy[N - 1][j].u, kwadratJednostkowy[i][j].v));
  123.                 if (j - 1 >= 0)
  124.                     glVertex3f(z(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j - 1].v), y(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j - 1].v), x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j - 1].v));
  125.                 else
  126.                     glVertex3f(z(kwadratJednostkowy[i][N - 1].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[i][N - 1].u, kwadratJednostkowy[i][j - 1].v), x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v));
  127.  
  128.                 if (j - 1 >= 0)
  129.                     glVertex3f(z(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j - 1].v), y(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j - 1].v), x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j - 1].v));
  130.                 else
  131.                     glVertex3f(z(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][0].v), y(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][0].v), x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][0].v));
  132.                 glVertex3f(z(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v));
  133.             }
  134.         }
  135.         glEnd();
  136.     }
  137.     else if (model == 3)
  138.     {
  139.  
  140.         for (int j = 0; j < N; j++)
  141.         {
  142.             for (int i = 0; i < N; i++)
  143.             {
  144.                 glBegin(GL_TRIANGLES);
  145.  
  146.                 if (i < N - 1 && j < N - 1)
  147.                 {
  148.                     glColor3f(colors[i][j].R, colors[i][j].G, colors[i][j].B);
  149.                     glVertex3f(z(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v));
  150.                     glColor3f(colors[i + 1][j].R, colors[i + 1][j].G, colors[i + 1][j].B);
  151.                     glVertex3f(z(kwadratJednostkowy[i+1][j].u, kwadratJednostkowy[i+1][j].v), y(kwadratJednostkowy[i+1][j].u, kwadratJednostkowy[i+1][j].v), x(kwadratJednostkowy[i+1][j].u, kwadratJednostkowy[i+1][j].v));
  152.                     glColor3f(colors[i + 1][j+1].R, colors[i + 1][j+1].G, colors[i + 1][j+1].B);
  153.                     glVertex3f(z(kwadratJednostkowy[i + 1][j + 1].u, kwadratJednostkowy[i + 1][j + 1].v), y(kwadratJednostkowy[i + 1][j + 1].u, kwadratJednostkowy[i + 1][j + 1].v), x(kwadratJednostkowy[i + 1][j + 1].u, kwadratJednostkowy[i + 1][j + 1].v));
  154.  
  155.                     glColor3f(colors[i][j].R, colors[i][j].G, colors[i][j].B);
  156.                     glVertex3f(z(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v));
  157.                     glColor3f(colors[i][j+1].R, colors[i][j+1].G, colors[i][j+1].B);
  158.                     glVertex3f(z(kwadratJednostkowy[i][j+1].u, kwadratJednostkowy[i][j+1].v), y(kwadratJednostkowy[i][j+1].u, kwadratJednostkowy[i][j+1].v), x(kwadratJednostkowy[i][j+1].u, kwadratJednostkowy[i][j+1].v));
  159.                     glColor3f(colors[i + 1][j + 1].R, colors[i + 1][j + 1].G, colors[i + 1][j + 1].B);
  160.                     glVertex3f(z(kwadratJednostkowy[i + 1][j + 1].u, kwadratJednostkowy[i + 1][j + 1].v), y(kwadratJednostkowy[i + 1][j + 1].u, kwadratJednostkowy[i + 1][j + 1].v), x(kwadratJednostkowy[i + 1][j + 1].u, kwadratJednostkowy[i + 1][j + 1].v));
  161.                 }
  162.  
  163.                 /*glColor3f(colors[i][j].R, colors[i][j].G, colors[i][j].B);
  164.                 glVertex3f(z(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), y(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v), x(kwadratJednostkowy[i][j].u, kwadratJednostkowy[i][j].v));
  165.  
  166.                 if (i + 1 < N)
  167.                 {
  168.                     glColor3f(colors[i + 1][j].R, colors[i + 1][j].G, colors[i + 1][j].B);
  169.                     glVertex3f(z(kwadratJednostkowy[i + 1][j].u, kwadratJednostkowy[i + 1][j].v), y(kwadratJednostkowy[i + 1][j].u, kwadratJednostkowy[i + 1][j].v), x(kwadratJednostkowy[i + 1][j].u, kwadratJednostkowy[i + 1][j].v));
  170.                 }
  171.                 else
  172.                 {
  173.                     glColor3f(colors[0][j].R, colors[0][j].G, colors[1][j].B);
  174.                     glVertex3f(z(kwadratJednostkowy[0][j].u, kwadratJednostkowy[0][j].v), y(kwadratJednostkowy[0][j].u, kwadratJednostkowy[0][j].v), x(kwadratJednostkowy[0][j].u, kwadratJednostkowy[0][j].v));
  175.                 }
  176.  
  177.                 if (j + 1 < N)
  178.                 {
  179.                     glColor3f(colors[i][j + 1].R, colors[i][j + 1].G, colors[i][j + 1].B);
  180.                     glVertex3f(z(kwadratJednostkowy[i][j + 1].u, kwadratJednostkowy[i][j + 1].v), y(kwadratJednostkowy[i][j + 1].u, kwadratJednostkowy[i][j + 1].v), x(kwadratJednostkowy[i][j + 1].u, kwadratJednostkowy[i][j + 1].v));
  181.                 }
  182.                 else
  183.                 {
  184.                     glColor3f(colors[i][0].R, colors[i][0].G, colors[i][1].B);
  185.                     glVertex3f(z(kwadratJednostkowy[i][0].u, kwadratJednostkowy[i][0].v), y(kwadratJednostkowy[i][0].u, kwadratJednostkowy[i][0].v), x(kwadratJednostkowy[i][0].u, kwadratJednostkowy[i][0].v));
  186.                 }
  187.                 glEnd();
  188.  
  189.                 glBegin(GL_TRIANGLES);
  190.                 if (j + 1 < N)
  191.                 {
  192.                     glColor3f(colors[i][j + 1].R, colors[i][j + 1].G, colors[i][j + 1].B);
  193.                     glVertex3f(z(kwadratJednostkowy[i][j + 1].u, kwadratJednostkowy[i][j + 1].v), y(kwadratJednostkowy[i][j + 1].u, kwadratJednostkowy[i][j + 1].v), x(kwadratJednostkowy[i][j + 1].u, kwadratJednostkowy[i][j + 1].v));
  194.                 }
  195.                 else
  196.                 {
  197.                     glColor3f(colors[i][0].R, colors[i][0].G, colors[i][0].B);
  198.                     glVertex3f(z(kwadratJednostkowy[i][0].u, kwadratJednostkowy[i][0].v), y(kwadratJednostkowy[i][0].u, kwadratJednostkowy[i][0].v), x(kwadratJednostkowy[i][0].u, kwadratJednostkowy[i][0].v));
  199.                 }
  200.  
  201.                 if (i + 1 < N && j + 1 < N)
  202.                 {
  203.                     glColor3f(colors[i + 1][j + 1].R, colors[i + 1][j + 1].G, colors[i + 1][j + 1].B);
  204.                     glVertex3f(z(kwadratJednostkowy[i + 1][j + 1].u, kwadratJednostkowy[i + 1][j + 1].v), y(kwadratJednostkowy[i + 1][j + 1].u, kwadratJednostkowy[i + 1][j + 1].v), x(kwadratJednostkowy[i + 1][j + 1].u, kwadratJednostkowy[i + 1][j + 1].v));
  205.                 }
  206.                 else
  207.                 {
  208.                     glColor3f(colors[0][j].R, colors[0][j].G, colors[1][0].B);
  209.                     glVertex3f(z(kwadratJednostkowy[0][0].u, kwadratJednostkowy[0][0].v), y(kwadratJednostkowy[0][0].u, kwadratJednostkowy[0][0].v), x(kwadratJednostkowy[0][0].u, kwadratJednostkowy[0][0].v));
  210.                 }
  211.  
  212.                 if (i + 1 < N)
  213.                 {
  214.                     glColor3f(colors[i + 1][j].R, colors[i + 1][j].G, colors[i + 1][j].B);
  215.                     glVertex3f(z(kwadratJednostkowy[i + 1][j].u, kwadratJednostkowy[i + 1][j].v), y(kwadratJednostkowy[i + 1][j].u, kwadratJednostkowy[i + 1][j].v), x(kwadratJednostkowy[i + 1][j].u, kwadratJednostkowy[i + 1][j].v));
  216.                 }
  217.                 else
  218.                 {
  219.                     glColor3f(colors[0][j].R, colors[0][j].G, colors[1][j].B);
  220.                     glVertex3f(z(kwadratJednostkowy[0][j].u, kwadratJednostkowy[0][j].v), y(kwadratJednostkowy[0][j].u, kwadratJednostkowy[0][j].v), x(kwadratJednostkowy[0][j].u, kwadratJednostkowy[0][j].v));
  221.                 }*/
  222.                 glEnd();
  223.             }
  224.         }
  225.     }
  226. }
  227.  
  228. /*************************************************************************************/
  229. // Funkcja rysująca osie układu współrzędnych
  230. void Axes(void)
  231. {
  232.  
  233.     point3  x_min = { -5.0, 0.0, 0.0 };
  234.     point3  x_max = { 5.0, 0.0, 0.0 };
  235.     // początek i koniec obrazu osi x
  236.  
  237.     point3  y_min = { 0.0, -5.0, 0.0 };
  238.     point3  y_max = { 0.0,  5.0, 0.0 };
  239.     // początek i koniec obrazu osi y
  240.  
  241.     point3  z_min = { 0.0, 0.0, -5.0 };
  242.     point3  z_max = { 0.0, 0.0,  5.0 };
  243.     //  początek i koniec obrazu osi y
  244.  
  245.     glColor3f(1.0f, 0.0f, 0.0f);  // kolor rysowania osi - czerwony
  246.     glBegin(GL_LINES); // rysowanie osi x
  247.  
  248.     glVertex3fv(x_min);
  249.     glVertex3fv(x_max);
  250.  
  251.     glEnd();
  252.  
  253.     glColor3f(0.0f, 1.0f, 0.0f);  // kolor rysowania - zielony
  254.     glBegin(GL_LINES);  // rysowanie osi y
  255.  
  256.     glVertex3fv(y_min);
  257.     glVertex3fv(y_max);
  258.  
  259.     glEnd();
  260.  
  261.     glColor3f(0.0f, 0.0f, 1.0f);  // kolor rysowania - niebieski
  262.     glBegin(GL_LINES); // rysowanie osi z
  263.  
  264.     glVertex3fv(z_min);
  265.     glVertex3fv(z_max);
  266.  
  267.     glEnd();
  268.  
  269. }
  270.  
  271. /*************************************************************************************/
  272. // Funkcja określająca co ma być rysowane (zawsze wywoływana gdy trzeba
  273. // przerysować scenę)
  274. void RenderScene(void)
  275. {
  276.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  277.     // Czyszczenie okna aktualnym kolorem czyszczącym
  278.  
  279.     glLoadIdentity();
  280.     // Czyszczenie macierzy bie??cej
  281.  
  282.     if(cos(theta[0]) > 0)
  283.    
  284.     viewer[0] = R * cos(theta[0])*cos(thetaY);
  285.     viewer[1] = R * sin(thetaY);
  286.     viewer[2] = R * sin(theta[0])*cos(thetaY);
  287.  
  288.     if (cos(thetaY) > 0)
  289.     {
  290.         std::cout << "1\n";
  291.         gluLookAt(viewer[0], viewer[1], viewer[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //pierwsze 3 argumenty określają współrzędne obserwatora
  292.                                                                               //kolejne 3 to punkt na który obserwator patrzy
  293.                                                                               //ostatnie 3 to wektor skracania trzymanej kamery
  294.     }
  295.     // Zdefiniowanie położenia obserwatora
  296.     else
  297.     {
  298.         std::cout << "-1\n";
  299.         gluLookAt(viewer[0], viewer[1], viewer[2], 0.0, 0.0, 0.0, 0.0, -1.0, 0.0);
  300.     }
  301.        
  302.  
  303.     //Axes();
  304.     // Narysowanie osi przy pomocy funkcji zdefiniowanej powyżej
  305.  
  306.     if (status == 1)                     // jeśli lewy klawisz myszy wcięnięty
  307.     {
  308.         theta[0] += delta_x * pix2angleX * 0.05;   // modyfikacja kąta obrotu o kat proporcjonalny do różnicy położeń kursora myszy
  309.         thetaY += delta_y * pix2angleY* 0.05;
  310.     }
  311.     if (status == 2)                     // jeśli lewy klawisz myszy wcięnięty
  312.     {
  313.         R += delta_y;
  314.  
  315.         if (R > 26) //powyżej tego jajko oddalane znika
  316.             R = 26;
  317.         else if (R < 5) //jak blisko przybliżam
  318.             R = 5;
  319.     }
  320.  
  321.     if (thetaY == MOJE_PI)
  322.     {
  323.         thetaY = MOJE_PI + MOJE_PI / 2;
  324.     }
  325.  
  326.     glRotatef(90, 0.0, 1.0, 0.0);
  327.     //glRotatef(thetaY, 1.0, 0.0, 0.0);
  328.  
  329.     //Egg(); //rysowanie jajka
  330.  
  331.     glColor3f(1.0f, 1.0f, 1.0f);
  332.     // Ustawienie koloru rysowania na biały
  333.  
  334.     glutWireTeapot(3.0);
  335.     // Narysowanie czajnika
  336.  
  337.     Axes();
  338.     // Narysowanie osi przy pomocy funkcji zdefiniowanej wyżej
  339.  
  340.     glFlush();
  341.     // Przekazanie poleceń rysujących do wykonania
  342.  
  343.     glutSwapBuffers();
  344.     //
  345.  
  346. }
  347. /*************************************************************************************/
  348. // Funkcja ustalająca stan renderowania
  349. void MyInit(void)
  350. {
  351.  
  352.     glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  353.     // Kolor czyszcący (wypełnienia okna) ustawiono na czarny
  354.  
  355. }
  356. /*************************************************************************************/
  357. // Funkcja ma za zadanie utrzymanie stałych proporcji rysowanych
  358. // w przypadku zmiany rozmiarów okna.
  359. // Parametry vertical i horizontal (wysokość i szerokość okna) są
  360. // przekazywane do funkcji za każdym razem gdy zmieni się rozmiar okna.
  361. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  362. {
  363.     pix2angleX = 360.0 / (float)horizontal;  // przeliczenie pikseli na stopnie
  364.     pix2angleY = 360.0 / (float)horizontal;
  365.  
  366.     glMatrixMode(GL_PROJECTION);
  367.     // Przełączenie macierzy bieżącej na macierz projekcji
  368.  
  369.     glLoadIdentity();
  370.     // Czyszcznie macierzy bieżącej
  371.  
  372.     gluPerspective(70, 1.0, 1.0, 30.0);
  373.     // Ustawienie parametrów dla rzutu perspektywicznego
  374.  
  375.  
  376.     if (horizontal <= vertical)
  377.         glViewport(0, (vertical - horizontal) / 2, horizontal, horizontal);
  378.  
  379.     else
  380.         glViewport((horizontal - vertical) / 2, 0, vertical, vertical);
  381.     // Ustawienie wielkości okna okna widoku (viewport) w zależności
  382.     // relacji pomiędzy wysokością i szerokością okna
  383.  
  384.     glMatrixMode(GL_MODELVIEW);
  385.     // Przełączenie macierzy bieżącej na macierz widoku modelu  
  386.  
  387.     glLoadIdentity();
  388.     // Czyszczenie macierzy bieżącej
  389.  
  390. }
  391.  
  392. void spinEgg()
  393. {
  394.     theta[0] -= 0.09;
  395.     if (theta[0] > 360.0) theta[0] -= 360.0;
  396.  
  397.     theta[1] -= 0.09;
  398.     if (theta[1] > 360.0) theta[1] -= 360.0;
  399.  
  400.     theta[2] -= 0.09;
  401.     if (theta[2] > 360.0) theta[2] -= 360.0;
  402.  
  403.     glutPostRedisplay(); //odświeżenie zawartości aktualnego okna
  404. }
  405.  
  406. void keys(unsigned char key, int x, int y)
  407. {
  408.     if (key == 'p')
  409.     {
  410.         std::cout << "p\n";
  411.         model = 1;
  412.     }
  413.     if (key == 'w')
  414.     {
  415.         std::cout << "w\n";
  416.         model = 2;
  417.     }
  418.     if (key == 's')
  419.     {
  420.         std::cout << "s\n";
  421.         model = 3;
  422.     }
  423.     RenderScene(); // przerysowanie obrazu sceny
  424. }
  425.  
  426. void Mouse(int btn, int state, int x, int y)
  427. {
  428.     if (btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
  429.     {
  430.         x_pos_old = x;      // przypisanie aktualnie odczytanej pozycji kursora jako pozycji poprzedniej
  431.         y_pos_old = y;
  432.         status = 1;         // wcięnięty został lewy klawisz myszy
  433.     }
  434.     else if (btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
  435.     {
  436.         x_pos_old = x;
  437.         y_pos_old = y;
  438.         status = 2;         //wciśnięty został prawy klawisz myszy
  439.     }
  440.     else
  441.         status = 0;         // nie został wcięnięty żaden klawisz
  442. }
  443.  
  444. void Motion(GLsizei x, GLsizei y)
  445. {
  446.  
  447.     delta_x = x - x_pos_old;     // obliczenie różnicy położenia kursora myszy
  448.     x_pos_old = x;            // podstawienie bieżącego położenia jako poprzednie
  449.  
  450.     delta_y = y - y_pos_old;
  451.     y_pos_old = y;
  452.  
  453.     glutPostRedisplay();     // przerysowanie obrazu sceny
  454. }
  455.  
  456. /*************************************************************************************/
  457. // Główny punkt wejścia programu. Program działa w trybie konsoli
  458. void main(int argc, char* argv[])
  459. {
  460.     srand(time(NULL));
  461.     for (int j = 0; j < N; j++)
  462.     {
  463.         for (int i = 0; i < N; i++)
  464.         {
  465.             colors[i][j].R = (float)(rand() % 100) / 100.0f;
  466.             colors[i][j].G = (float)(rand() % 100) / 100.0f;
  467.             colors[i][j].B = (float)(rand() % 100) / 100.0f;
  468.         }
  469.     }
  470.  
  471.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  472.     glutInitWindowSize(300, 300);
  473.  
  474.     glutInit(&argc, argv);
  475.     glutCreateWindow("Obracanie jajka");
  476.     glutKeyboardFunc(keys);
  477.     //glutIdleFunc(spinEgg);
  478.  
  479.     glutMouseFunc(Mouse);
  480.     // Ustala funkcję zwrotną odpowiedzialną za badanie stanu myszy
  481.  
  482.     glutMotionFunc(Motion);
  483.     // Ustala funkcję zwrotną odpowiedzialną za badanie ruchu myszy
  484.  
  485.     glutDisplayFunc(RenderScene);
  486.     // Określenie, że funkcja RenderScene będzie funkcją zwrotną
  487.     // (callback function).  Bedzie ona wywoływana za każdym razem
  488.     // gdy zajdzie potrzba przeryswania okna
  489.  
  490.     glutReshapeFunc(ChangeSize);
  491.     // Dla aktualnego okna ustala funkcję zwrotną odpowiedzialną
  492.     // zazmiany rozmiaru okna      
  493.  
  494.     MyInit();
  495.     // Funkcja MyInit() (zdefiniowana powyżej) wykonuje wszelkie
  496.     // inicjalizacje konieczne  przed przystąpieniem do renderowania
  497.  
  498.     glEnable(GL_DEPTH_TEST);
  499.     // Włączenie mechanizmu usuwania powierzchni niewidocznych
  500.  
  501.     glutMainLoop();
  502.     // Funkcja uruchamia szkielet biblioteki GLUT
  503. }
  504. /*************************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement