Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GL/glut.h>
- #include <stdlib.h>
- enum
- {
- FULL_WINDOW,
- ASPECT_1_1,
- PERSP,
- ORTO,
- FRUST,
- EXIT
- };
- GLdouble fovy = 90;
- int Aspect = FULL_WINDOW;
- int rzut = PERSP;
- int obrot_x = 0;
- int obrot_y = 0;
- GLfloat xx, yx, zx = 0.0f;
- GLfloat xy, yy, zy = 0.0f;
- void Display()
- {
- glClearColor(1.0, 1.0, 1.0, 1.0);
- glClear(GL_COLOR_BUFFER_BIT);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- gluLookAt(0.0, 0.0, 3.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0);
- glRotatef(obrot_x, xx, yx, zx);
- glRotatef(obrot_y, xy, yy, zy);
- glTranslatef(0.0f, 0.0f, 0.0f);
- glColor3f(0.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 Reshape(int width, int height)
- {
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- GLdouble aspect = 1;
- GLfloat zakres = 3.0f;
- GLfloat blisko = 1.0f;
- GLfloat daleko = 5.0f;
- if (rzut == ORTO)
- {
- if (Aspect == 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 (Aspect == 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 Keyboard(unsigned char key, int x, int y)
- {
- if (key == 'a')
- {
- xx = 0;
- yx = 1;
- zx = 0;
- obrot_x = obrot_x + 5;
- }
- if (key == 'd')
- {
- xx = 0;
- yx = 1;
- zx = 0;
- obrot_x = obrot_x - 5;
- }
- if (key == 'w')
- {
- xy = 1;
- yy = 0;
- zy = 0;
- obrot_y = obrot_y + 5;
- }
- if (key == 's')
- {
- xy = 1;
- yy = 0;
- zy = 0;
- obrot_y = obrot_y - 5;
- }
- Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- }
- void Menu(int value)
- {
- switch (value)
- {
- case FULL_WINDOW:
- Aspect = FULL_WINDOW;
- Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- break;
- case ASPECT_1_1:
- Aspect = ASPECT_1_1;
- Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- break;
- case PERSP:
- rzut = PERSP;
- 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 ORTO:
- rzut = ORTO;
- Reshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
- break;
- case EXIT:
- exit(0);
- }
- }
- int main(int argc, char* argv[])
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
- glutInitWindowSize(400, 400);
- glutCreateWindow("Mรณj program");
- glutDisplayFunc(Display);
- glutReshapeFunc(Reshape);
- glutKeyboardFunc(Keyboard);
- glutCreateMenu(Menu);
- glutAddMenuEntry("Aspekt obrazu - cale okno", FULL_WINDOW);
- glutAddMenuEntry("Aspekt obrazu 1:1", ASPECT_1_1);
- glutAddMenuEntry("Rzut ortogonalny", ORTO);
- glutAddMenuEntry("Rzut frustrum", FRUST);
- glutAddMenuEntry("Rzut perspektywiczny", PERSP);
- glutAddMenuEntry("Wyjscie", EXIT);
- glutAttachMenu(GLUT_RIGHT_BUTTON);
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement