Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
J.Matulewski,T.Dziubak,M.Sylwestrzak,R.Płoszajczak,Grafika.Fizyka.Metodynumeryczne.
Symulacjefizycznezwizualizacj
ą
3D,Warszawa2010
ISBN978-83-01-16178-1,©byWNPWN2010
66
CzęśćI.GrafikatrójwymiarowawOpenGL
mocąmyszki.Wtensposóbpowstanieszablonprojektu,któregobędziemyużywać
wkolejnychczęściachksiążki.
Kolor
FunkcjaglColor
Kolejnąrzeczą,októrejchciałbymrzecsłowo,zanimzaczniemybudowaćbar-
dziejzłożonefigury,jestmożliwośćkolorowaniafigur.Niebędziemynaraziewłą-
czaćcałegosystemuoświetlenia,któryobliczakolorpikselanapodstawiewspółczyn-
nikówodbiciadlaposzczególnychskładowychświatłaRGBikolorupadających
promieni.Naraziebędzietozwykłe„malowaniefarbkami”przyzałożeniu,żescena
oświetlonajestjasnymrównomiernymświatłemrozproszonym.
Pozmianachzpoprzedniegopodrozdziałuzarysowanienaszegotrójkątaodpo-
wiedzialnajestmetodaRysujTrojkatzklasyCMojeOknoGL.Najejpoczątkuwstaw-
myinstrukcję,któranadatrójkątowiniezwykleromantycznyodcieńróżu.:
glColor4f(1.0,0.0,0.5,1.0);
Trzypierwszeparametrypowyższejfunkcjiodpowiedzialnesązawartościskła-
dowychRGBkoloru,czwartazaskładowąalpha,czylinieprzezroczystość.Składowa
alphamożebyćnaraziedowolna–systemmieszaniakolorówniejestjeszczewłą-
czony.Możnawobectegowogólepominąćtęskładową,korzystającztrójargumen-
towejwersjifunkcjiglColor3f.FunkcjaglColormazarównowersję,wktórejargu-
mentypowinnybyćliczbamirzeczywistymiwzakresieod0do1(przyrostekf),jak
iwersję,wktórejwartościokreślanesąliczbaminaturalnymi,adokładniejbajtami
bezznaku,ozakresieod0do255(przyrostekub).
Cieniowanie
ZaskakującedlaCzytelnikamożebyć,żekolorniejestwłaściwościąfigury(pry-
mitywu),awerteksu.Wkonsekwencjikażdywierzchołektrójkątamożemiećprzypi-
sanyinnykolor(listing3.6).WówczasOpenGLpodczasrenderowaniafiguryzadba
ostopniowecieniowanie(rysunek3.1).Możetobyćwykorzystaneprzyoświetleniu–
jasnośćikolorobliczanesąwówczastylkodlawierzchołków,acieniowaniekolorów,
którejestbardzowydajne,zadbaoresztę.Tatechnikanazywasięcieniowaniem
Gourauda.
Listing3.6.Wprzypadkuciągówtrójkątówlubczworokątówcałafiguratraktowanajestjako
jednaicieniowanieprzebiegaprzezcałyciąg
voidCMojeOknoGL::RysujTrojkat(floatx0,floaty0,floatz0)const
{