WOJSKOWA AKADEMIA TECHNICZNA

LABORATORIUM GRAFIKA KOMPUTEROWA

SPRAWOZDANIE:

Laboratorium 2 – modelowanie obiektów za pomocą trybu GL_QUAD_STRIP

PROWADZADZĄCY:

dr inż. Marek Salamon

WYKONAŁ:

Mateusz Faustman I7X1N1

DATA:

06.02.2009

1. Cel ćwiczenia – Celem ćwiczenia było zapoznanie się z tworzeniem obiektów przy użyciu trybu GL_QUAD_STRIP;

2. Zadanie:

Narysować połowę walca w trybie GL_QUAD_STRIP;

a) Zmiana kąta patrzenia obserwatora

b) Zmiana wielkości walca

c) Zmiana ilości podziałów walca

3. Implementacja:

1. void RysujSzescian(int h, int r, int nv, int nh) 2. {

3. int i; int j;

4. double dH = h/(double)lPoziomych;

5. double dAlfa = 180.0L/(double)lPionowych;

6. glBegin(GL_TRIANGLE_FAN);

7. glNormal3f(0.0, 0.0, 0.0);

8. glVertex3f(0.0, 0.0, 0.0);

9. for (i = 0; i * dAlfa <= 180.0L; i++)

10. glVertex3f(r*sin(DEG2RAD(i*dAlfa)), 0.0, r*cos(DEG2RAD(i*dAlfa))); 11. glEnd();

12. glBegin(GL_QUAD_STRIP);

13. for (i = 0; i * dAlfa <= 180.0L/* + dAlfa*/; i++) 14. {

15. glVertex3f(r*sin(DEG2RAD(i*dAlfa)),0,r*cos(DEG2RAD(i*dAlfa))); 16. glVertex3f(r*sin(DEG2RAD(i*dAlfa)),wysokosc,r*cos(DEG2RAD(i*dAlfa))); 17. }

18. glBegin(GL_TRIANGLE_FAN);

19. glNormal3f(0.0, 0.0, 0.0);

20. glVertex3f(0.0, wysokosc, 0.0);

21. for (i = 0; i * dAlfa <= 180.0L; i++)

22. glVertex3f(r*sin(DEG2RAD(i*dAlfa)), wysokosc, r*cos(DEG2RAD(i*dAlfa))); 23. glEnd();

24. glBegin(GL_LINES);

25. for ( k=0;k<10;k++)

26. {

27. glVertex3f(r*sin(DEG2RAD(180)),k,r*cos(DEG2RAD(180))); 28. glVertex3f(r*sin(DEG2RAD(180)),k,r*cos(DEG2RAD(0))); 29. }

30. glEnd();

31. }

4. Opis kodu

3-5 Deklaracja zmiennych

6-11 rysowanie dolnej podstawy, parametrem głównym jest liczba podziałów 12-18 Rysowanie pionowych linii

19-23 Rysowanie górnej podstawy

24-29 Rysowanie tyłu figury

5. Wnioski

Rysowanie w trybie GL_QUAD_STRIP jest dość wygodne do rysowania figur prostych.

Podczas rysowania popełniłem błąd rysując tylną ścianę jako bardzo dużą ilość prostych leżących blisko siebie co dało efekt wypełnienia ale ma zasadniczą wadę – nie odbija światła. W powyższym kodzie błąd ten został rozwiązany poprzez dorysowanie ściany jako kilka prostych