opengl_pierwszy_program.pdf

(149 KB) Pobierz
379992533 UNPDF
JanuszGanczarski
OpenGL
Pierwszyprogram
Spistre±ci
Spistre±ci ..................................... 1
1.Pierwszyprogram .............................. 1
1.1.Rysowaniesceny3D........................... 1
1.1.1.Kolortła............................. 1
1.1.2.Czyszczeniebuforakoloru................... 1
1.1.3.Kolorobiektu.......................... 1
1.1.4.Definiowanieobiektu...................... 2
1.1.5.Wykonaniepolece«OpenGLizamianabuforówkoloru... 2
1.2.Tworzenieoknarenderingu....................... 3
1.3.Obsługamenupodr¦cznego....................... 3
1.4.Plikkwadrat1.cpp............................ 4
Literatura ..................................... 7
379992533.001.png
1.Pierwszyprogram
Pierwszyprogramkorzystaj¡cyzbibliotekiOpenGLjestoczywi±ciebar-
dzoprosty.Wy±wietlimywoknieorozmiarach400 × 400pikselikwadrat
obokachjednostkowych.Programskładasi¦ztrzechzasadniczychelemen-
tów.Pierwszytofunkcjarysuj¡cascen¦3D,drugimjestinicjacjaoknaren-
deringuatrzecimobsługamenupodr¦cznego.
1.1.Rysowaniesceny3D
Rysowanie,czyte»jakprzyj¦łosi¦tonazywa¢,renderowaniesceny3D,
składasi¦zkilkukroków.Zuwaginaprostot¦programuetapywyst¦puj¡ce
wpierwszymprogramienieprzedstawiaj¡kompletnegoschematutworzenia
sceny3D.
1.1.1.Kolortła
Pierwszymetapemtworzeniasceny3D,któryrealizujefunkcja Display ,
jestokre±leniekolorutła,czyliwarto±cijakimizostaniewypełnionybufor
koloru.Realizujetofunkcja:
voidglClearColor(GLclampfred,GLclampfgreen,GLclampfblue,
GLclampfalpha)
którejparametry red , green , blue okre±laj¡warto±ciskładowychkoloru,
aparametr alpha warto±¢składowejkanałualfa(stopie«przezroczysto±ci
piksela).Warto±ciwszystkichparametrówfunkcji glClearColor powinny
zawiera¢si¦wprzedziale[0,1].Parametryprzekraczaj¡cepowy»szyzakres
zostan¡odpowiednioprzyci¦te:mniejszeod0przyjm¡warto±¢0,wi¦kszeod
1warto±¢1.Domy±lnepodczasczyszczeniabuforakoloruu»ywasi¦koloru
(0,0,0,0).
1.1.2.Czyszczeniebuforakoloru
Pookre±leniukolorutłaprzyst¦pujemydowyczyszczeniatła,czyliwy-
pełnieniazawarto±cibuforakoloru.Wykonujetofunkcja:
voidglClear(GLbitfieldmask)
którejnaraziejedynymparametremjeststała GLCOLORBUFFERBIT okre-
±laj¡cajakielementbuforaramkimazosta¢wypełniony.
1.1.3.Kolorobiektu
Kolejnymetapemtworzenianaszejsceny3Djestokre±leniekoloruobiek-
tu.Wykorzystamydotegocelujedn¡zfunkcjizrodzinyglColor:
voidglColor3f(GLfloatred,GLfloatgreen,GLfloatblue)
379992533.002.png
1.Pierwszyprogram 2
którejparametry red , green , blue okre±laj¡warto±ciskładowychkoloru.
Zakrestychwarto±cipowinnyzawiera¢si¦wprzedziale[0,1].Warto±ciznaj-
duj¡cesi¦pozatymprzedziałemzostan¡odpowiednioprzyci¦te.
Uwa»nyCzytelnikzapytazapewnedlaczegodlakoloruobiektunieokre-
±lamywarto±ciskładowejalfa.Jesttooczywi±ciemo»liwe-rodzinafunk-
cji glColor zawieratak»efunkcjeokre±laj¡cekolornapodstawieczterech
składowych.Je»elijednakzdecydujemysi¦naokre±lanietylkoskładowych
RGB,składowaalfaprzyjmujedomy±ln¡warto±¢1,0(całkowitanieprzezro-
czysto±¢).
1.1.4.Definiowanieobiektu
DefiniowanieobiektówwOpenGLrozpoczynawywołaniefunkcji:
voidglBegin(GLenummode)
któraokre±larodzajgenerowanegoprymitywulubprymitywów.Wpierw-
szymprogramietraktujemykwadratjakoszczególnyprzypadekwielok¡ta,
st¡dstała GLPOLYGON .Kolejnewierzchołkikwadratuokre±lamyprzypomo-
cyfunkcji:
voidglVertex3f(GLfloatx,GLfloaty,GLfloatz)
któranale»ydorodzinyobszernejfunkcji glVertex .Je»eliuwa»niepopa-
trzymynawspółrz¦dnewierzchołkówrysowanegokwadratu,tozauwa»ymy,
»ezawierasi¦onwpłaszczy¹nieorównaniuZ=0.Wtakimprzypadku
dodefiniowaniawspółrz¦dnychwierzchołkówobiektówmo»natak»ezasto-
sowa¢funkcj¦ glVertex2 ,którapozwalaokre±li¢dwiepierwszewspółrz¦dne
wierzchołków,trzeciejnadaj¡cwarto±¢0.
Definiowanewspółrz¦dnychwierzchołkówobiektuobowi¡zkowoko«czy
wywołaniefunkcji:
voidglEnd(void)
Specyfikacjabibliotekiniepozwalanauruchamianiewszystkichpolece«
OpenGLpomi¦dzypar¡wywoła«funkcji glBegin i glEnd .Codozasady
mog¡si¦tamznale¹¢poleceniageneruj¡ceobiektysceny.Wywołanienie-
dozwolonejfunkcjipowodujezgłoszeniebł¦du,alenieprzerywadziałania
programu.
1.1.5.Wykonaniepolece«OpenGLizamianabuforówkoloru
Towjakisposóbbibliotekautworzyscen¦3D,powywołaniuwszystkich
funkcjitworz¡cychjejelementy,zale»yoczywi±cieodkonkretnejimplemen-
tacji.Jednakwywołuj¡cfunkcj¦:
voidglFlush(void)
 
1.Pierwszyprogram 3
mo»emywymusi¢wykonaniewszystkichdotychczasowychpolece«.Mato
szczególneznaczenie,gdydanaimplementacjastosujebuforypolece«,aza-
le»ynamnawykonaniucz¦±cizada«.
Ko«cowymelementemtworzeniasceny3Djestzamianabuforówkoloru,
cowprzypadkustosowaniabibliotekiGLUTrealizujefunkcja:
voidglutSwapBuffers(void)
1.2.Tworzenieoknarenderingu
Oknorenderingutworzonejestfunkcji main programu.Inicjalizacj¦bu-
foraramkiwykonujefunkcja:
voidglutInitDisplayMode(unsignedintmode)
Wprzykładowymprogramiewarto±¢parametru mode decyduje,»ebufor
ramkizawieradwabuforykoloru(stała GLUTDOUBLE ),którepracuj¡wtry-
bieRGB(stała GLUTRGB ).
Rozmiaroknarenderingu,wktórymb¦dzierysowanascena3Dokre±la
funkcja:
voidglutInitWindowSize(intwidth,intheight)
którejparametry width i height oznaczaj¡odpowiednioszeroko±¢iwyso-
ko±¢obszarudost¦pnegodorenderingu.Wartozauwa»y¢,»ewielko±¢okna
jakiezostanieutworzonepowywołaniufunkcji:
intglutCreateWindow(char*name)
jestzale»naodsystemuoperacyjnegoijesttakdobraneabyobszardost¦pny
dorenderingumiałwcze±niejokre±lonerozmiary.Wprzykładowymprogra-
mieobszarrenderingujeststały-zmianarozmiaruokna(funkcja Reshape )
niemodyfikujejegorozmiarów.Zmianarozmiaruoknaniepowodujezmiany
wielko±cianiprzemieszczeniarysowanegokwadratu.
Ostatnimetapemtworzeniaoknarenderingujestdoł¡czeniefunkcjige-
neruj¡cejscen¦3D( Display )orazfunkcjiwywoływanejprzyzmianieroz-
miarówokna( Reshape ).Realizuj¡tofunkcje:
voidglutDisplayFunc(void(*func)(void))
voidglutReshapeFunc(void(*func)(intwidth,intheight))
1.3.Obsługamenupodr¦cznego
Menupodr¦cznetworzyfunkcja:
intglutCreateMenu(void(*func)(intvalue))
379992533.003.png
 
Zgłoś jeśli naruszono regulamin