Ćwiczenie
1 - Szkielet programu
Stwórz nowy projekt. Zastąp zawartość głównego pliku cpp zawartością
cw1.cpp.
Nie
zapomnij dodać do projektu odpowiednich bibliotek .lib oraz umieścić w
odpowiednich miejscach pliki .h i .dll.
Skompiluj
program.
Na
ekranie powinny pojawić się dwa okna: pierwsze tekstowe, a drugie puste -
jego wnętrze nie będzie odświeżane.
Odszukaj
w dokumentacji opis funkcji użytych w cw1.cpp.Odkomentuj komentarze i
uruchom ponownie program.
Na
ekranie powinien pojawić się sześcian. Przeanalizuj odkomentowane instrukcje.
Ćwiczenie
2 - Stałe proporcje
Uruchom program cw1.cpp i za pomocą myszki zmień rozmiar okna.
Gdy
zmieniają się proporcje okna (początkowo było ono kwadratem),zmieniają
się także proporcje
wyświetlanego sześcianu - wyświetlany sześcian zostaje
zwężony lub rozciągnięty w jednej z osi.
Celem
ćwiczenia 2 jest takie zmodyfikowanie programu cw1.cpp,aby niezależnie od
kształtu okna
proporcja osi x do y pozostała stała tj. wyświetlana bryła
zachowała swoje pierwotne proporcje.
Sześcian
powinien też zmieniać swoją wielkość proporcjonalnie do zmiany rozmiaru
okna.
Proponuje zastosować funkcje:
- void glutReshapeFunc(void (*func)(int width, int height))
- glViewport(int x, int y, int w, int h)
- gluPerspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar)
Porównaj swoje rozwiązanie z moim cw2.cpp
Ćwiczenie
3 - Interakcja z użytkownikiem
Należy dodać obsługę klawiatury tak, aby klawisze a i z obracały sześcian
wokół osi x.
Sugestia:
zadeklaruj zmienną globalną przechowują aktualny kąt obrotu.
Proponuje zastosować funkcje:
- void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y))
- glutPostRedisplay()
- glRotatef(GLfloat kat, GLfloat x, GLfloat y, GLfloat z)
Zaimplementuj także możliwość obrotu figury w pozostałych osiach. Porównaj
swoje rozwiązanie z moim cw3.cpp
Ćwiczenie
4 - Rysowanie
Aby można było odróżnić ściany od siebie, na jednej z nich umieść mały
sześcian odmiennego kolorze.
Proponuje zastosować funkcje:
- glTranslatef(GLfloat x, GLfloat y, GLfloat z)
- glColor3f(GLfloat r, GLfloat g, GLfloat b)
- glutSolidCube(GLfloat size)
Porównaj swoje rozwiązanie z moim cw4.cpp
Ćwiczenie
5 - Operacje na macierzach
Oznakuj wszystkie ściany w podobny sposób jak w ćwiczeniu 4.
Możesz
zastosować tutaj inne bryły niż sześcian.
Użyj funkcje:
- glPushMatrix()
- glPopMatrix()
Porównaj swoje rozwiązanie z moim cw5.cpp
Ćwiczenie
6 - Animacja
Zmodyfikuj tak poprzedni program, aby bryła obracała się samodzielnie wokoło
jednej z osi bez naciskania jakiegokolwiek klawisza.
Zastosuj funkcję:
- void glutIdleFunc(void (*func)(void))
Porównaj swoje rozwiązanie z moim cw6.cpp
Ćwiczenie
7 - Dwa widoki
Za pomocą glViewport(int x, int y, int w, int h) podziel okno na dwie części.
W jednej z nich wyświetlaj
bryły tak samo jak w poprzednim ćwiczeniu, a w
drugiej wyświetlaj te same bryły,
lecz widziane od tyłu - gluLookAt(-5,-5,-5,0,0,0,0,1,0).
Porównaj swoje rozwiązanie z moim cw7.cpp
Ćwiczenie
8 - Display lists
Zoptymalizuj swój program używając:
- GLint glGenLists(GLint)
- glNewList(GLint lista, GLint)
- glEndList()
- glCallList(GLint lista)
Porównaj swoje rozwiązanie z moim cw8.cpp
Ćwiczenie
9 - Drugie źródło światła
Dodaj drugie źródło światła o kolorze innym niż biały.
Zastosuj funkcję:
- glLightfv(...)
- glEnable(GL_LIGHTING)
- glEnable(GL_LIGHT0)
- glEnable(GL_LIGHT1)
Porównaj swoje rozwiązanie z moim cw9.cpp
© 2002-2003 Dobiesław Pałeczka