Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////////////////////////////////////////////////////////////////////////////////
- //
- // Program wyswietlajacy szescian w rzucie perspektywicznym. Dlugosc boku szescianu
- // moze byc interaktywnie zmieniana za pomoca klwiszy '+' i '-'.
- //
- //////////////////////////////////////////////////////////////////////////////////////////
- #include <GL/glut.h>
- #include <math.h>
- // Definicja stalych
- #define DLUGOSC_BOKU 5.0
- #define OBSERWATOR_ODLEGLOSC 20.0
- #define OBSERWATOR_OBROT_X 40.0
- #define OBSERWATOR_OBROT_Y 40.0
- #define OBSERWATOR_OBROT_Z 0.0
- #define OBSERWATOR_FOV_Y 30.0
- #define N 24.0
- // Zmienne globalne
- double bok = DLUGOSC_BOKU; // Dlugosc boku szescianu
- int szerokoscOkna = 800;
- int wysokoscOkna = 600;
- float odl = 80;
- float odlmax = 200;
- float odlmin = 20;
- float osX = 40;
- float osY = 40;
- float osZ = 0;
- #define PI 3.1415926535
- #define DEG2RAD(x) ((float)(x)*PI/180.0)
- #define dAlfa (360.0/entka)
- float g = 0;
- float i = 0;
- int j = 0;
- double R = 10;
- double R2 = 20;
- double H = 25;
- double entka = N;
- double r = 2;
- double h = 3;
- double f = 0.0055;
- double suma = 0;
- float y;
- double RI = 10;
- double R2I = 20;
- double HI = 25;
- double RS = 2;
- double slice = N;
- // 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 stozek()
- {
- i = 0;
- glColor3f(1, 1, 0);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0, 0, 0);
- for (i; i * dAlfa <= 360;i++)
- {
- glVertex3f(RI * cos(DEG2RAD(i * dAlfa)), 0.0, RI * sin(DEG2RAD(i * dAlfa)));
- }
- glEnd();
- i = 0;
- glColor3f(1, 0, 0);
- glBegin(GL_QUAD_STRIP);
- for (i; i * dAlfa <= 360;i++)
- {
- glVertex3f(RI * cos(DEG2RAD(i * dAlfa)), 0.0, RI * sin(DEG2RAD(i * dAlfa)));
- glVertex3f(R2I * cos(DEG2RAD(i * dAlfa)), HI, R2I * sin(DEG2RAD(i * dAlfa)));
- glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)), 0.0, RI * sin(DEG2RAD((i + 1) * dAlfa)));
- glVertex3f(R2I * cos(DEG2RAD((i + 1) * dAlfa)), HI, R2I * sin(DEG2RAD((i + 1) * dAlfa)));
- }
- glEnd();
- i = 0;
- glColor3f(1, 1, 0);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0, HI, 0);
- for (i; i * dAlfa <= 360;i++)
- {
- glVertex3f(R2I * cos(DEG2RAD(i * dAlfa)), HI, R2I * sin(DEG2RAD(i * dAlfa)));
- }
- glEnd();
- }
- void sfera1()
- {
- int log = 0;
- i = 0;
- glColor3f(1, 1, 0);
- glRotatef(90, 0, 0, 1);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0, 0, 0);
- for (i; i * dAlfa <= 180; i++)
- {
- glVertex3f(RI * cos(DEG2RAD(i * dAlfa)), 0, RI * sin(DEG2RAD(i * dAlfa)));
- }
- glVertex3f(RI * cos(DEG2RAD(180)), 0, RI * sin(DEG2RAD(180)));
- glEnd();
- double slice_l = 90 / slice;
- g = 0;
- /*i = 0;
- g = 0;
- glColor3f(1, 0, 0);
- glBegin(GL_TRIANGLE_STRIP);*/
- for (g; (g + 1) * slice_l <= 90; g++)
- {
- glColor3f(1, 0, 0);
- glBegin(GL_TRIANGLE_STRIP);
- i = 0;
- if (log == 1)
- glVertex3f(-RI, 0, 0);
- for (i; (i + 1) * dAlfa <= 90; i++)
- {
- //if ( i * dAlfa <= 90)
- //{
- // glVertex3f(RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
- // glVertex3f(RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
- //}
- //else
- //{
- // glVertex3f(RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
- // glVertex3f(RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
- //}
- //if ((i + 1) * dAlfa <= 90)
- //{
- // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- //}
- //else
- //{
- // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- //}
- ////
- //if ((i)*dAlfa >= 250) log = 1;
- //if (i * dAlfa <= 90)
- //if ((i+1 ) * dAlfa < 90 || (i ) * dAlfa > 270)
- {
- glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)));
- glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
- //}
- //else
- //{
- // glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)));
- // glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
- //}
- //if ((i + 1) * dAlfa <= 90)
- //{
- glVertex3f(RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)));
- glVertex3f(RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
- }
- //else
- //{
- // glVertex3f(RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)));
- // glVertex3f(RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
- //}
- //glVertex3f(RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)));
- //if ( ( i + 1 ) * dAlfa < 90 )
- //{
- // glVertex3f(RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
- // glVertex3f(RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
- // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- // glVertex3f(RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- //}
- //else
- //{
- // glVertex3f(RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
- // glVertex3f(RI * -cos(DEG2RAD(i * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD(i * dAlfa)));
- // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD(g * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- // glVertex3f(RI * -cos(DEG2RAD((i + 1) * dAlfa)) * -cos(DEG2RAD((g + 1) * slice_l)), RI * -cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)), RI * sin(DEG2RAD((i + 1) * dAlfa)));
- //}
- }
- glVertex3f(RI, 0, 0);
- glEnd();
- glColor3f(1, 0, 0);
- glBegin(GL_TRIANGLE_STRIP);
- i = 0;
- for (i; (i + 1) * dAlfa <= 90; i++)
- {
- glVertex3f(-RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD(g * slice_l)));
- glVertex3f(-RI * sin(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD(i * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD(i * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
- glVertex3f(-RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD(g * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD(g * slice_l)));
- glVertex3f(-RI * sin(DEG2RAD((i + 1) * dAlfa)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * cos(DEG2RAD((g + 1) * slice_l)), RI * cos(DEG2RAD((i + 1) * dAlfa)) * sin(DEG2RAD((g + 1) * slice_l)));
- }
- glVertex3f(-RI, 0, 0);
- glEnd();
- }
- i = 0;
- glColor3f(1, 1, 0);
- glRotatef(-90, 1, 0, 0);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0, 0, 0);
- for (i; i * dAlfa <= 180; i++)
- {
- glVertex3f(RI * cos(DEG2RAD(i * dAlfa)), 0, RI * sin(DEG2RAD(i * dAlfa)));
- }
- glVertex3f(RI * cos(DEG2RAD(180)), 0, RI * sin(DEG2RAD(180)));
- glEnd();
- //glEnd();
- }
- float DEG2RAD = 3.1415926535 / 180.0;
- float pom1;
- float pom2;
- float alfa1 = 30;
- float alfa2 = 360.0 / 4;
- float podz_h = 1.0 / 3.0;
- float pom_podz_h = 4;
- void stozekk2137()
- {
- double deg = atan(1 / 3);
- for (int j = 0; j < 4; j++)
- {
- glBegin(GL_TRIANGLE_FAN);
- glColor3f(1, 0, 0);
- glNormal3f(0, -1, 0);
- glVertex3f(0, 0, 0);
- for (int i = 0; i * alfa2 <= 360.0 * 0.75; i++)
- {
- pom1 = DEG2RAD * (i * alfa2);
- glVertex3f((float)(1 * cos(pom1)), 0, (float)(1 * sin(pom1)));
- }
- glEnd();
- glColor3f(1, 0, 0);
- for (int j = 1; j * podz_h <= 1; j++)
- {
- glBegin(GL_TRIANGLE_STRIP);
- for (int i = 0; i * alfa2 <= 360.0 * 0.75; i++)
- {
- pom1 = DEG2RAD * (i * alfa2);
- glNormal3f(cos(pom1), sin(deg), sin(pom1));
- glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(pom1)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(pom1)));
- glVertex3f((float)(1 * (1 - j * podz_h) * cos(pom1)), 4 * (j * podz_h), (float)(1 * (1 - j * podz_h) * sin(pom1)));
- }
- glEnd();
- glBegin(GL_TRIANGLE_STRIP);
- glNormal3f(0, 0, -1);
- glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 0)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(DEG2RAD * 0)));
- glVertex3f((float)(1 * (1 - j * podz_h) * cos(DEG2RAD * 0)), 4 * (j * podz_h), (float)(1 * (1 - j * podz_h) * sin(DEG2RAD * 0)));
- glVertex3f(0, 4 * ((j - 1) * podz_h), 0);
- glVertex3f(0, 4 * (j * podz_h), 0);
- glEnd();
- glBegin(GL_TRIANGLE_STRIP);
- glNormal3f(1, 0, 0);
- glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 270)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(DEG2RAD * 270)));
- glVertex3f((float)(1 * (1 - j * podz_h) * cos(DEG2RAD * 270)), 4 * (j * podz_h), (float)(1 * (1 - j * podz_h) * sin(DEG2RAD * 270)));
- glVertex3f(0, 2 * ((j - 1) * podz_h), 0);
- glVertex3f(0, 2 * (j * podz_h), 0);
- glEnd();
- }
- }
- }
- void sfera()
- {
- i = 0;
- glColor3f(1, 1, 0);
- glRotatef(90, 0, 1, 0);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0, 0, 0);
- for (i; i * dAlfa <= 180;i++)
- {
- glVertex3f(0.0, RI * cos(DEG2RAD(i * dAlfa)), RI * sin(DEG2RAD(i * dAlfa)));
- }
- glVertex3f(0.0, RI * cos(DEG2RAD(180)), RI * sin(DEG2RAD(180)));
- glEnd();
- glRotatef(-90, 0, 1, 0);
- glBegin(GL_TRIANGLE_STRIP);
- glVertex3f(0, 0, RI);
- i = 0;
- glColor3f(1, 0, 0);
- //glRotatef(9,0,1,0);
- //glBegin(GL_TRIANGLE_STRIP);
- for (i; i * dAlfa <= 90;i++)
- {
- glVertex3f(R * cos(DEG2RAD(i * dAlfa)), 0.0, R * sin(DEG2RAD(i * dAlfa)));
- glVertex3f(R2 * cos(DEG2RAD(i * dAlfa)), H, R2 * sin(DEG2RAD(i * dAlfa)));
- glVertex3f(R2 * cos(DEG2RAD((i + 1) * dAlfa)), H, R2 * sin(DEG2RAD((i + 1) * dAlfa)));
- glVertex3f(R * cos(DEG2RAD((i + 1) * dAlfa)), 0.0, R * sin(DEG2RAD((i + 1) * dAlfa)));
- //glVertex3f(RI*cos(DEG2RAD(g*dAlfa))*cos(DEG2RAD(i*dAlfa)), RI * cos(DEG2RAD(g * dAlfa))* sin(DEG2RAD(i * dAlfa)),RI*sin(DEG2RAD(g*dAlfa)));
- //glVertex3f(RI * cos(DEG2RAD((g+1) * dAlfa)) * cos(DEG2RAD(i * dAlfa)), RI * cos(DEG2RAD((g+1) * dAlfa)) * sin(DEG2RAD(i * dAlfa)), RI * sin(DEG2RAD((g+1) * dAlfa)));
- //
- ////glVertex3f(0.0,RI*cos(DEG2RAD(i*dAlfa)),RI*sin(DEG2RAD(i*dAlfa)));
- //glVertex3f(RI*cos(DEG2RAD(i*dAlfa)),RI*sin(DEG2RAD(i*dAlfa)),RI*cos(DEG2RAD(i*dAlfa)));
- ////glVertex3f(RI*sin(DEG2RAD(i*dAlfa)),RI*cos(DEG2RAD(i*dAlfa)),0.0);
- //glVertex3f(0.0,RI*cos(DEG2RAD(i*dAlfa)),RI*sin(DEG2RAD(i*dAlfa)));
- }
- glVertex3f(0.0, RI * cos(DEG2RAD(180)), RI * sin(DEG2RAD(180)));
- glEnd();
- i = 0;
- glColor3f(1, 1, 0);
- //glRotatef(-90,0,1,0);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0, 0, 0);
- for (i; i * dAlfa <= 180;i++)
- {
- glVertex3f(0.0, RI * cos(DEG2RAD(i * dAlfa)), RI * sin(DEG2RAD(i * dAlfa)));
- }
- glVertex3f(0.0, RI * cos(DEG2RAD(180)), RI * sin(DEG2RAD(180)));
- glEnd();
- }
- void RysujUklad()
- {
- glBegin(GL_LINES);
- // Os X
- glColor3f(1.0, 0.0, 0.0);
- glVertex3f(-100.0, 0.0, 0.0);
- glVertex3f(100.0, 0.0, 0.0);
- // Os Y
- glColor3f(0.0, 1.0, 0.0);
- glVertex3f(0.0, -100.0, 0.0);
- glVertex3f(0.0, 100.0, 0.0);
- // Os Z
- glColor3f(0.0, 0.0, 1.0);
- glVertex3f(0.0, 0.0, -100.0);
- glVertex3f(0.0, 0.0, 100.0);
- glEnd();
- }
- void RysujSzescian(double a)
- {
- // Sciany boczne
- glColor3f(1, 0, 0);
- 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();
- glColor3f(1, 1, 0);
- // 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 pol_walec()
- {
- glColor3f(1, 1, 0);
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i * dAlfa <= 180; i++)
- {
- glVertex3f(0, suma, 0);
- glVertex3f(r * cos(DEG2RAD(i * dAlfa)), suma, r * sin(DEG2RAD(i * dAlfa)));
- }
- glEnd();
- glColor3f(1, 0, 0);
- glBegin(GL_QUAD_STRIP);
- for (y = 0; y < h; y += h / entka)
- {
- for (i = 0; i * dAlfa <= 180; i++)
- {
- glVertex3f(r * cos(DEG2RAD(i * dAlfa)), y, r * sin(DEG2RAD(i * dAlfa)));
- y += h / entka;
- glVertex3f(r * cos(DEG2RAD(i * dAlfa)), y, r * sin(DEG2RAD(i * dAlfa)));
- y -= h / entka;
- }
- }
- glEnd();
- glColor3f(1, 1, 0);
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i * dAlfa <= 180; i++)
- {
- glVertex3f(0, h, 0);
- glVertex3f(r * cos(DEG2RAD(i * dAlfa)), h, r * sin(DEG2RAD(i * dAlfa)));
- }
- glEnd();
- glColor3f(1, 0, 1);
- glBegin(GL_QUAD_STRIP);
- for (i = -2; i <= 2; i++)
- {
- glVertex3f(i, 0, 0);
- glVertex3f(i, h, 0);
- }
- glEnd();
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu. Powinna
- // być wywolywana kazdorazowo po zmianie rozmiarow okna programu.
- void UstawParametryWidoku(int szer, int wys)
- {
- // Zapamietanie wielkosci widoku
- szerokoscOkna = szer;
- wysokoscOkna = wys;
- // Ustawienie parametrow viewportu
- glViewport(0, 0, szerokoscOkna, wysokoscOkna);
- // Przejscie w tryb modyfikacji macierzy rzutowania
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(OBSERWATOR_FOV_Y, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja wyswietlajaca pojedyncza klatke animacji
- void WyswietlObraz(void)
- {
- // Wyczyszczenie bufora koloru i bufora glebokosci
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
- glMatrixMode(GL_MODELVIEW);
- // Zastapienie aktywnej macierzy macierza jednostkowa
- glLoadIdentity();
- // Ustalenie polozenia obserwatora
- glTranslatef(0, 0, -odl);
- glRotatef(osX, 1, 0, 0);
- glRotatef(osY, 0, 1, 0);
- glRotatef(osZ, 0, 0, 1);
- // Narysowanie szescianu
- // RysujSzescian(bok);
- RysujUklad();
- stozek();
- //stozekk2137();
- //sfera1();
- //stozek_sciety();
- //pol_walec();
- // Przelaczenie buforow ramki
- glutSwapBuffers();
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja obslugi klawiatury
- void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
- {
- /*if(klawisz == '+')
- bok *= 2.0;
- else if (klawisz == '-')
- bok /= 2.0;*/
- if (klawisz == 27)
- exit(0);
- else if (klawisz == '=')
- {
- if (odl - 1 >= odlmin)
- odl--;
- }
- else if (klawisz == '-')
- {
- if (odl + 1 <= odlmax)
- odl++;
- }
- else if (klawisz == 'w')
- osX++;
- else if (klawisz == 's')
- osX--;
- else if (klawisz == 'a')
- osY++;
- else if (klawisz == 'd')
- osY--;
- else if (klawisz == 'z')
- osZ--;
- else if (klawisz == 'x')
- osZ++;
- else if (klawisz == 'b')
- {
- if (entka <= 64)
- entka += 1;
- }
- else if (klawisz == 'v')
- {
- if (entka > 4)
- entka -= 1;
- }
- else if (klawisz == 'u')
- {
- if (slice > 0)
- slice--;
- }
- else if (klawisz == 'i')
- {
- if (slice <= 64)
- slice++;
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Glowna funkcja programu
- int main(int argc, char** argv)
- {
- // Zainicjowanie biblioteki GLUT
- glutInit(&argc, argv);
- // Ustawienie trybu wyswietlania
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- // Ustawienie polozenia dolenego lewego rogu okna
- glutInitWindowPosition(100, 100);
- // Ustawienie rozmiarow okna
- glutInitWindowSize(szerokoscOkna, wysokoscOkna);
- // Utworzenie okna
- glutCreateWindow("Szescian");
- // Odblokowanie bufora glebokosci
- glEnable(GL_DEPTH_TEST);
- // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
- glClearDepth(1000.0);
- // Ustawienie koloru czyszczenia bufora ramki
- glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
- // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- // Zarejestrowanie funkcji (callback) odpowiedzialnej za
- glutDisplayFunc(WyswietlObraz);
- // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
- // zmieniane sa rozmiary okna
- glutReshapeFunc(UstawParametryWidoku);
- // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
- // zadnych zadan
- glutIdleFunc(WyswietlObraz);
- // Zarejestrowanie funkcji obslugi klawiatury
- glutKeyboardFunc(ObslugaKlawiatury);
- // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
- // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement