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. }
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