Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GL/glut.h>
- #include <stdlib.h>
- enum
- {
- CALE_OKNO,
- SKALA_1_1,
- ORTO,
- FRUST,
- PERSP,
- EXIT
- };
- static int submenu_id1;
- static int submenu_id2;
- static int menu_id;
- int skala = CALE_OKNO;
- int rzut = ORTO;
- int fovy = 100;
- int xx, xy, yy, yx, zx, zy;
- int obrot_x = 0;
- int obrot_y = 0;
- GLdouble vecx = 0.0;
- GLdouble vecy = 0.0;
- GLdouble vecz = 0.0;
- GLdouble eyex = 0.0;
- GLdouble eyey = 0.0;
- GLdouble eyez = 3.0;
- void Display()
- {
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- gluLookAt(eyex, eyey, eyez, 0, 0, -100, 0, 1, 0);
- glRotatef(obrot_x, 0.0f, 1.0f, 0.0f);
- glRotatef(obrot_y, xy, yy, zy);
- glTranslatef(vecx, vecy, vecz);
- glColor3f(1.0, 0.0, 0.0);
- glBegin(GL_LINES);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(-1.0, -1.0, 1.0);
- glVertex3f(-1.0, -1.0, 1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- glVertex3f(-1.0, 1.0, -1.0);
- glVertex3f(-1.0, 1.0, -1.0);
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(-1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(-1.0, 1.0, -1.0);
- glEnd();
- glFlush();
- glutSwapBuffers();
- }
- void Przeksztalc(int width, int height)
- {
- glViewport(0, 0, width, height); //obszar renderingu - całe okno
- glMatrixMode(GL_PROJECTION); //wybór macierzy rzutowania
- glLoadIdentity(); //macierz rzutowania = macierz jednostkowa
- //ustawienie parametrów zakresu rzutni
- GLdouble aspect = 1;
- GLfloat zakres = 2.0f;
- GLfloat blisko = 1.0f;
- GLfloat daleko = 10.0f;
- if (rzut == ORTO)
- {
- if (skala == SKALA_1_1)
- {
- if (width < height && width > 0)
- glOrtho(-zakres, zakres, -zakres * height / width, zakres * height / width, -zakres, zakres);
- else
- if (width >= height && height > 0)
- glOrtho(-zakres * width / height, zakres * width / height, -zakres, zakres, -zakres, zakres);
- }
- else
- glOrtho(-zakres, zakres, -zakres, zakres, -zakres, zakres);
- }
- if (rzut == FRUST)
- {
- if (skala == SKALA_1_1)
- {
- if (width < height && width > 0)
- glFrustum(-zakres, zakres, -zakres * height / width, zakres * height / width, blisko, daleko);
- else
- if (width >= height && height > 0)
- glFrustum(-zakres * width / height, zakres * width / height, -zakres, zakres, blisko, daleko);
- }
- else
- glFrustum(-zakres, zakres, -zakres, zakres, blisko, daleko);
- }
- if (rzut == PERSP)
- {
- if (height > 0)
- aspect = width / (GLdouble)height;
- gluPerspective(fovy, aspect, blisko, daleko);
- }
- Display();
- }
- void Funkcja_klawiatury(unsigned char key, int x, int y) {
- if (key == 'l') {
- xx = 0;
- yx = 1;
- zx = 0;
- obrot_x = obrot_x + 5;
- }
- if (key == 'j') {
- xx = 0;
- yx = 1;
- zx = 0;
- obrot_x = obrot_x - 5;
- }
- if (key == 'i') {
- xy = 1;
- yy = 0;
- zy = 0;
- obrot_y = obrot_y + 5;
- }
- if (key == 'k') {
- xy = 1;
- yy = 0;
- zy = 0;
- obrot_y = obrot_y - 5;
- }
- if (key == '+') {
- if (fovy < 180) {
- fovy++;
- }
- }
- if (key == '-') {
- if (fovy > 0) {
- fovy--;
- }
- }
- if (key == 'o') {
- eyez += 0.1;
- }
- if (key == 'p') {
- eyez -= 0.1;
- }
- if (key =='w'){
- vecy += 0.1;
- }
- if (key == 's') {
- vecy -= 0.1;
- }
- if (key == 'd'){
- vecx += 0.1;
- }
- if (key == 'a') {
- vecx -= 0.1;
- }
- if (key == 'e'){
- vecz += 0.1;
- }
- if (key == 'q') {
- vecz -= 0.1;
- }
- Przeksztalc(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- }
- void SpecialKeys(int key, int x, int y)
- {
- if (key == GLUT_KEY_UP) {
- eyey -= 0.1;
- }
- if (key == GLUT_KEY_DOWN) {
- eyey += 0.1;
- }
- if (key == GLUT_KEY_LEFT) {
- eyex += 0.1;
- }
- if (key == GLUT_KEY_RIGHT) {
- eyex -= 0.1;
- }
- Przeksztalc(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- }
- void Menu(int value) {
- switch (value)
- {
- case CALE_OKNO:
- skala = CALE_OKNO;
- Przeksztalc(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- break;
- case SKALA_1_1:
- skala = SKALA_1_1;
- Przeksztalc(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- break;
- case ORTO:
- rzut = ORTO;
- Przeksztalc(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- break;
- case FRUST:
- rzut = FRUST;
- Przeksztalc(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- break;
- case PERSP:
- rzut = PERSP;
- Przeksztalc(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- break;
- case EXIT:
- exit(0);
- break;
- }
- }
- void stworzMenu(void) {
- submenu_id1 = glutCreateMenu(Menu);
- glutAddMenuEntry("Rodzaj skalowania - cale okno", CALE_OKNO);
- glutAddMenuEntry("Rodzaj skalowania - skala 1:1", SKALA_1_1);
- submenu_id2 = glutCreateMenu(Menu);
- glutAddMenuEntry("Rzutowanie ortogonalne", ORTO);
- glutAddMenuEntry("Rzutowanie frustum", FRUST);
- glutAddMenuEntry("Rzutowanie perspective", PERSP);
- menu_id = glutCreateMenu(Menu);
- glutAddSubMenu("Skalowanie", submenu_id1);
- glutAddSubMenu("Rzutowanie", submenu_id2);
- glutAddMenuEntry("Wyjscie", EXIT);
- glutAttachMenu(GLUT_RIGHT_BUTTON);
- }
- int main(int argc, char* argv[])
- {
- // Klawisz '+' zwięszanie kąta perspektwy w widoku perspective
- // Klawisz '-' zmniejszanie kąta perspektwy w widoku perspective
- // Klawisz 'p' przybliżenie obiektu do kamery
- // Klawisz 'o' oddalenie obiektu do kamery
- // Klawisz 'i' obracanie obiektu w góre;
- // Klawisz 'k' obracanie obiektu w dół;
- // Klawisz 'j' obracanie obiektu w lewo;
- // Klawisz 'l' obracanie obiektu w prawo;
- // Klawisze strzałek odpowiednio przesuwają obiekt od kamery
- // Klawisz 'w' zwiekszenie wartosci wektora przesunięcia X;
- // Klawisz 's' zmniejszenie wartosci wektora przesunięcia X;
- // Klawisz 'd' zwiekszenie wartosci wektora przesunięcia Y;
- // Klawisz 'a' zmniejszenie wartosci wektora przesunięcia Y;
- // Klawisz 'e' zwiekszenie wartosci wektora przesunięcia Z;
- // Klawisz 'q' zmniejszenie wartosci wektora przesunięcia Z;
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
- glutInitWindowSize(800, 450);
- glutCreateWindow("Zadanie nr 2 - Rzutowanie");
- glutDisplayFunc(Display);
- glutReshapeFunc(Przeksztalc);
- glutKeyboardFunc(Funkcja_klawiatury);
- glutSpecialFunc(SpecialKeys);
- stworzMenu();
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement