Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <GL/glut.h>
- #include <stdlib.h>
- #include <iostream>
- using namespace std;
- enum
- {
- CALE_OKNO, // gdy nie zachowujemy proporcji
- SKALA_1_1, // gdy zachowujemy proporcje
- EXIT // wyjœcie
- };
- int skalowanie = SKALA_1_1;
- void Funkcja_sceny ()
- {
- glClearColor (1.0,1.0,1.0,1.0); // ustalenie koloru tła
- glClear (GL_COLOR_BUFFER_BIT); // czyszczenie bufora dotyczącego koloru
- glColor3f (1.0,0.0,0.0); // ustalenie koloru rysowania obiektu
- glBegin (GL_POLYGON); // początek definicji obiektu (narysowanie przykładowej linii
- glVertex3f (-0.5, 0.5, 0.0); // wierzchołki linii
- glVertex3f (0.5, 0.5, 0.0);
- glVertex3f (0.5, -0.5, 0.0);
- glVertex3f (-0.5, -0.5, 0.0);
- glEnd (); // koniec definicji obiektu
- glFlush (); // przekierowanie wszystkich poleceń do wykonania
- glutSwapBuffers(); // podmiana buforów
- }
- void Funkcja_skalowania (int width, int height)
- {
- if (skalowanie == SKALA_1_1) // obszar renderingu – zachowanie proporcji 1:1
- {
- if (width > height) // szerokość okna większa od wysokości okna
- glViewport ((width - height)/2,0,height,height);
- else if (width < height) // wysokość okna większa od wysokości okna
- glViewport (0,(height - width)/2,width,width);
- }
- else
- glViewport (0,0,width,height); // obszar renderingu – bez zachowania proporcji
- Funkcja_sceny (); // generowanie sceny 3D
- }
- void Funkcja_menu (int value) // obsługa menu podręcznego
- {
- switch (value)
- {
- case CALE_OKNO: // obszar renderingu - całe okno
- skalowanie = CALE_OKNO;
- Funkcja_skalowania(glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- case SKALA_1_1: // obszar renderingu - skala 1:1
- skalowanie = SKALA_1_1;
- Funkcja_skalowania(glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- case EXIT: // wyjście
- exit (0);
- }
- }
- int main (int argc, char *argv[])
- {
- glutInit (&argc,argv); // inicjacja biblioteki GLUT
- glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); // inicjalizacja bufora ramki z podwójnym buforowaniem
- glutInitWindowSize (300,300); // ustalenie rozmiaru okna programu
- glutCreateWindow ("Tytuł sceny – pierwszy program"); // utworzenie głównego okna programu o podanej nazwie
- glutDisplayFunc (Funkcja_sceny); // przyłączenie funkcji opisującej scenę 3D
- glutReshapeFunc (Funkcja_skalowania); // przyłączenie funkcji wywoływanej przy zmianie rozmiaru okna
- glutCreateMenu (Funkcja_menu); // utworzenie menu podręcznego
- // dodadnie pozycji do menu podręcznego
- glutAddMenuEntry ("Rodzaj skalowania - całe okno",CALE_OKNO);
- glutAddMenuEntry ("Rodzaj skalowania - skala 1:1",SKALA_1_1);
- glutAddMenuEntry ("Wyjście",EXIT);
- glutAttachMenu (GLUT_RIGHT_BUTTON); // określenie przycisku myszki obsługującej menu podręczne
- glutMainLoop (); // wprowadzenie programu do obsługi pętli komunikatów
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement