Laboratorium grafiki komputerowej i animacji Ćwicenie III - Biblioteka OpenGL - wprowadenie, obiekty trójwymiarowe: punkty, linie, wielokąty Prygotowanie do ćwicenia: 1. Zaponać się ogólną charakterystyką biblioteki OpenGL. 2. Zaponać się e sposobem konstruowania prymitywów graficnych OpenGL. 3. Zaponać się asadami tworenia aplikacji OpenGL na platformie Windows - estaw funkcji "wgl", biblioteka GLAUX. 4. Zaponać się prykładowymi programami dostarconymi wprowadeniem do ćwicenia. Prebieg ćwicenia: 1. Założenia: a. Celem prac na kilku następnych ajęciach jest skonstruowanie modelu graficnego manipulatora Puma (Siatka całego manipulatora pokaan jest na rysunku 1.1.). b. Predmiotem obecnych ajęć jest prygotowanie siatek elementów składowych manipulatora: walca i dwu ramion. c. Wynikiem prac na disiejsych ajęciach ma być program bliżony w diałaniu do programu puma_elementy.ee dostarconego do materiałów laboratoryjnych. d. Realiacja ćwicenia polega na modyfikacji kodu programu gl_template dołąconego do materiałów laboratoryjnych. e. W realiacji prac worować się należy na rowiąaniach pryjętych w programie triangle również dołąconym do materiałów laboratoryjnych. Rysunek 1.1 Graficny model manipulatora Puma (siatka) 2. Uwagi do sposobu realiacji celu ajęć laboratoryjnych: a. W programie gl_template wbudowano możliwość obracania tworonych modeli pry pomocy klawisy strałek.
b. Obiekty graficne należy tworyć w funkcji RenderScene() programu gl_template. c. Pry tworeniu amkniętych brył klucową rolę odgrywa takie aprojektowanie wielokątów, aby były wrócone na ewnątr ewnętrnymi powierchniami. Umożliwia to później pryspiesenie obliceń sceny pre odrucenie wewnętrnych powierchni w obliceniach. Uprasca się wówcas również procedura oświetlania obiektów. W wiąku tym podcas realiacji ćwicenia należy wrócić scególną uwagę na odpowiednie dobieranie kolejności podawania wierchołków wielokątów. Pomocne okaać się może wywołanie funkcji: glpolygonmode(gl_back,gl_line); umiescone w funkcji RenderScene(). Wewnętrne ściany wielokątów będą wtedy rysowane w postaci siatki, natomiast ewnętrne ostaną w całości amalowane. Wywołanie funkcji glpolygonmode(gl_front_and_back,gl_line) umożliwi postreganie aprojektowanej bryły w postaci siatki. d. Każdy tworonych na scenie obiektów ma powiąany e sobą układ współrędnych. Modele brył tworyć należy w taki sposób, aby dawać sobie sprawę, gdie najduje się układ współrędnych powiąany bryłą (Pocątkowy baowy układ współrędnych sceny najduje się na środku okna i tym układem współrędnych należy wiąać kolejno projektowane siatki brył). e. Brył amkniętych nie należy tworyć prymitywów do odworowywania linii. f. Wsystkie tworone w ramach ćwiceń modele stanowić mają bryły amknięte, w wiąku tym należy precyyjnie uwględnić każdą e ścian bryły (walec powinien awierać obie podstawy, wielościany powinny posiadać definiowane wsystkie ściany najlepiej w postaci osobnych wielokątów GL_QUADS, GL_TRANGLES, GL_POLYGON). g. Każdy elementów manipulatora najwygodniej amknąć w jednej funkcji. W parametrach wywołania funkcji nie należy uwględniać położenia elementu na scenie (Sposób romiescania elementów na scenie określony ostanie na kolejnych ajęciach). h. Sposób uupełnienia menu na potreby programu można worować na programie triangle. i. Model walca na potreby programu najwygodniej definiować w taki sposób, aby można było adawać jego promień i wysokość, np.: void walec(double h, double r). j. Fragment programu awierający definicję cęści walca może mieć następującą postać: void walec(double h, double r) double angle,,y; glbegin(gl_triangle_fan); glverte3d(0.0f, 0.0f, 0.0f); for(angle = 0.0f; angle <= (2.0f*GL_PI); angle += (GL_PI/8.0f)) = r*sin(angle); y = r*cos(angle); glverte3d(, y, 0.0);
glbegin(gl_quad_strip); for(angle = 0.0f; angle >= -(2.0f*GL_PI); angle -= (GL_PI/8.0f)) = r*sin(angle); y = r*cos(angle); glverte3d(, y, h); glverte3d(, y, 0); 3. Prebieg ćwicenia: a. Załadować do VS projekt GL_Template (Jest to kompletny projekt wiążący interfejs Windows interfejsem OpenGL. Jego struktura jest taka, jak omówiona we wprowadeniu do ćwicenia. Podstawowa funkcja do pisania kodu w OpenGL to RenderScene.). b. Dokońcyć realiację seścianu astosowaniem skryptu OpenGL. Współrędne wierchołków seścianu pokaano na rysunku 3.1. Funkcja seścian powinna być wywołana w funkcji RenderScene. (-20,20,-20) y (-20,20,20) (-20,-20,-20) (-20,-20,20) (20,20,-20) (20,20,20) (20,-20,-20) (20,-20,20) Rys. 3.1 Współrędne wierchołków seścianu Fragment kodu funkcji seścian amiescono poniżej: void sescian(void) glbegin(gl_quads); glcolor3d(1,0.5,0); glverte3d( 20, 20, 20); glverte3d(-20, 20, 20); glverte3d(-20,-20, 20); glverte3d( 20,-20, 20); glcolor3d(0,0.5,1); glverte3d( 20, 20, 20); glverte3d( 20,-20, 20);
glverte3d( 20,-20,-20); glverte3d( 20, 20,-20); Uwagi: W rysowaniu seścianu astosowano pojedynce cworokąty. Można pryjąć asadę, że, jeśli amieramy tworyć siatkę ostrymi krawędiami, to stosujemy do jej tworenia pojedynce wielokąty. Należy pamiętać, aby wsystkie ściany seścianu były wrócone prawą stroną na ewnątr. c. Opracować funkcję rysującą walec godnie aleceniami i i j. W realiacji funkcji rysującej walec astosować wachlar trójkątów (GL_TRIANGLE_FAN) do wyrysowania podstawy ora łańcuch cworokątów (GL_QUAD_STRIP) do wyrysowania tworącej walca. Uwagi: W rysowaniu walca astosowano parametrycne równanie okręgu do wynacenia wierchołków trójkątów tworących prybliżenie koła: [ ] Należy samodielnie rowiąać problem wyrysowania drugiej podstawy skierowanej prawą stroną na ewnątr walca. Orientację walca i parametry go opisujące w lokalnym układie współrędnych opisuje rysunek 3.2 y r h Rys. 3.2 Orientacja modelu walca i interpretacja jego parametrów. d. Opracować funkcję rysującą ramię robota. Ramię robota, pokaane na rysunku 3.3, można skonstruować dwu połówek walca i 4 cworokątów. Funkcja ramie może mieć prototyp: void ramie(double r1, double r2, double h, double d);
y h r1 d r2 Rys. 3.3 Orientacja modelu ramienia i jego parametry.