Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////
- #include <math.h>
- #include <string.h>
- #include <stdio.h>
- #include <GL/glut.h>
- #include "materials.h"
- #define PI 3.14159265
- // Definicja stalych
- #define LPOZ_MAX 100
- #define LPOZ_MIN 3
- #define LPION_MAX 100
- #define LPION_MIN 3
- #define R_MAX 10.0
- #define WYS_MAX 10.0
- #define KROK_FLOAT 0.1
- #define X_OFFSET_SWIATLO1 10
- #define Y_OFFSET_SWIATLO1 120
- #define X_OFFSET_SWIATLO2 10
- #define Y_OFFSET_SWIATLO2 120
- #define X_OFFSET_MAT 10
- #define Y_OFFSET_MAT 220
- #define X_OFFSET_OBIEKT 10
- #define Y_OFFSET_OBIEKT 300
- #define ID_MENU_SWIATLA 0
- #define ID_MENU_MATERIALU 1
- #define LPOZ_MENU_SWIATLA 10
- #define LPOZ_MENU_MATERIALU 5
- #define M_PI 3.14159
- int N = 64;
- int M = 64;
- float length = 0;
- int normalne = 1;
- GLfloat OBSERWATOR_OBROT_X = 20.0;
- GLfloat OBSERWATOR_OBROT_Y = 20.0;
- GLfloat OBSERWATOR_OBROT_Z = 0;
- GLfloat OBSERWATOR_ODLEGLOSC = 20.0;
- GLUquadricObj* podstawaSciany;
- #define X_OFFSET_SWIATLO 10
- #define Y_OFFSET_SWIATLO 190
- // Makro przeliczajace stopnie na radiany
- #define DEG2RAD(x) ((float)(x)*M_PI/180.0)
- // Zmienne globalne
- double kat2 = 0;
- double kat = 0.0; // Kat obrotu obserwatora wokol osi OY [stopnie]
- int lPionowych; // Liczba podzialow pionowych
- int lPoziomych; // Liczba podzialow poziomych
- double promien; // Promien walca
- double wysokosc; // Wysokosc walca
- int sIndeks; // Wybrana pozycja w tablicy parametrow swiatla
- int mIndeks; // Wybrana pozycja w tablicy parametrow materialu
- int menu; // Identyfikator wybranego menu (menu swiatla lub menu materialu)
- int szerokoscOkna = 800;
- int wysokoscOkna = 600;
- int smooth = 1;
- int fill = 1;
- int zrodlo1 = 1;
- int zrodlo2 = 1;
- int predkosc = 1;
- int odleglosc = 10;
- int katx = 0;
- int zmienna = 5;
- int zmienna2 = 5;
- int mat1=0;
- int mat2=0;
- // Tablica parametrow swiatla 1
- GLfloat swiatlo1[10][4] = {
- {0.0, 0.0, 0.0, 1.0}, // [0] otoczenie
- {1.0, 1.0, 1.0, 1.0}, // [1] rozproszenie
- {1.0, 1.0, 1.0, 1.0}, // [2] lustrzane
- {0.0, 0.0, 1.0, 1.0}, // [3] polozenie
- {-1.0, 0.0, 0.0, 0.0}, // [4] kierunek swiecenia
- {0.0, 0.0, 0.0, 0.0}, // [5] tlumienie katowe swiatla
- {30.0, 0.0, 0.0, 0.0},// [6] kat odciecia swiatla
- {1.0, 0.0, 0.0, 0.0}, // [7] stale tlumienie
- {0.0, 0.0, 0.0, 0.0}, // [8] tlumienie liniowe
- {0.0, 0.0, 0.0, 0.0} }; // [9] tlumienie kwadratowe
- // Tablica parametrow zrodla swiatla nr 1
- GLfloat swiatlo2[10][4] = {
- {0,0.7, 0, 1.0}, // [0] otoczenie
- {0, 0.7, 0, 1.0}, // [1] rozproszenie
- {0, 18, 1, 1.0}, // [2] lustrzane
- {10, 10.0, 10.0, 1.0},// [3] polozenie
- {-1.0, -1.0, -1.0, 0.0},// [4] kierunek swiecenia
- {0.0, 0.0, 0.0, 0.0}, // [5] tlumienie katowe swiatla
- {180.0, 0.0, 0.0, 0.0},// [6] kat odciecia swiatla
- {1.0, 0.0, 0.0, 0.0}, // [7] stale tlumienie
- {0.0, 0.0, 0.0, 0.0}, // [8] tlumienie liniowe
- {0.0, 0.0, 0.0, 0.0} }; // [9] tlumienie kwadratowe
- float material1[5][4] = {
- {0.021500, 0.174500, 0.021500, 0.550000}, // [0] wspolczynnik odbicia swiatla otoczenia
- {0.075680, 0.614240, 0.075680, 0.550000}, // [1] wspolczynnik odbicia swiatla rozproszonego
- {0.633000, 0.727811, 0.633000, 0.550000}, // [2] wspolczynnik odbicia swiatla lustrzanego
- {76.8, 0.0, 0.0, 0.0}, // [3] polysk
- {0.0, 0.0, 0.0, 1.0}}; // [4] kolor swiatla emitowanego
- // Tablica parametrow materialu nr 2
- float material2[5][4] = {
- {0.250000, 0.148000, 0.064750, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
- {0.400000, 0.236800, 0.103600, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
- {0.774597, 0.458561, 0.200621, 1.000000}, // [2] wspolczynnik odbicia swiatla lustrzanego
- {76.8, 0.0, 0.0, 0.0}, // [3] polysk
- {0.0, 0.0, 0.0, 1.0}}; // [4] kolor swiatla emitowanego
- float material3[5][4] = {
- {0.247250, 0.199500, 0.074500, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
- {0.751640, 0.606480, 0.226480, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
- {0.628281, 0.555802, 0.366065, 1.000000}, // [2] wspolczynnik odbicia swiatla lustrzanego
- {52.2, 0.0, 0.0, 0.0}, // [3] polysk
- {0.0, 0.0, 0.0, 1.0}}; // [4] kolor swiatla emitowanego
- // Zerowy parametr Emission
- const GLfloat Emission[4] = {0.0 , 0.0, 0.0, 0.0};
- // Tablica parametrow materialu z jakiego wykonany jest walec
- GLfloat material[6][4];
- // Prototypy funkcji
- void UstawDomyslneWartosciParametrow(void);
- void RysujTekstRastrowy(void *font, char *tekst);
- void UstawKolorPozycji(int m, int indeks);
- void WlaczOswietlenie(void);
- void DefiniujMaterial(void);
- void UstawParametryOswietlenia(int indeks, char operacja);
- void UstawParametryMaterialu(int indeks, char operacja);
- //void RysujWalec(double h, double r, int nv, int nh);
- void rysujStozek();
- void UstawParametryWidoku(int szer, int wys);
- void RysujNakladke(void);
- void WyswietlObraz(void);
- void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
- void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y);
- GLboolean tryb = GL_TRUE;
- //////////////////////////////////////////////////////////////////////////////////////////
- void zmianaMaterialu(){
- if(mat1==1){
- glMaterialfv(GL_FRONT, GL_AMBIENT, material1[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material1[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material1[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material1[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material1[4]);
- }
- else if(mat2==1){
- glMaterialfv(GL_FRONT, GL_AMBIENT, material2[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material2[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material2[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material2[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material2[4]);
- }
- else{
- glMaterialfv(GL_FRONT, GL_AMBIENT, material3[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material3[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material3[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material3[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material3[4]);
- }
- }
- void ZmianaTrybu()
- {
- if (tryb == GL_TRUE)
- {
- tryb = GL_FALSE;
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- }
- else if (tryb == GL_FALSE)
- {
- tryb = GL_TRUE;
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- }
- }
- // Funkcja ustawiajaca domyslne parametry walca, materialu i zrodla swiatla
- void UstawDomyslneWartosciParametrow(void)
- {
- // Tablica parametrow materialu
- GLfloat param_materialu[6][4] = {
- {0.2, 0.2, 0.2, 1.0}, // [0] wspolczynnik odbicia swiatla otoczenia
- {0.8, 0.8, 0.8, 1.0}, // [1] wspolczynnik odbicia swiatla rozproszonego
- {0.0, 0.0, 0.0, 1.0}, // [2] wspolczynnik odbicia swiatla lustrzanego
- {0.0, 0.0, 0.0, 0.0}, // [3] polysk
- {0.0, 0.0, 0.0, 1.0}}; // [4] kolor swiatla emitowanego
- // Skopiowanie zawartosci tablic param_* do tablic globalnych
- memcpy(material, param_materialu, LPOZ_MENU_MATERIALU*4*sizeof(GLfloat));
- // Skopiowanie Właściwości materiału - złoto
- memcpy(material[0], PolishedGoldAmbient, 4*sizeof(GLfloat));
- memcpy(material[1], PolishedGoldDiffuse, 4*sizeof(GLfloat));
- memcpy(material[2], PolishedGoldSpecular, 4*sizeof(GLfloat));
- memcpy(material[3], &PolishedGoldShininess, 4*sizeof(GLfloat));
- memcpy(material[4], Emission, 4*sizeof(GLfloat));
- // Parametry walca
- lPionowych = 20; // Liczba podzialow pionowych
- lPoziomych = 20; // Liczba podzialow poziomych
- promien = 3.0; // Promien walca
- wysokosc = 3.0; // Wysokosc walca
- // Pozostale parametry
- sIndeks = 0; // Wybrana pozycja w tablicy parametrow swiatla
- mIndeks = 0; // Wybrana pozycja w tablicy parametrow materialu
- menu = ID_MENU_SWIATLA;
- glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja rysujaca tekst rastrowy <tekst> za pomca fontow bitmapowych <font>.Rysowanie
- // tekstu wykonywane jest poczawszy od biezacej pozycji ekranu.
- void RysujTekstRastrowy(void *font, char *tekst)
- {
- int i;
- for (i = 0; i < (int)strlen(tekst); i++)
- glutBitmapCharacter(font, tekst[i]);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja ustawia kolor dla pozycji <indeks> w menu <m>. Aktualnie wybrana pozycja
- // jest rysowana w kolorze zoltym.
- void UstawKolorPozycji(int m, int indeks)
- {
- if (m == menu)
- if((m == ID_MENU_SWIATLA) && (indeks == sIndeks)
- || (m == ID_MENU_MATERIALU) && (indeks == mIndeks))
- // Pozycja podswietlona wyswietlana jest w kolkorze zoltym
- glColor3f(1.0, 1.0, 0.0);
- else
- // Pozostale na bialo
- glColor3f(1.0, 1.0, 0.0);
- }
- void powBocznaWalca(float R, float r, float y, float h, int n)
- {
- float alfa;
- int i;
- float x;
- float z;
- glColor3f(0,1,1);
- glBegin(GL_QUAD_STRIP);
- alfa = 360.0/n;
- for(i=0;i<=n;i++)
- {
- x = cos(0.0174532925f*i*alfa);
- z = sin(0.0174532925f*i*alfa);
- glVertex3f(x*R,y+0,z*R);
- glVertex3f(x*r,y+h,z*r);
- }
- x = cos(0.0);
- z = sin(0.0);
- glVertex3f(x*R,y+0,z*R);
- glVertex3f(x*r,y+h,z*r);
- glEnd();
- }
- void RysujKolo(float R, float y, int n)
- {
- float alfa;
- int i;
- float x;
- float z;
- glBegin(GL_TRIANGLE_FAN);
- //glColor3f(1,0.4,1);
- glVertex3f(0,y,0);
- alfa = 360.0f/n;
- for(i=0;i<=n;i++)
- {
- x = cos(0.0174532925f*i*alfa);
- z = sin(0.0174532925f*i*alfa);
- glVertex3f(x*R,y+0,z*R);
- }
- x = cos(0.0);
- z = sin(0.0);
- glVertex3f(x*R,y+0,z*R);
- glEnd();
- }
- void rysowanieWalca(float R, float r, float h, int n, int m) {
- int i;
- float dR, dr, dh, y, tmp1, tmp2;
- dh = h / m;
- for (i = 0; i < m; i++)
- {
- y = dh * i;
- tmp1 = y / h;
- tmp2 = (y + dh) / h;
- dR = R + (r - R) * tmp1;
- dr = R + (r - R) * tmp2;
- powBocznaWalca(dR, dr, y, dh, n);
- }
- glColor3f(1, 0.4, 0.6);
- RysujKolo(R, 0, n);
- glColor3f(1, 1, 0.6);
- RysujKolo(r, h, n);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Wlaczenie oswietlenia sceny
- void WlaczOswietlenie(void)
- {
- podstawaSciany = gluNewQuadric();
- gluQuadricDrawStyle(podstawaSciany, GLU_LINE);
- // Odblokowanie oswietlenia
- glEnable(GL_LIGHTING);
- //swaitlo 1
- if (zrodlo1 == 1) {
- //glLoadIdentity();
- glPushMatrix();
- glRotatef(5*katx, 1, 0, 0);
- glRotatef(kat2, 0, 1, 0);
- glTranslatef(odleglosc, 0, 0);
- //glutWireSphere(1, 10, 10);
- glEnable(GL_LIGHT0);
- glLightfv(GL_LIGHT0, GL_AMBIENT, swiatlo1[0]);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, swiatlo1[1]);
- glLightfv(GL_LIGHT0, GL_SPECULAR, swiatlo1[2]);
- glLightfv(GL_LIGHT0, GL_POSITION, swiatlo1[3]);
- glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, swiatlo1[4]);
- glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, swiatlo1[5][0]);
- glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, swiatlo1[6][0]);
- glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, swiatlo1[7][0]);
- glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, swiatlo1[8][0]);
- glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, swiatlo1[9][0]);
- kat2 += predkosc;
- /*glPopMatrix();*/
- glPopMatrix();
- }
- else {
- glDisable(GL_LIGHT0);
- }
- //swiatlo 2
- if (zrodlo2 == 1) {
- glEnable(GL_LIGHT1);
- glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo2[0]);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo2[1]);
- glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo2[2]);
- glLightfv(GL_LIGHT1, GL_POSITION, swiatlo2[3]);
- glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo2[4]);
- /*glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, swiatlo2[5][0]);
- glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, swiatlo2[6][0]);
- glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, swiatlo2[7][0]);
- glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, swiatlo2[8][0]);
- glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, swiatlo2[9][0]);*/
- }
- else {
- //wylaczenie zrodla swiatla nr 2
- glDisable(GL_LIGHT1);
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Zdefiniowanie walasciwosci materialu walca na podstawie zapisanych w tablcy 'material'
- // parametrow (material obowiazuje tylko do scian skierowanych przodem do obserwatora)
- void DefiniujMaterial(void)
- {
- glMaterialfv(GL_FRONT, GL_AMBIENT, material[0]);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, material[1]);
- glMaterialfv(GL_FRONT, GL_SPECULAR, material[2]);
- glMaterialfv(GL_FRONT, GL_SHININESS, material[3]);
- glMaterialfv(GL_FRONT, GL_EMISSION, material[4]);
- }
- ////////////////////////////////////////////////////////////////////////////////////////
- // Ustawienie parametrow oswietlenia sceny
- void UstawParametryOswietlenia(int indeks, char operacja)
- {
- switch(indeks)
- {
- // Parametry swiatla otoczenia, rozproszenia i odbicia lustrzanego
- case 0:
- case 1:
- case 2:
- switch(operacja)
- {
- // Zwiekszenie skladowej R o wartosc KROK_FLOAT
- case '1':
- swiatlo1[indeks][0] = (swiatlo1[indeks][0] >= 1.0) ? 1.0 : swiatlo1[indeks][0]+ KROK_FLOAT;
- break;
- // Zmniejszenie skladowej R o wartosc KROK_FLOAT
- case '!':
- swiatlo1[indeks][0] = (swiatlo1[indeks][0] <= 0.1) ? 0.0 : swiatlo1[indeks][0]- KROK_FLOAT;
- break;
- // Zwiekszenie skladowej G o wartosc KROK_FLOAT
- case '2':
- swiatlo1[indeks][1] = (swiatlo1[indeks][1] >= 1.0) ? 1.0 : swiatlo1[indeks][1]+ KROK_FLOAT;
- break;
- // Zmniejszenie skladowej G o wartosc KROK_FLOAT
- case '@':
- swiatlo1[indeks][1] = (swiatlo1[indeks][1] <= 0.01) ? 0.0 : swiatlo1[indeks][1]- KROK_FLOAT;
- break;
- // Zwiekszenie skladowej B o wartosc KROK_FLOAT
- case '3':
- swiatlo1[indeks][2] = (swiatlo1[indeks][2] >= 1.0) ? 1.0 : swiatlo1[indeks][2]+ KROK_FLOAT;
- break;
- // Zmniejszenie skladowej B o wartosc KROK_FLOAT
- case '#':
- swiatlo1[indeks][2] = (swiatlo1[indeks][2] <= 0.1) ? 0.0 : swiatlo1[indeks][2]- KROK_FLOAT;
- break;
- // Zwiekszenie skladowej A o wartosc KROK_FLOAT
- case '4':
- swiatlo1[indeks][3] = (swiatlo1[indeks][3] >= 1.0) ? 1.0 : swiatlo1[indeks][3]+ KROK_FLOAT;
- break;
- // Zmniejszenie skladowej B o wartosc KROK_FLOAT
- case '$':
- swiatlo1[indeks][3] = (swiatlo1[indeks][3] <= 0.1) ? 0.0 : swiatlo1[indeks][3]- KROK_FLOAT;
- break;
- }
- break;
- // Parametry opisujace polozenie i orientacje swiatla
- case 3:
- case 4:
- case 5:
- case 6:
- switch(operacja)
- {
- // Zwiekszenie wspolrzednej X o wartosc KROK_FLOAT
- case '1':
- swiatlo1[indeks][0] += KROK_FLOAT;
- break;
- // Zmniejszenie wspolrzednej X o wartosc KROK_FLOAT
- case '!':
- swiatlo1[indeks][0] -= KROK_FLOAT;
- break;
- // Zwiekszenie wspolrzednej Y o wartosc KROK_FLOAT
- case '2':
- swiatlo1[indeks][1] += KROK_FLOAT;
- break;
- // Zmniejszenie wspolrzednej Y o KROK_FLOAT
- case '@':
- swiatlo1[indeks][1] -= KROK_FLOAT;
- break;
- // Zwiekszenie wspolrzednej Z o wartosc KROK_FLOAT
- case '3':
- swiatlo1[indeks][2] += KROK_FLOAT;
- break;
- // Zmniejszenie wspolrzednej Z o wartosc KROK_FLOAT
- case '#':
- swiatlo1[indeks][2] -= KROK_FLOAT;
- break;
- // Zwiekszenie wspolrzednej W o wartosc KROK_FLOAT
- case '4':
- swiatlo1[indeks][3] += KROK_FLOAT;
- break;
- // Zmniejszenie wspolrzednej W o wartosc KROK_FLOAT
- case '$':
- swiatlo1[indeks][3] -= KROK_FLOAT;
- break;
- }
- break;
- case 7:
- case 8:
- case 9:
- switch(operacja)
- {
- // Zwiekszenie skladowych tlumienia wartosc KROK_FLOAT/10
- case '1':
- swiatlo1[indeks][0] += KROK_FLOAT/10.0;
- break;
- // Zmniejszenie stalych tlumienia o wartosc KROK_FLOAT/10
- case '!':
- swiatlo1[indeks][0] -= KROK_FLOAT/10.0;
- break;
- }
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Ustawienie parametrow materoalu
- void UstawParametryMaterialu(int indeks, char operacja)
- {
- switch(indeks)
- {
- // Parametry odbicia swiatla swiatla otoczenia, swiatla rozproszonego, swiatla
- // kierunkowego i emitowanego
- case 0:
- case 1:
- case 2:
- case 4:
- switch(operacja)
- {
- // Zwiekszenie skladowej R o wartosc KROK_FLOAT
- case '1':
- material[indeks][0] = (material[indeks][0] >= 1.0) ? 1.0 : material[indeks][0]+ KROK_FLOAT;
- break;
- // Zmniejszenie skladowej R o wartosc KROK_FLOAT
- case '!':
- material[indeks][0] = (material[indeks][0] <= 0.1) ? 0.0 : material[indeks][0]- KROK_FLOAT;
- break;
- // Zwiekszenie skladowej G o wartosc KROK_FLOAT
- case '2':
- material[indeks][1] = (material[indeks][1] >= 1.0) ? 1.0 : material[indeks][1]+ KROK_FLOAT;
- break;
- // Zmniejszenie skladowej G o wartosc KROK_FLOAT
- case '@':
- material[indeks][1] = (material[indeks][1] <= 0.1) ? 0.0 : material[indeks][1]- KROK_FLOAT;
- break;
- // Zwiekszenie skladowej B o wartosc KROK_FLOAT
- case '3':
- material[indeks][2] = (material[indeks][2] >= 1.0) ? 1.0 : material[indeks][2]+ KROK_FLOAT;
- break;
- // Zmniejszenie skladowej B o wartosc KROK_FLOAT
- case '#':
- material[indeks][2] = (material[indeks][2] <= 0.1) ? 0.0 : material[indeks][2]- KROK_FLOAT;
- break;
- // Zwiekszenie skladowej A o wartosc KROK_FLOAT
- case '4':
- material[indeks][3] = (material[indeks][3] >= 1.0) ? 1.0 : material[indeks][3]+ KROK_FLOAT;
- break;
- // Zmniejszenie skladowej A o wartosc KROK_FLOAT
- case '$':
- material[indeks][3] = (material[indeks][3] <= 0.1) ? 0.0 : material[indeks][3]- KROK_FLOAT;
- break;
- }
- break;
- // Parametr opisujacy polysk powierzchni
- case 3:
- switch(operacja)
- {
- // Zwiekszenie skladowej R o wartosc KROK_FLOAT*10
- case '1':
- material[indeks][0] = (material[indeks][0] >= 100.0) ? 100.0 : material[indeks][0]+ KROK_FLOAT * 10.0;
- break;
- // Zmniejszenie skladowej R o wartosc KROK_FLOAT*10
- case '!':
- material[indeks][0] = (material[indeks][0] <= 0.0) ? 0.0 : material[indeks][0]- KROK_FLOAT * 10.0;
- break;
- }
- break;
- }
- }
- /*void rysujStozek()
- {
- double R = promien;
- double h = wysokosc;
- double pio = lPionowych;
- double poz = lPoziomych;
- double dAlfa, x, y, Rp, rp;
- int i, j;
- if (smooth)
- glShadeModel(GL_SMOOTH);
- else
- glShadeModel(GL_FLAT);
- if (fill)
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- else
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- dAlfa = 360 / pio;
- glColor3f(1.0, 0.0, 1.0);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0.0, 0.0, 0.0);
- for (i = 0; i * dAlfa <= 360.0; i++)
- {
- glVertex3f(R * cos(DEG2RAD(i * dAlfa)), 0.0, R * sin(DEG2RAD(i * dAlfa)));
- }
- glEnd();
- glColor3f(1.0, 0.0, 0.0);
- for (j = 0; j < poz; j++)
- {
- x = R * ((j * (double)(h / poz)) / h);
- y = R * (((j * (double)(h / poz)) + (h / poz)) / h);
- Rp = R - x;
- rp = R - y;
- glBegin(GL_QUADS);
- for (i = 0; i <= pio; i++)
- {
- glVertex3f(Rp * cos(DEG2RAD(i * dAlfa)), (j * (double)(h / poz)), Rp * sin(DEG2RAD(i * dAlfa)));
- glVertex3f(rp * cos(DEG2RAD(i * dAlfa)), (j * (double)(h / poz)) + (h / poz), rp * sin(DEG2RAD(i * dAlfa)));
- glVertex3f(rp * cos(DEG2RAD((i + 1) * dAlfa)), (j * (double)(h / poz)) + (h / poz), rp * sin(DEG2RAD((i + 1) * dAlfa)));
- glVertex3f(Rp * cos(DEG2RAD((i + 1) * dAlfa)), (j * (double)(h / poz)), Rp * sin(DEG2RAD((i + 1) * dAlfa)));
- }
- glEnd();
- glBegin(GL_LINES);
- for (i = 0; i <= pio; i++)
- {
- glVertex3f(Rp * cos(DEG2RAD(i * dAlfa)), (j * (double)(h / poz)), Rp * sin(DEG2RAD(i * dAlfa)));
- glVertex3f(Rp * 1.5 * cos(DEG2RAD(i * dAlfa)), (j * (double)(h / poz)), Rp * 1.5 * sin(DEG2RAD(i * dAlfa)));
- glVertex3f(rp * cos(DEG2RAD(i * dAlfa)), (j * (double)(h / poz)) + (h / poz), rp * sin(DEG2RAD(i * dAlfa)));
- glVertex3f(rp * 1.5 * cos(DEG2RAD(i * dAlfa)), (j * (double)(h / poz)) + (h / poz), rp * 1.5 *sin(DEG2RAD(i * dAlfa)));
- }
- glEnd();
- }
- }*/
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu
- 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(40.0, (float)szerokoscOkna/(float)wysokoscOkna, 1.0, 1000.0);
- // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
- glMatrixMode(GL_MODELVIEW);
- // Zmiana macierzy znajdujacej sie na wierzcholku stosu na macierz jednostkowa
- glLoadIdentity();
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja rysujaca na wygenerowanym obrazie walca nkladke z tekstem opisujacym
- // aktualne parametry zrodla swiatla i materialu.
- void RysujNakladke(void)
- {
- char buf[255];
- // Zmiana typu rzutu z perspektywicznego na ortogonalny
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glLoadIdentity();
- glOrtho(0.0, szerokoscOkna, 0.0, wysokoscOkna, -100.0, 100.0);
- // Modelowanie sceny 2D (zawartosci nakladki)
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
- // Zablokowanie oswietlenia (mialoby ono wplyw na kolor tekstu)
- glDisable(GL_LIGHTING);
- // Okreslenie koloru tekstu
- glColor3f(1.0, 1.0, 1.0);
- // RYSOWANIE MENU PARAMETROW ZRODLA SWIATLA
- sprintf(buf, "Aby przyblizyc kamere wcisnij c");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 32);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "Aby oddalic kamere wcisnij d");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 42);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "Zmiana orientacji kamery w osi X przyciski i lub k");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 52);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "Zmiana orientacji kamery w osi Y przyciski j lub k ");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 62);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "Zmiana orientacji kamery w osi Z przyciski u lub 0");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 72);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "Zmiana liczby podzialow po przycisnieciu v lub V lub");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 82);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "Fill lub nie Fill b");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 92);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "Zmiana swiatla t lub y");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 102);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "Zmiana materialu m");
- glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 102);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- /* sprintf(buf, "Swiatlo - (m - zmiana menu na material), (1,2,3,4 - zwiekszenie parametrow), (!,@,#,$) - zmniejszenie parametrow");
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 0);
- sprintf(buf, " - otaczajace (%.1f, %.1f, %.1f, %.1f)", swiatlo1[0][0], swiatlo1[0][1], swiatlo1[0][2],
- swiatlo1[0][3]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 10);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 1);
- sprintf(buf, " - rozproszone (%.1f, %.1f, %.1f, %.1f)", swiatlo1[1][0], swiatlo1[1][1], swiatlo1[1][2],
- swiatlo1[1][3]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 20);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 2);
- sprintf(buf, " - lustrzane (%.1f, %.1f, %.1f, %.1f)", swiatlo1[2][0], swiatlo1[2][1], swiatlo1[2][2],
- swiatlo1[2][3]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 30);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 3);
- sprintf(buf, " - polozenie (%.1f, %.1f, %.1f, %.1f)", swiatlo1[3][0], swiatlo1[3][1], swiatlo1[3][2],
- swiatlo1[3][3]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 40);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 4);
- sprintf(buf, " - kierunek (%.1f, %.1f, %.1f)", swiatlo1[4][0], swiatlo1[4][1], swiatlo1[4][2]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 50);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 5);
- sprintf(buf, " - tl. katowe (%.1f)", swiatlo1[5][0]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 60);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 6);
- sprintf(buf, " - kat odciecia(%.1f)", swiatlo1[6][0]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 70);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 7);
- sprintf(buf, " - tl. stale (%.2f)", swiatlo1[7][0]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 80);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 8);
- sprintf(buf, " - tl. liniowe (%.2f)", swiatlo1[8][0]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 90);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_SWIATLA, 9);
- sprintf(buf, " - tl. kwadrat.(%.2f)", swiatlo1[9][0]);
- glRasterPos2i(X_OFFSET_SWIATLO1, Y_OFFSET_SWIATLO1 - 100);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- // RYSOWANIE MENU PARAMETROW MATERIALU
- glColor3f(1.0, 1.0, 1.0);
- sprintf(buf, "Material - (m - zmiana menu na swiatlo), (1,2,3,4 - zwiekszenie parametrow), (!,@,#,$) - zmniejszenie parametrow");
- glRasterPos2i(X_OFFSET_MAT, Y_OFFSET_MAT);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_MATERIALU, 0);
- sprintf(buf, " - otaczajace (%.6f, %.6f, %.6f, %.6f)", material[0][0], material[0][1],
- material[0][2], material[0][3]);
- glRasterPos2i(X_OFFSET_MAT, Y_OFFSET_MAT - 10);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_MATERIALU, 1);
- sprintf(buf, " - rozproszone (%.6f, %.6f, %.6f, %.6f)", material[1][0], material[1][1],
- material[1][2], material[1][3]);
- glRasterPos2i(X_OFFSET_MAT, Y_OFFSET_MAT - 20);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_MATERIALU, 2);
- sprintf(buf, " - kierunkowe (%.6f, %.6f, %.6f, %.6f)", material[2][0], material[2][1],
- material[2][2], material[2][3]);
- glRasterPos2i(X_OFFSET_MAT, Y_OFFSET_MAT - 30);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_MATERIALU, 3);
- sprintf(buf, " - polysk (%.2f)", material[3][0]);
- glRasterPos2i(X_OFFSET_MAT, Y_OFFSET_MAT - 40);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- UstawKolorPozycji(ID_MENU_MATERIALU, 4);
- sprintf(buf, " - emitowane (%.6f, %.6f, %.6f, %.6f)", material[4][0], material[4][1],
- material[4][2], material[4][3]);
- glRasterPos2i(X_OFFSET_MAT, Y_OFFSET_MAT - 50);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- // RYSOWANIE MENU PARAMETROW WALCA
- glColor3f(1.0, 1.0, 1.0);
- sprintf(buf, "Stozek:");
- glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "(p, P) - promien (%.1f)", promien);
- glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 10);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "(w, W) - wysokosc (%.1f)", wysokosc);
- glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 20);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "(v. V) - podzialow pionowych (%d)", lPionowych);
- glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 30);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- sprintf(buf, "(h, H) - podzialow poziomych (%d)", lPoziomych);
- glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 40);
- RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
- // Przywrocenie macierzy sprzed wywolania funkcji
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();*/
- // Odblokowanie oswietlenia
- glEnable(GL_LIGHTING);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja generujaca pojedyncza klatke animacji
- void WyswietlObraz(void)
- {
- // Wyczyszczenie bufora ramki i bufora glebokosci
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- // Ustawienie oswietlenia sceny (polozenie zrodla swiatla wyznaczane jest w ukladzie
- // wspolrzednych obserwatora)
- WlaczOswietlenie();
- // Okreslenie wielkosci widoku, wlaczenie rzutowania perspektywicznego
- // i zainicjowanie stosu macierzy modelowania
- UstawParametryWidoku(szerokoscOkna, wysokoscOkna);
- // Wyznaczenie polozenia obserwatora (przeksztalcenie uladu wspolrzednych
- // sceny do ukladu wspolrzednych obserwatora). Obserwator obraca sie wokol punktu 0.0
- // na osi OY. Promien obrotu = 20, pochylenie = 20 stopni,
- // predkosc obrotu = 0.25 stopnia/ramke.
- glTranslatef(0, 0, -OBSERWATOR_ODLEGLOSC);
- //glRotatef(20, 1, 0, 0);
- //glRotatef(kat, 0, 1, 0);
- glRotatef(OBSERWATOR_OBROT_X, 1, 0, 0);
- glRotatef(OBSERWATOR_OBROT_Y, 0, 1, 0);
- glRotatef(OBSERWATOR_OBROT_Z, 0, 0, 1);
- // Zdefiniowanie materialu walca
- DefiniujMaterial();
- // Generacja obrazu walca
- //RysujWalec(wysokosc, promien, lPoziomych, lPionowych);
- //rysujStozek();
- zmianaMaterialu();
- rysowanieWalca(1,1,3,zmienna, zmienna2);
- // Narysowanie tekstow z opisem parametrow oswietlenia i materialu
- RysujNakladke();
- // Przelaczenie buforow ramki
- glutSwapBuffers();
- // Modyfikacja kata obrotu
- kat += 0.25;
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja obslugi klawiatury
- void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
- {
- switch(klawisz)
- {
- case ']':
- katx++;
- break;
- case '}':
- katx--;
- break;
- case 'g':
- odleglosc++;
- break;
- case 'G':
- odleglosc--;
- break;
- case '[':
- predkosc++;
- break;
- case '{':
- predkosc--;
- break;
- case '9':
- smooth = !smooth;
- break;
- case '0':
- fill = !fill;
- break;
- case 'y':
- zrodlo1 = !zrodlo1;
- break;
- case 't':
- zrodlo2 = !zrodlo2;
- break;
- case 'd':
- if (OBSERWATOR_ODLEGLOSC >= 40)
- OBSERWATOR_ODLEGLOSC = 40;
- else
- OBSERWATOR_ODLEGLOSC += 1;
- break;
- case 'c':
- if (OBSERWATOR_ODLEGLOSC <= 10)
- OBSERWATOR_ODLEGLOSC = 10;
- else
- OBSERWATOR_ODLEGLOSC -= 1;
- break;
- case 'v':
- zmienna = (zmienna>4) ? zmienna-1 : zmienna;
- break;
- case 'V':
- zmienna = (zmienna<64) ? zmienna+1 : zmienna;
- break;
- case 'h':
- zmienna2 = (zmienna2>4) ? zmienna2-1 : zmienna2;
- break;
- case 'H':
- zmienna2 = (zmienna2<64) ? zmienna2+1 : zmienna2;
- break;
- case 'w':
- wysokosc = (wysokosc == WYS_MAX) ? WYS_MAX : wysokosc + 1;
- break;
- case 'W':
- wysokosc = (wysokosc == 1) ? wysokosc : wysokosc - 1;
- break;
- case 'p':
- promien = (promien == R_MAX) ? R_MAX : promien + 1;
- break;
- case 'P':
- promien = (promien == 1) ? promien : promien - 1;
- break;
- case 'r':
- UstawDomyslneWartosciParametrow();
- break;
- case 'b':
- ZmianaTrybu();
- break;
- case 'm':
- menu = (menu == ID_MENU_SWIATLA) ? ID_MENU_MATERIALU : ID_MENU_SWIATLA;
- break;
- case 'i':
- OBSERWATOR_OBROT_X += 1;
- break;
- case 'j':
- OBSERWATOR_OBROT_Y += 1;
- break;
- case 'k':
- OBSERWATOR_OBROT_X -= 1;
- break;
- case 'l':
- OBSERWATOR_OBROT_Y -= 1;
- break;
- case 'u':
- OBSERWATOR_OBROT_Z += 1;
- break;
- case 'o':
- OBSERWATOR_OBROT_Z -= 1;
- break;
- case '6':
- mat1=1;
- mat2=0;
- break;
- case '7':
- mat1=0;
- mat2=1;
- break;
- case '8':
- mat1=0;
- mat2=0;
- break;
- case '1':
- case '!':
- case '2':
- case '@':
- case '3':
- case '#':
- case '4':
- case '$':
- if (menu == ID_MENU_SWIATLA)
- UstawParametryOswietlenia(sIndeks, klawisz);
- else
- UstawParametryMaterialu(mIndeks, klawisz);
- break;
- // Wcisniecie klawisza ESC powoduje wyjscie z programu
- case 27:
- exit(0);
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Funkcja klawiszy specjalnych
- void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y)
- {
- switch(klawisz)
- {
- case GLUT_KEY_UP:
- if (menu == ID_MENU_SWIATLA)
- sIndeks = (sIndeks > 0) ? sIndeks - 1 : 0;
- else
- mIndeks = (mIndeks > 0) ? mIndeks - 1 : 0;
- break;
- case GLUT_KEY_DOWN:
- if (menu == ID_MENU_SWIATLA)
- sIndeks = (sIndeks < LPOZ_MENU_SWIATLA - 1) ? sIndeks + 1 : LPOZ_MENU_SWIATLA - 1;
- else
- mIndeks = (mIndeks < LPOZ_MENU_MATERIALU - 1) ? mIndeks + 1 : LPOZ_MENU_MATERIALU - 1;
- break;
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // Glowna funkcja programu
- int main(int argc, char **argv)
- {
- // Zainicjowanie biblioteki GLUT
- glutInit(&argc, argv);
- // Ustawienie trybu wyswietlania
- glutInitDisplayMode (GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);
- // Ustawienie polozenia dolenego lewego rogu okna
- glutInitWindowPosition(100, 100);
- // Ustawienie rozmiarow okna
- glutInitWindowSize(szerokoscOkna, wysokoscOkna);
- // Utworzenie okna
- glutCreateWindow("Oswietlony stozek");
- // Odblokowanie bufora glebokosci
- glEnable(GL_DEPTH_TEST);
- // Ustawienie funkcji wykonywanej na danych w buforze glebokosci
- glDepthFunc(GL_LEQUAL);
- // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
- glClearDepth(1000.0);
- /*glPushMatrix();
- glTranslatef(-1, -1,-1);
- rysujUklad();
- glPopMatrix();*/
- // Odblokowanie wykonywania operacji na skladowych "alfa"
- glEnable(GL_BLEND);
- // Wybor funkcji mieszajacej kolory
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- // Ustawienie koloru czyszczenia bufora ramki
- glClearColor (0.0, 0.0, 0.0, 1.0);
- // Zarejestrowanie funkcji (callback) wyswietlajacej
- 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);
- // Zarejestrowanie funkcji obslugi klawiszy specjalnych
- glutSpecialFunc(ObslugaKlawiszySpecjalnych);
- // Ustawienie domyslnych wartosci parametrow
- UstawDomyslneWartosciParametrow();
- // 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