Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
32
}
NowoczesnyOpenGL
//Zbuforanaekran
SwapBuffers(uchwytDC);
FunkcjaglClearsłużydoczyszczeniabuforów.Jejargumentwskazuje,żeczy-
ścimydwa:buforramkiibuforgłębokości.Obapowstająpodczasrenderowania.
Zawartośćpierwszegobezpośrednioprzekładasięnaobrazwidzianynaekranie.
Drugiumożliwiadecydowanieokolejnościustawieniaobiektówwzględemka-
meryiwykorzystywanyjestwteściegłębipowodującym,żenaekranieobiekty
bliższeprzesłaniajądalsze.WkontekściefunkcjiglClearwartowspomniećtakże
ofunkcjiglClearColor,któraumożliwiawybórkoloru,jakimzapełnianyjest
buforramkiwtrakciejegoczyszczenia.Kolortenbędziekoloremtłanaszejsceny,
gdybyśmyzatemużyliinstrukcjiglClearColor(1i0f,1i0f,1i0f,1i0f);,
aktorzypojawilibysięnabiałymtle,anienadomyślnymczarnym.
Zgodniezzapowiedziąwyświetlamynascenietrójkąt.Odpowiadazatogru-
painstrukcjirozpoczynającasięodglBegin,akończącanaglEnd.Parametrem
pierwszejznichjeststałaidentyfikującaprymityw,czylirodzajrysowanejfigury
–wnaszymprzypadkuGL_TRIANGLES(pol.trójkąty).Międzynimiznajdujesię
natomiastseriatrzechwywołańfunkcjiglVertex,któraustalapozycjętrzech
werteksów–wierzchołkówtrójkąta.Wszystkietefunkcje,podobniejakfunkcje
związanezmacierzamiOpenGL,znikłyzprofilurdzennego.Wprofilurdzennym
trzebabędziekorzystaćzeznaczniewydajniejszychbuforówwerteksów.
WielefunkcjiOpenGL,zarównousuniętychzprofilurdzennego,jakipozo-
stawionych,możewystępowaćwkilkuwersjach.NaprzykładfunkcjaglVertex
możeprzyjmowaćdwa,trzylubczteryparametry,wzależnościodtego,ilenie-
zerowychwspółrzędnychchcemyustawić.Argumentymogąbyćteżprzekazane
wjednowymiarowejtablicy.Cowięcej,argumentymogąbyćróżnegotypu.Za-
zwyczajwgraficestosujesięliczbyrzeczywistepojedynczejprecyzjifloat,ale
możliwejestrównieżużyciedouble,anawetint.Chcącuniknąćpomyłkiinie-
jawnychrzutowańobecnychwCiC++,twórcybibliotekiOpenGLzignorowali
możliwośćprzeciążaniafunkcji(zresztąniewszystkiejęzykiprogramowaniają
oferują)iprzygotowalipokilkawersjiniemalkażdejfunkcji.Ichnazwyróżnią
sięprzyrostkami.Cyfrawprzyrostkuoznaczaliczbęparametrów,alitera–ich
typ.glVertex2doznaczazatemwersję,którapobieratylkowspółrzędnexiy
typudouble,natomiaststosowanaprzeznaswersjaglVertex3fprzyjmujejako
argumentytrzywspółrzędne:x,yorazztypufloat.Jakwspomniałem,argumenty
mogąbyćprzekazanewtablicy.Wówczasdoprefiksudodawanajestliterav,np.
glVertex3fvoznacza,żeargumentemfunkcjijestwskaźnikdofloat,afunkcja
spodziewasiętablicyztrzemaelementami.
SposóbwywoływaniametodyRysujScenęzależyodtego,jakicharakterma
aplikacja.Jeżelibędziezawieraćstatycznyobraz3D,liczbęwywołańtejmeto-
dywtrakciedziałaniaaplikacjimożnaograniczyćdominimum,adokładniedo