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
30
CzęśćI.GrafikatrójwymiarowawOpenGL
dodawanajestliterav,np.glVertex3fvoznacza,żeargumentemfunkcjijestwskaźnikdo
float,afunkcjaspodziewasiętablicyztrzemaelementami.
Rozleniwionykonwencjąniebędęwtejksiążcezbytniodbałoużywanieprawidłowychty-
pówstałych.Dlaprzykładuwlistingu1.16wfunkcjiglTranslatefparametramipowinny
byćliczbytypufloat,awięcglTranslatef(0.0f,0.0f,-10.0f);.Biorącjed-
nakpoduwagę,żeprzyrostekfunkcjiczynitypargumentujednoznacznym,użyłemliczbtypu
double,abypokazać,żeniestwarzatoproblemów.Zazwyczajbędęjednakużywałliczbtypu
int,któreskracająkod,tj.glTranslatef(0,0,-10);.
SposóbwywoływaniametodyRysujScenezależyodtego,jakicharaktermanasza
aplikacja.Jeżelizawieraćbędziestatycznyobraz3D,wywołaniametodyograniczać
sięmogądominimum,adokładniejedyniedotychsytuacji,wktórejsystemżąda
odświeżeniaokna,informującotymkomunikatemWM_PAINT(listing1.18).Jeżeli
wokniewidocznajestjakaśanimacjametodawywoływanabędziecyklicznie,co
określonyzgóryczas(zob.rozdział3).Jeżelimamydoczynieniazgrąlubinnym
programemsilniezależnymodinterakcjizużytkownikiem,metodaRysujScene
będziewywoływanapokażdejaktualizacjiscenynastępującejnp.poruchumyszką
lubnaciśnięciuklawisza.
Listing1.18.ScenabezanimacjiodświeżanajesttylkowreakcjinakomunikatWM_PAINT
LRESULTCOknoGL::WndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
longwynik=COkno::WndProc(hWnd,message,wParam,lParam);
switch(message)
{
caseWM_CREATE://Utworzenieokna
//zmiennauchwytOknaniejestjeszczezainicjowana
InitWGL(hWnd);
UstawienieSceny();
break;
caseWM_DESTROY://Zamknięcieokna
UsunWGL();
break;
caseWM_SIZE://Zmianarozmiaruokna
UstawienieSceny();
break;
caseWM_PAINT://Oknowymagaodrysowania
RysujScene();
ValidateRect(hWnd,NULL);
break;
}
returnwynik;
}
Projekt,którywtensposóbpowstał,możesłużyćjakozrębszablonuprojektów
korzystającychzgrafikiOpenGL.Naraziepotrafibowiemtylkowyświetlaćstatyczne