mobilná komunikácia - Vitajte na stránkach www.einsty.hostujem.sk
mobilná komunikácia - Vitajte na stránkach www.einsty.hostujem.sk
mobilná komunikácia - Vitajte na stránkach www.einsty.hostujem.sk
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
P R O G R A M U J E M ECONST RECT *prcScroll: Ukazovate¾ <strong>na</strong> štruktúru RECT,ktorá špecifikuje èas klient<strong>sk</strong>ej oblasti, ktorá sa budepresúva. Ak je tento parameter NULL, potom je posunu−tá celá klient<strong>sk</strong>a oblas.CONST RECT *prcClip: Ukazovate¾ <strong>na</strong> štruktúru RECT,ktorá obsahuje súradnice vystrihnutého pravouholníka.Iba oblas v takto vybranom pravouholníku je potomposunutá.HRGN hrgnUpdate: Oblas, ktorá nie je zahrnutá doprocesu posuvu. Nemusí to by iba pravouholník. Tentoparameter môe by NULL.LPRECT prcUpdate: Ukazovate¾ <strong>na</strong> štruktúru RECT, ktorádostane súradnice pravouholníka, ktorý ohranièuje posu−nutím zasiahnutú oblas. Táto oblas je <strong>na</strong>jväèší pravo−uholník v klient<strong>sk</strong>ych súradniciach, ktorý musí by pre−kreslený. Tento parameter môe by NULL.UINT flags: Príz<strong>na</strong>k, ktorý riadi posuv. Tento parametermôe by jed<strong>na</strong> alebo viacej <strong>na</strong>sledujúcich hodnôt, kom−binovaných pomocou operátora OR.SW_ERASE – pokia¾ tento príz<strong>na</strong>k <strong>sk</strong>ombinujeme s prí−z<strong>na</strong>kom SW_INVADATE, potom vymae oblas novooz<strong>na</strong>èenú za neplatnú.Obr. 3Príklad ScrollbarSW_INVALIDATE – oz<strong>na</strong>èí za neplatnú oblas, ktorá saodhalí po presune.SW_SCROLLCHILDREN – posúva všetky dcér<strong>sk</strong>e okná,ktoré zasahujú do obdånika špecifikovaného paramet−rom prcScroll. Dcér<strong>sk</strong>e okná sú posunuté o poèet bodovurèených parametrami dx a dy. Windows posiela správuWM_MOVE všetkým dcér<strong>sk</strong>ym oknám, ktoré zasahujú dooblasti špecifikovanej parametrom prcScroll, a to ajvtedy, keï sa neposúvajú.Výsledok funkcie: int: Vráti SIMPLEREGION (pravouhol−níková neplatná oblas), COMPLEXREGION (neplatnáoblas iného ne pravouhlého tvaru; prekrývajúce sa pra−vouholníky), alebo NULLREGION (iad<strong>na</strong> oblas nie jeneplatná). V ostatných prípadoch je návratová hodnotaERROR.Prvú èas o scrollbaroch zakonèíme jednoduchým prí−kladom (pozri obrázok 3). Samozrejme, zdrojový kód náj−dete <strong>na</strong> stránke <strong>www</strong>.pcrevue.<strong>sk</strong> v sekcii Programujeme –Assembler pod Windows.Literatúra[1] Simon, R. J. – Gouker, M. – Barnes, B. C.: Win32API. Zväzok 1, 2, 3. UNIS Publishing, Brno 1997.[2] Richter, J.: Windows pro pokroèilé a experty.Computer Press, Praha 1997.[3] Petzold, Ch.: Programování ve Windows – Win32API. Computer Press, Praha 1999.Peter GašparovièN O V Ý S E R I Á Lif (height==0) height=1;Grafika cez OpenGL / 1. èas: Inicializácia I.Ïalej <strong>na</strong>stavíme viewport (poh¾ad), projekciu, urobímereset a <strong>na</strong>èítame jednotkovú maticu.glViewport(0,0,width,height);glMatrixMode(GL_PROJECTION); //projekciaglLoadIdentity(); //reset poh¾adu<strong>Vitajte</strong> všetci priaznivci poèítaèovej grafiky pri novom prog−ramátor<strong>sk</strong>om seriáli. V <strong>na</strong>sledujúcich èastiach sa v òombudeme zaobera programovaním grafiky cez rozhranieOpenGL. Pýtate sa, èo je OpenGL? Ak ste toto zázraèné slo−víèko v ivote nepoèuli, <strong>na</strong>sledujúce riadky sú urèené vám.OpenGL je grafický subsystém <strong>na</strong> programovanie gra−fiky bez rozdielu okenného systému. To z<strong>na</strong>mená, eOpenGL funguje aj pod Linuxom, OS/2, MacOS atï. Polo−patisticky povedané, je to DirectX, ktorý funguje všade.V niektorých smeroch je ešte jednoduchší, no výkonnejší(keï som toti zaèal èíta jeden tutoriál DirectX, <strong>sk</strong>onèilsom po pár riadkoch pre zloitos).Naším prvým cie¾om bude „<strong>na</strong>kopnú“ OpenGL pod OSWindows 9x. Vývojovým jazykom bude C++, konkrétne sabudeme dra vývojového prostredia Microsoft Visual C++(<strong>na</strong> mojom 5.0 Learning Edition všetko funguje, take staèíaj táto verzia). Pri programovaní budeme vyuíva funkcieWin32API, ktoré nebudem vysvet¾ova, pretoe náš seriál je oOpenGL, a nie o Win32API. Preto ak nieèomu nerozumiete,<strong>na</strong>študujte si to <strong>na</strong> internete, kde je príruèiek <strong>na</strong> programo−vanie vo Win32API neúrekom. Po <strong>sk</strong>onèení tohto celého tuto−riálu by ste mali vedie <strong>na</strong>programova jednoduché animácie,demá, mono aj hry. Ale u sa tu nezdrujme teóriou a poï−me <strong>na</strong> prax.Po tom, èo si vytvoríme aplikáciu Win32, musíme neja−ko poveda linkeru, e pouívame externé kninice. Tourobíme v menu Project/Settings <strong>na</strong> karte Link v editaè−nom poli Object/Library Modules, kde <strong>na</strong> úplný zaèiatokpridáme OpenGL32.lib, GLu32.lib a GLaux.lib. Potvrdímestlaèením OK. Ostáva nám len <strong>na</strong>písa zdrojový kód.Vytvoríme si C++ súbory s názvami init.cpp a kapito−la1.cpp. Takéto delenie nám pomôe ne<strong>sk</strong>ôr pri vytváranízloitejších programov, keï nebudeme musie písa inicia−lizaèný kód odznova. V súbore init.cpp bude, samozrejme,inicializácia OpenGL a v súbore kapitola1.cpp bude samot−ná kresliaca funkcia, ktorá má <strong>na</strong> svedomí vykreslenie útva−rov. Teraz budeme písa kód init.cpp.Kninice pripojené k projektu sú nám <strong>na</strong>niè, pretoenemáme pripojené hlavièkové súbory. Teraz je ten správ−ny èas <strong>na</strong> ich pripojenie.#include #include #include #include Naj<strong>sk</strong>ôr si musíme <strong>na</strong>definova premenné, ktoré sú ne−vyhnutné <strong>na</strong> beh programu. Sú to Device Context (DC), Ren−dering Context (RC), handle nášho ok<strong>na</strong> a instance apli−kácie. Tieto premenné nebudem vysvet¾ova podrobne, jed−noducho si treba zapamäta, e OpenGL je závislý od RC,ktorý spája OpenGL s DC. Ak je to trochu èudné, nebojte sa,niekedy budeme týmto premenným venova jednu èas.HGLRC hRC=NULL;HDC hDC=NULL;HWND hWnd=NULL;HINSTANCE hInstance;V ïalších riadkoch zdrojového kódu si <strong>na</strong>definujemepole pre obsluhu klávesnice, premennú <strong>na</strong> zistenie aktív−nosti ok<strong>na</strong> (èi má focus) a takisto premennú, ktorá urèuje,èi sme v celoobrazovkovom reime.bool keys[256]; //klávesnicabool active=TRUE;bool fullscreen=TRUE;Tu si musíme preddefinova funkciu WndProc, ktorá spra−cúva správy od Windows. Robíme to preto, lebo z funkcieCreateGLWindow() odkazujeme <strong>na</strong> WndProc a <strong>na</strong>opak.LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);Bolo by dobré u prejs aj <strong>na</strong> funkcie. Tu teda mámeprvú. Volá sa ReSizeGLScene a poslúi nám hlavne pri zme−ne ve¾kosti ok<strong>na</strong>. Takisto sa pouije pri spustení a iniciali−zovaní programu <strong>na</strong> <strong>na</strong>stavenie poh¾adu.GLvoid ReSizeGLScene(GLsizei width, GLsizei height);{Našou prvou úlohou v tejto funkcii je postara sa o ve¾−kos ok<strong>na</strong>.Teraz príde tá <strong>na</strong>jhlavnejšia èas funkcie, ktorou je <strong>na</strong>−stavenie perspektívy kamery. O to sa postará funkcia glu−Perspective. Jej prvý parameter udáva zorný uhol kamery(v <strong>na</strong>šom prípade je 45 stupòov – <strong>sk</strong>úste s týmto èíslomexperimentova, uvidíte, èo sa stane, alebo neuvidíte vô−bec niè ☺). Druhý parameter urèuje pomer výšky a šírkyzobrazovanej plochy, oz<strong>na</strong>èovanej aj ako aspekt ratio.Tretí, predposledný parameter udáva vzdialenos, odkia¾budú vykreslené predmety vidite¾né, a posledný parame−ter udáva vzdialenos, dokia¾ sú predmety vidite¾né.gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);U iba ostáva <strong>na</strong>stavi modelview maticu, urobi jej re−set a túto funkciu máme z krku.glMatrixMode(GL_MODELVIEW);glLoadIdentity();}Ïalšou funkciou bude InitGL, v ktorej budeme robi všet−ky <strong>na</strong>stavenia.int InitGL(void){A teraz prejdime k jednotlivým <strong>na</strong>staveniam OpenGL.Najprv zapneme smooth shading. Aha, vy asi neviete, èoto je. Smooth shading je spôsob vyplòovania. Ak teda akoparameter v príkaze glShademodel uvedieme GL_SMOOTH,<strong>na</strong>še polygóny budú vyplòované farebným prechodom.Ak však ako parameter uvedieme GL_FLAT, objekty nebu−dú vyplòované farebným prechodom.glShadeModel(GL_SMOOTH); //smooth shadingPrišiel èas <strong>na</strong> <strong>na</strong>definovanie si farby, ktorou vyfarbímepozadie. OpenGL pouíva miešanie farieb <strong>na</strong> spôsob RGBA.U ste o tomto spôsobe poèuli. Pouívajú ho aj monitory,grafické karty atï. Celá farebná škála je pri tomto spôso−be miešania farieb zloená z jednotlivých „prímesí“ èerve−nej (Red), zelenej (Green), modrej (Blue) a jasu (Alpha),odtia¾ je názov RGBA.130 PC REVUE 7/2002