Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <glut.h>
- #include <math.h>
- // q - zoom+
- // e - zoom-
- // wasd - obracanie kamery
- // z/x - zmiany N (ilosc punktow)
- // c/v - zmiana R (promien)
- #define M_PI 3.14
- #define DEG2RAD(x) ((double)((x)*M_PI)/180.0)
- // Definicja stalych
- GLfloat OBSERWATOR_ODLEGLOSC = 30.0;
- GLfloat OBSERWATOR_OBROT_X = 30.0;
- GLfloat OBSERWATOR_OBROT_Y = 20.0;
- // Zmienne globalne
- int szerokoscOkna = 1200;
- int wysokoscOkna = 800;
- int N = 3;
- float R = 4.0;
- // Prototypy funkcji
- void RysujSzescian(double a);
- void UstawParametryWidoku(int szer, int wys);
- void WyswietlObraz(void);
- void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
- // Srodek szescianu znajduje się w punkcie (0,0,0).
- void RysujSzescian(double a)
- {
- // Sciany boczne
- glBegin(GL_QUAD_STRIP);
- glVertex3f(a / 2.0, a / 2.0, a / 2.0);
- glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
- glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
- glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
- glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
- glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
- glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
- glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
- glVertex3f(a / 2.0, a / 2.0, a / 2.0);
- glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
- glEnd();
- // Gorna sciana
- glBegin(GL_QUAD_STRIP);
- glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
- glVertex3f(a / 2.0, a / 2.0, a / 2.0);
- glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
- glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
- glEnd();
- // Dolna sciana
- glBegin(GL_QUAD_STRIP);
- glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
- glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
- glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
- glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
- glEnd();
- }
- void Kolo() {
- double alfa = 360 / N;
- glColor3f(0.0, 1.0, 0.0);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0.0, 0.0, 0.0);
- for (int i = 0; i*alfa <= 360; i++) {
- glVertex3f(R * cos(DEG2RAD(i * alfa)), 0, R * sin(DEG2RAD(i * alfa)));
- }
- glEnd();
- }
- void Walec() {
- double alfa = 360.0 / N;
- glColor3f(1.0, 1.0, 0.0);
- glBegin(GL_QUAD_STRIP);
- for (double i = 0; i * alfa <= 360; i++) {
- glVertex3f(R * cos(DEG2RAD(i * alfa)), 0.0, R * sin(DEG2RAD(i * alfa)));
- glVertex3f(R * cos(DEG2RAD(i * alfa)), R, R * sin(DEG2RAD(i * alfa)));
- }
- glEnd();
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja wyswietlajaca pojedyncza klatke animacji
- void WyswietlObraz(void)
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0, 0, -OBSERWATOR_ODLEGLOSC);
- glRotatef(OBSERWATOR_OBROT_X, 1, 0, 0);
- glRotatef(OBSERWATOR_OBROT_Y, 0, 1, 0);
- // ----------------------------------------
- // Narysowanie szescianu-------------------
- Walec();
- //Kolo();
- //-----------------------------------------
- // ----------------------------------------
- glutSwapBuffers();
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja obslugi klawiatury
- void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
- {
- if (klawisz == 'z') {
- N++;
- }
- else if (klawisz == 'x') {
- if (N > 1)N--;
- }
- else if (klawisz == 'c') {
- R += 0.3;
- }
- else if (klawisz == 'v') {
- if (N > 1)R -= 0.3;
- }
- // STEROWANIE KAMERA
- if (klawisz == 'w') {
- if (OBSERWATOR_OBROT_X < 90)OBSERWATOR_OBROT_X = OBSERWATOR_OBROT_X + 1;
- }
- else if (klawisz == 's') {
- if (OBSERWATOR_OBROT_X > -90)OBSERWATOR_OBROT_X = OBSERWATOR_OBROT_X - 1;
- }
- else if (klawisz == 'a') {
- if (OBSERWATOR_OBROT_Y < 90)OBSERWATOR_OBROT_Y = OBSERWATOR_OBROT_Y + 1;
- }
- else if (klawisz == 'd') {
- if (OBSERWATOR_OBROT_Y > -90)OBSERWATOR_OBROT_Y = OBSERWATOR_OBROT_Y - 1;
- }
- else if (klawisz == 'q') {
- if (OBSERWATOR_ODLEGLOSC < 80)OBSERWATOR_ODLEGLOSC = OBSERWATOR_ODLEGLOSC + 0.5;
- }
- else if (klawisz == 'e') {
- if (OBSERWATOR_ODLEGLOSC > 20)OBSERWATOR_ODLEGLOSC = OBSERWATOR_ODLEGLOSC - 0.5;
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////
- void UstawParametryWidoku(int szer, int wys)
- {
- glViewport(0, 0, szer, wys);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(OBSERWATOR_ODLEGLOSC, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
- }
- int main(int argc, char** argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- glutInitWindowPosition(100, 100);
- glutInitWindowSize(szerokoscOkna, wysokoscOkna);
- glutCreateWindow("Szescian");
- glEnable(GL_DEPTH_TEST);
- glClearDepth(1000.0);
- glClearColor(0.0f, 0.0f, 0.3f, 0.0f);
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- glutDisplayFunc(WyswietlObraz);
- glutReshapeFunc(UstawParametryWidoku);
- glutIdleFunc(WyswietlObraz);
- glutKeyboardFunc(ObslugaKlawiatury);
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement