Advertisement
CzarnyBarszcz

Zadanie 1

Feb 28th, 2021 (edited)
920
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.02 KB | None | 0 0
  1. #include <windows.h>
  2. #include <GL/glut.h>
  3. #include <stdlib.h>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. enum
  9. {
  10.     CALE_OKNO, // gdy nie zachowujemy proporcji
  11.     SKALA_1_1, // gdy zachowujemy proporcje
  12.     EXIT // wyjœcie
  13. };
  14. int skalowanie = SKALA_1_1;
  15.  
  16. void Funkcja_sceny ()
  17. {
  18.     glClearColor (1.0,1.0,1.0,1.0); // ustalenie koloru tła
  19.     glClear (GL_COLOR_BUFFER_BIT); // czyszczenie bufora dotyczącego koloru
  20.     glColor3f (1.0,0.0,0.0); // ustalenie koloru rysowania obiektu
  21.     glBegin (GL_POLYGON); // początek definicji obiektu (narysowanie przykładowej linii
  22.     glVertex3f (-0.5, 0.5, 0.0); // wierzchołki linii
  23.     glVertex3f (0.5, 0.5, 0.0);
  24.     glVertex3f (0.5, -0.5, 0.0);
  25.     glVertex3f (-0.5, -0.5, 0.0);
  26.     glEnd (); // koniec definicji obiektu
  27.     glFlush (); // przekierowanie wszystkich poleceń do wykonania
  28.     glutSwapBuffers(); // podmiana buforów
  29. }
  30. void Funkcja_skalowania (int width, int height)
  31. {
  32.     if (skalowanie == SKALA_1_1) // obszar renderingu – zachowanie proporcji 1:1
  33.     {
  34.         if (width > height) // szerokość okna większa od wysokości okna
  35.             glViewport ((width - height)/2,0,height,height);
  36.         else if (width < height) // wysokość okna większa od wysokości okna
  37.             glViewport (0,(height - width)/2,width,width);
  38.     }
  39.     else
  40.         glViewport (0,0,width,height); // obszar renderingu – bez zachowania proporcji
  41.     Funkcja_sceny (); // generowanie sceny 3D
  42. }
  43. void Funkcja_menu (int value) // obsługa menu podręcznego
  44. {
  45.     switch (value)
  46.     {
  47.     case CALE_OKNO: // obszar renderingu - całe okno
  48.         skalowanie = CALE_OKNO;
  49.         Funkcja_skalowania(glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  50.         break;
  51.     case SKALA_1_1: // obszar renderingu - skala 1:1
  52.         skalowanie = SKALA_1_1;
  53.         Funkcja_skalowania(glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
  54.         break;
  55.     case EXIT: // wyjście
  56.         exit (0);
  57.     }
  58. }
  59. int main (int argc, char *argv[])
  60. {
  61.     glutInit (&argc,argv); // inicjacja biblioteki GLUT
  62.     glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); // inicjalizacja bufora ramki z podwójnym buforowaniem
  63.     glutInitWindowSize (300,300); // ustalenie rozmiaru okna programu
  64.     glutCreateWindow ("Tytuł sceny – pierwszy program"); // utworzenie głównego okna programu o podanej nazwie
  65.     glutDisplayFunc (Funkcja_sceny); // przyłączenie funkcji opisującej scenę 3D
  66.     glutReshapeFunc (Funkcja_skalowania); // przyłączenie funkcji wywoływanej przy zmianie rozmiaru okna
  67.     glutCreateMenu (Funkcja_menu); // utworzenie menu podręcznego
  68. // dodadnie pozycji do menu podręcznego
  69.     glutAddMenuEntry ("Rodzaj skalowania - całe okno",CALE_OKNO);
  70.     glutAddMenuEntry ("Rodzaj skalowania - skala 1:1",SKALA_1_1);
  71.     glutAddMenuEntry ("Wyjście",EXIT);
  72.     glutAttachMenu (GLUT_RIGHT_BUTTON); // określenie przycisku myszki obsługującej menu podręczne
  73.     glutMainLoop (); // wprowadzenie programu do obsługi pętli komunikatów
  74.     return 0;
  75. }
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement