Kurs OpenGL - Dobiesław Pałeczka

Ściągnij kurs (ZIP)


Ć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