Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GL\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 = 5;
- float R = 5.0;
- float H = 1;
- // Prototypy funkcji
- void UstawParametryWidoku(int szer, int wys);
- void WyswietlObraz(void);
- void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
- 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);
- double H = R;
- for (int j = 0; j < H; j = j + H / 5) {
- glBegin(GL_QUAD_STRIP);
- for (double i = 0; i * alfa <= 360; i++) {
- glVertex3f(R * cos(DEG2RAD(i * alfa)), 0, R * sin(DEG2RAD(i * alfa)));
- glVertex3f(R * cos(DEG2RAD(i * alfa)), j, R * sin(DEG2RAD(i * alfa)));
- }
- glEnd();
- }
- }
- double fi;
- double psi;
- void Sfera() {
- fi = 360 / N;
- psi = 90 / N;
- glColor3f(1.0, 1.0, 0.0);
- // SFERA
- for (double j = 0; j * psi <= 90; j++) {
- glBegin(GL_QUAD_STRIP);
- for (double i = 0; i * fi <= 270; i++) {
- glVertex3f(R * cos(DEG2RAD(fi * i)) * cos(DEG2RAD(psi * j)), R * sin(DEG2RAD(psi * j)), R * sin(DEG2RAD(fi * i)) * cos(DEG2RAD(psi * j)));
- glVertex3f(R * cos(DEG2RAD(fi * i)) * cos(DEG2RAD(psi * (j + 1))), R * sin(DEG2RAD(psi * (j + 1))), R * sin(DEG2RAD(fi * i)) * cos(DEG2RAD(psi * (j + 1))));
- }
- glEnd();
- glBegin(GL_QUAD_STRIP);
- for (double i = 0; i * fi <= 360; i++) {
- glVertex3f(R * cos(DEG2RAD(fi * i)) * cos(DEG2RAD(psi * j)), -R * sin(DEG2RAD(psi * j)), R * sin(DEG2RAD(fi * i)) * cos(DEG2RAD(psi * j)));
- glVertex3f(R * cos(DEG2RAD(fi * i)) * cos(DEG2RAD(psi * (j + 1))), -R * sin(DEG2RAD(psi * (j + 1))), R * sin(DEG2RAD(fi * i)) * cos(DEG2RAD(psi * (j + 1))));
- }
- glEnd();
- }
- // Y=0 luki
- for (int R1 = 0; R1 <= R; R1++) {
- glBegin(GL_QUAD_STRIP);
- for (double i = 0; i * fi >= -90; i--) {
- glVertex3f(R1 * cos(DEG2RAD(fi * i)), 0, R1 * sin(DEG2RAD(fi * i)));
- //glVertex3f(R1 * cos(DEG2RAD(fi * i)), 0, R1 * sin(DEG2RAD(fi * i)));
- }
- glEnd();
- }
- }
- void funkcja() {
- for (int k = 0; k <= N; k += N) {
- for (int i = 0; i < N; i++) {
- glBegin(GL_QUAD_STRIP);
- for (int j = 0; j <= N; j++) {
- glVertex3f(j, k, i);
- glVertex3f(j, k, i + 1);
- }
- glEnd();
- }
- }
- for (int i = 0; i < N;i++) {
- glBegin(GL_QUAD_STRIP);
- for (int j = 0; j < N ; j++) {
- glVertex3f(j, i, 0);
- glVertex3f(j, i + 1, 0);
- }
- for (int j = 0; j < N; j++) {
- glVertex3f(N, i, j);
- glVertex3f(N, i + 1, j);
- }
- for (int j = N; j > 0; j--) {
- glVertex3f(j, i, N);
- glVertex3f(j, i + 1, N);
- }
- for (int j = N; j >= 0; j--) {
- glVertex3f(0, i, j);
- glVertex3f(0, i + 1, j);
- }
- glEnd();
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////
- 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;
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // 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-------------------
- funkcja();
- //Sfera();
- //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.5;
- }
- else if (klawisz == 'v') {
- if (N > 1)R -= 0.5;
- }
- // STEROWANIE KAMERA
- if (klawisz == 'w') {
- if (OBSERWATOR_OBROT_X < 90)OBSERWATOR_OBROT_X = OBSERWATOR_OBROT_X + 2;
- }
- else if (klawisz == 's') {
- if (OBSERWATOR_OBROT_X > -90)OBSERWATOR_OBROT_X = OBSERWATOR_OBROT_X - 2;
- }
- else if (klawisz == 'a') {
- if (OBSERWATOR_OBROT_Y < 90)OBSERWATOR_OBROT_Y = OBSERWATOR_OBROT_Y + 2;
- }
- else if (klawisz == 'd') {
- if (OBSERWATOR_OBROT_Y > -90)OBSERWATOR_OBROT_Y = OBSERWATOR_OBROT_Y - 2;
- }
- else if (klawisz == 'q') {
- OBSERWATOR_ODLEGLOSC = OBSERWATOR_ODLEGLOSC + 2;
- }
- else if (klawisz == 'e') {
- if (OBSERWATOR_ODLEGLOSC > 0)OBSERWATOR_ODLEGLOSC = OBSERWATOR_ODLEGLOSC - 2;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement