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
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)
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))
Plik z chomika:
pawulon92
Inne pliki z tego folderu:
opengl_pierwszy_program.pdf
(149 KB)
Inne foldery tego chomika:
Zgłoś jeśli
naruszono regulamin