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
28
CzęśćI.GrafikatrójwymiarowawOpenGL
zinicjacjąokna,aleomówięjewramachczęścipoświęconejprzygotowaniom,bo
podobniejakkodomówionywyżej,zazwyczajprzygotowujesięjetylkorazwżyciu
ikorzystapotemzgotowegoszablonu.
MusimyzacząćodimportunagłówkabibliotekiOpenGLgl.h.Proponujęodpo-
wiedniądyrektywęumieścićwplikuOknoGL.h:
#include<gl\gl.h>
Następniezajmijmysięmetodą,którauruchamianatużpoInitWGLbędzieprzy-
gotowywałascenę3D:
Listing1.16.Pierwszametoda,wktórejpojawiająsięfunkcjeOpenGL
voidCOknoGL::UstawienieSceny(boolrzutowanieIzometryczne)//wartośćdomyślna=false
{
//oknoOpenGL=wnętrzeformy(domyślnie)
glViewport(0,0,szerokoscObszaruUzytkownika,wysokoscObszaruUzytkownika);
//ustawieniepunktuprojekcji
glMatrixMode(GL_PROJECTION);//przełączenienamacierzprojekcji
glLoadIdentity();
//left,right,bottom,top,znear,zfar(clipping)
floatwsp=wysokoscObszaruUzytkownika/(float)szerokoscObszaruUzytkownika;
if(!rzutowanieIzometryczne)
//left,right,bottom,top,znear,zfar(clipping)
//mnożeniemacierzyrzutowaniaprzezmacierzperspektywy–ustalaniefrustum
glFrustum(-0.1,0.1,wsp*-0.1,wsp*0.1,0.3,100.0);
else
glOrtho(-3,3,wsp*-3,wsp*3,0.3,100.0);
glMatrixMode(GL_MODELVIEW);//powrótdomacierzywidokumodelu
glEnable(GL_DEPTH_TEST);//z-bufferaktywny=ukrywanieniewidocznychpowierzchni
}
ZrozumienietejmetodywymagaznajomościpodstawOpenGL,awszczególności
pojęćmacierzyprojekcjiimacierzymodel-widok.Abyniezwalniaćtempaizaspo-
koićciekawośćCzytelnikapragnącegoszybkozobaczyćefektswoichdziałań,posta-
nowiłemodłożyćwyjaśnienietychterminówdodrugiegorozdziału.
Nowametodapowinnabyćoczywiścieuruchomionatużpozainicjowaniuokna.
Alenietylko.Zauważmy,żejejdziałaniezależyodwielkościobszaruroboczego
okna,awszczególnościodjegoproporcji.Powinnabyćzatemwyświetlanatakże
wtedy,gdyrozmiaroknaulegazmianie,awięcpoodebraniukomunikatuWM_SIzE.
DlategowmetodzieCOknoGL::WndProcwystąpidwukrotnie:razwczęścizwiązanej
zkomunikatemWM_CREATEtużpowywołaniumetodyInitWGL,drugirazwczęści
związanejzkomunikatemWM_SIzE(listing1.18poniżej).
MetodaUstawienieScenyskupiasięnaustawieniumacierzyprojekcji.Wmeto-
dzieRysujSceneumieścimynatomiastteczynnościzwiązanezprzygotowaniem
sceny,którewykonywanesąprzyrysowaniukażdejklatki,awięcczyszczeniebuforów,