12.07.2015 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!