Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <iostream>
- #include <GL/glut.h>
- #include <stdlib.h>
- using namespace std;
- enum
- {
- ORTO,
- ASPECT_1_1,
- FRUST,
- PERSP,
- EXIT,
- FULL_WINDOW,
- };
- int rzut,skala;
- double xx,xy,zx,yx,obrot_x=0.0,obrot_y=0.0,yy,zy;
- double fovy =90,dx=0.0,dy=0.0,dz=0.0;
- static void Display(void)
- {
- glClear(GL_COLOR_BUFFER_BIT);
- glClearColor(1.0,1.0,1.0,1.0);
- glMatrixMode( GL_MODELVIEW );
- glLoadIdentity();
- gluLookAt(dx, dy, dz, -0.1, -0.1, -0.1, 0.0, 1.0, 0.0);
- glRotatef(obrot_x,xx,xy,zx);
- glRotatef(obrot_y,xy,yy,zy);
- glColor3f(1.0,0.0,0.0);
- glBegin(GL_LINES);
- glVertex3f(-0.5,1.0,0.5);
- glVertex3f(0.5,1.0,0.5); //A
- glVertex3f(-0.5,1.0,0.5);
- glVertex3f(-1.0,0.0,0.5);//B
- glVertex3f(-1.0,0.0,0.5);
- glVertex3f(-0.5,-1.0,0.5);//C
- glVertex3f(-0.5,-1.0,0.5);
- glVertex3f(0.5,-1.0,0.5);//D
- glVertex3f(0.5,-1.0,0.5);
- glVertex3f(1.0,0.0,0.5);//E
- glVertex3f(1.0,0.0,0.5);
- glVertex3f(0.5,1.0,0.5);
- glVertex3f(-0.5,1.0,-0.5);
- glVertex3f(0.5,1.0,-0.5); //A
- glVertex3f(-0.5,1.0,-0.5);
- glVertex3f(-1.0,0.0,-0.5);//B
- glVertex3f(-1.0,0.0,-0.5);
- glVertex3f(-0.5,-1.0,-0.5);//C
- glVertex3f(-0.5,-1.0,-0.5);
- glVertex3f(0.5,-1.0,-0.5);//D
- glVertex3f(0.5,-1.0,-0.5);
- glVertex3f(1.0,0.0,-0.5);//E
- glVertex3f(1.0,0.0,-0.5);
- glVertex3f(0.5,1.0,-0.5);
- glVertex3f(-0.5,1.0,0.5);
- glVertex3f(-0.5,1.0,-0.5);
- glVertex3f(-1.0,0.0,0.5);
- glVertex3f(-1.0,0.0,-0.5);
- glVertex3f(-0.5,-1.0,0.5);
- glVertex3f(-0.5,-1.0,-0.5);
- glVertex3f(0.5,-1.0,0.5);
- glVertex3f(0.5,-1.0,-0.5);
- glVertex3f(1.0,0.0,0.5);
- glVertex3f(1.0,0.0,-0.5);
- glVertex3f(0.5,1.0,0.5);
- glVertex3f(0.5,1.0,-0.5);
- glEnd();
- glFlush();
- glutSwapBuffers();
- }
- void Reshape(int width, int height)
- {
- // obszar renderingu - ca³e okno
- glViewport (0,0,width,height);
- // wybór macierzy rzutowania
- glMatrixMode (GL_PROJECTION);
- // macierz rzutowania = macierz jednostkowa
- glLoadIdentity ();
- // ustawienie parametrów zakresu rzutni
- GLdouble aspect = 1;
- GLfloat zakres = 3.0f;
- GLfloat blisko = 1.0f;
- GLfloat daleko = 5.0;
- if (rzut==ORTO)
- {
- if (skala==ASPECT_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==ASPECT_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 Menu (int value)
- {
- switch (value)
- {
- // wyjœcie
- case EXIT:
- exit (0);
- case FULL_WINDOW:
- skala=FULL_WINDOW;
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- case ASPECT_1_1:
- skala=ASPECT_1_1;
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- case ORTO:
- rzut=ORTO;
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- case FRUST:
- rzut=FRUST;
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- case PERSP:
- rzut=PERSP;
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- break;
- }
- }
- void Funkcja_klawiatury (unsigned char key, int x, int y)
- {
- // klawisz +
- if (key == 'd')
- {
- xx=0;
- yx=1;
- zx=0;
- obrot_x=obrot_x+5;
- cout<<"obrot_x= "<<obrot_x<<endl;
- }
- if (key == 'a')
- {
- xx=0;
- yx=1;
- zx=0;
- obrot_x=obrot_x-5;
- cout<<"obrot_x= "<<obrot_x<<endl;
- }
- if (key == 'w')
- {
- xy=1;
- yy=0;
- zy=0;
- obrot_y=obrot_y+5;
- cout<<"obrot_y= "<<obrot_y<<endl;
- }
- if (key == 's')
- {
- xy=1;
- yy=0;
- zy=0;
- obrot_y=obrot_y-5;
- cout<<"obrot_y= "<<obrot_y<<endl;
- }
- if (key == '+')
- {
- obrot_y=obrot_y-5;
- cout<<"obrot_y= "<<obrot_y<<endl;
- }
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- }
- void specialKey(int klawisz, int x, int y)
- {
- cout << " klawisz" << klawisz << endl;
- if(klawisz == 100)
- {
- dx-=0.1;
- cout<<"dx="<<dx<<endl;
- }
- if(klawisz == 102)
- {
- dx+=0.1;
- cout<<"dx="<<dx<<endl;
- }
- if(klawisz == 101)
- {
- dy+=0.1;
- cout<<"dy="<<dx<<endl;
- }
- if(klawisz == 103)
- {
- dy-=0.1;
- cout<<"dy="<<dx<<endl;
- }
- Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
- }
- int main(int argc, char *argv[])
- {
- glutInit(&argc, argv);
- glutInitWindowSize(640,480);
- glutInitWindowPosition(10,10);
- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
- glutCreateWindow("Zadanie 2");
- glutReshapeFunc(Reshape);
- glutDisplayFunc(Display);
- glutIdleFunc(Display);
- glutCreateMenu (Menu); // utworzenie menu podrêcznego
- // dodadnie pozycji do menu podrêcznego
- glutAddMenuEntry ("Rodzaj skalowania - ca³e okno",FULL_WINDOW);
- glutAddMenuEntry ("Rodzaj skalowania - skala 1:1",ASPECT_1_1);
- glutAddMenuEntry ("Rzutowanie ortogonalne", ORTO);
- glutAddMenuEntry ("Rzutowanie frustum", FRUST);
- glutAddMenuEntry ("Rzutowanie perspective", PERSP);
- glutAddMenuEntry ("Wyjœcie",EXIT);
- glutAttachMenu (GLUT_RIGHT_BUTTON); // okreœlenie przycisku myszki obs³uguj¹cej menu podrêczne
- glutKeyboardFunc(Funkcja_klawiatury);
- //glutIdleFunc(idle);
- glutSpecialFunc(specialKey);
- cout<<"STROWANIE"<<endl;
- cout<<"PRZYBLIZ strzałka w gore"<<endl;
- cout<<"ODDAL strzałka w dół"<<endl;
- cout<<"OBROT W OKOL OSI Y :'W','S'"<<endl;
- cout<<"OBROT W OKOL OSI X :'A','D'"<<endl;
- glutMainLoop();
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment