Pobierz - kisiala.pl

Transkrypt

Pobierz - kisiala.pl
Politechnika Częstochowska
Wydział Inżynierii Mechanicznej i Informatyki
Oprogramowanie i wykorzystanie stacji roboczych
Gra : The Sea
Tomasz Jewiarz
Diana Kisiała
Semestr 7
Gr. 1
2005 / 2006
Cel:
Celem projektu było napisanie gry The Sea z wykorzystaniem biblioteki QT oraz
OpenGL.
Gracz ma za zadnie znaleźć jak najwięcej statków rozrzuconych po całym morzu i
zniszczenie ich. Na wykonanie tego zadania gracz ma określony czas i ograniczoną
ilość amunicji.
Menu :
F1 – Rozpoczęcie nowej gry
ESC – Zakończenie gry
Pause – zatrzymanie gry
Strzałki na klawiaturze – sterowanie graczem
Spacja - strzał
Do wyboru mamy 3 tryby gry:
1- Łatwy,
2- Średni
3-Trudny.
Dodatkowo możemy wybrać jeden z dwóch rozmiarów ekranu:
F10 -Okno
F9 – Fullscreen
Gra:
Podczas gry w lewym górnym rogu wyświetlają nam się następujące opcje :
Czas jaki nam został na wykonanie misji.
Ilość zdobytych punktów,
Ilość broni do wystrzelenia,
Prędkość z jaką się porusza gracz po planszy
Kąt - > położenie na planszy
Poziomy trudności :
Poziomy trudności różnią się :
Stopniem zamglenia powietrza
Czasem na wykonanie zadania – 180, 360, 540
Wybrane funkcje OpenGL zastosowane w projekcie :
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) - czyści bufor
koloru
glClearColor(0.0f, 0.0f, 0.0f, 0.0f) - czyści tło do czerni
glFlush() - służy do wypróżniania komend graficznych, składowanych w buforze i
uwidocznienia zmian na ekranie
glPushMatrix(); - zapamiętanie wyglądu sceny
glPopMatrix(); - odtworzenie pierwotnego wyglądu sceny
glTranslatef(xtrans, ytrans-0.0 , ztrans); - odsunięcie obiektu
Opis obiektu :
glBegin(GL_QUADS);
glColor3f(0.6f,0.1f,0.1f);
// kolor
glVertex3f( 0.1f+x, 0.35f+y, 0.4f+z);
glVertex3f( 0.1f+x, 0.35f+y, 0.9f+z);
glVertex3f( 0.5f+x, 0.35f+y, 0.9f+z);
glVertex3f( 0.5f+x, 0.35f+y, 0.4f+z);
// wierchołki czworokąta
glEnd();
Obrócenie obiektu wokół osi OY o kąt alfa :
glTranslatef( 0.0, 0.0, -200.0);
glRotatef( alfa, 0.0, 1.0, 0.0);
Operacje na macierzach:
glMatrixMode(GL_PROJECTION); - wybiera macierz, na której będziemy
operować. GL_PROJECTION - to macierz rzutowania, odwzorowująca świat
3D na płaski ekran komputera.
glLoadIdentity() – ładuje macierz jednostkową (Mając macierz przekształcenia,
matematycznie należy ją pomnożyć przez macierz wyjściową co daje nam
macierz jednostkowa. )
Lista wyświetlania – pozwalają na zapamiętywanie w pamięci ciągu instrukcji
OpenGL, a następnie szybkie ich odtworzenie.
glNewList(dlSky, GL_COMPILE);
...
// Instrukcje
...
glEndList();
glCallList(dlSky); - wywołanie wykonania listy
Teksturowanie:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL) –
ustala sposób określania koloru tekstur na scenie. GL_DECAL - kolor pikseli
tekstury pokrywa w całości teksturowany obiekt i nie jest możliwe uzyskanie
efektów związanych z oświetleniem
glEnable(GL_TEXTURE_2D) - uaktywnia obliczanie tekstur w systemie
glDisable(GL_TEXTURE_2D) – wyłancza obliczanie tekstur w systemie
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_LINEAR_MIPMAP_LINEAR); - służy do określania właściwości tekstur.
GL_LINEAR, to przed wyrysowaniem tekstury jest ona liniowo interpolowana
glTexCoord2f(-planWsp, -planWsp)– służy do umiejscowienia tekstury na
poszczególnych wielokątach
Mgła:
glEnable(GL_FOG); - włączenie obsługę mgły
glFogi(GL_FOG_MODE, GL_LINEAR); - rodzaj mgły
glFogf(GL_FOG_DENSITY, 0.35f); - gęstość mgły
glFogfv(GL_FOG_COLOR, fogColor); - kolor mgły
glFogf(GL_FOG_START, 1); - zakres mgły – początek
glFogf(GL_FOG_END,
40); - zakres mgły - koniec