1
|
V tomto okamihu nastáva moja éra OpenGL. Bolo to tuším leto pred výškou a ja som našiel na internete NEHE tutoriály (česky). 3D grafika ma ako bývalého hráča fascinovala a predstava, že by som aj ja bol schopný vyvinúť nejakú hru, ktorá by sa aspoň náznakom ponášala na komerčné hry ma hnala dopredu. Prechádzal som jeden tutoriál za druhým a OpenGL ma začalo stále viac a viac pohlcovať, až som sa napokon rozhodol, že sa teda pokúsim niečo vytvoriť.
Cez školský rok som programoval generátor bludiska, bolo to pre Korešpondenčný seminár z programovania. Môj generátor nebol nič moc, ale keď som si prečítal nimi ponúkané riešenie problému, tak ma to dostalo, bolo to perfektné a dokázalo to generovať fakt krásne bludiská. Naprogramoval som si teda tento generátor a keďže som sa práve zaoberal OpenGL napadlo ma, spojiť tieto dve veci a napísať si hru v ktorej sa budem prechádzať bludiskom.
Generovanie bludiska bolo relatívne rýchlo, relatívne skoro bola napísaná aj vizualizácia tohoto bludiska. Spočiatku však totálne neoptimalizovaná. Bludisko sa vykreslovalo celé, čo som si pri malých bludiskách na ktorých som to skúšal nevšimol. Začal som teda optimalizovať. O niečom ako Octree som ani nepočul, tak som šiel svojou cestou, ktorá je asi aj tak efektívnejšia, nakoľko nerenderujem členitý. Čo treba a čo netreba zobrazovať sa dá vypočítať abstraktne, len na základe poznania matice bludiska. Použil som klasický prehľadávací algoritmus (mám pocit, že išlo o prehľadávanie do hĺbky), pomocou ktorého som si zistil viditeľné časti bludiska (chodba a ešte trochu za roh). Rozdiel bol badateľný a pomocou parametra programu je možné túto optimalizáciu vypnúť. Po vyriešení vykresľovania prichádza na scénu ďalší problém. Ide o detekciu kolízií. V tomto okamihu som pochopil, na čo je dobrá analytická geometria. Začala ma neskutočne baviť a popri kombinatorike a algebre patrí medzi moje najobľúbenejšie časti matematiky. Počítanie uhlov, vektorov, priesečníkov roviny a priamky ma proste dostalo. Keď som vyriešil kolízie, začal som sa s programom hrať, pridával som efekty, zvuky, strieľanie, skákanie, približovanie. Pri strieľaní som musel riešiť kolíziu strela-stena, čo mi dalo dosť zabrať, spočiatku som sa totiž uberal úplne nesprávnym smerom, písal som jednu podmienku za druhou a nič to neriešil poriadne, až potom ma napadlo, že to vlastne nieje nič iné, ako priesečník roviny s priamkou. Problém bol vyriešený a analytická geometria sa opäť ukázala ako najlepšia voľba. Posledným problémom na ktorý si spomínam bola synchronizácia na základe aktuálnych FPS. Keďže som pred tým nikdy nič podobné nerobil, vôbec som na to nemyslel, až keď som prišiel ku kamarátovi, ktorý mal o niečo rýchlejší počítač a zistil, že mu to tam behá ako šialené ma napadlo, že tu niekde je problém. Následne som začal program opravovať, až som to napokon vyriešil, neskôr som ale zistil, že som pozabudol na skoky, tie som ale už nikdy neopravil. Hra nebola nikdy dokončená, prišla vysoká škola a všetok čas som venoval jej, či to bolo IRC ? už si nepamätám :)
Spúšťanie programu
Program sa spustí v klasickom nastavení po kliknutí. K dispozícií je iba binárka pre Windows, ale nakoľko ide o OpenGL, tak je bez problémov spustiteľná aj cez wine pod GNU/Linuxom. Konfiguráciu aplikácie som chcel pôvodne presunúť do ini súboru, ale k tomu už nedošlo. Všetky základné nastavenia sa nachádzajú v súbore premenne.pas, väčšina aj s komentárom, akurát, že program treba opätovne prekladať. Pre základné nastavenie som narýchlo spravil niekoľko parametrov do príkazového riadku, je síce nutné zadávať parametre postupne, ale dá sa to aspoň trochu nastavovať.
Použitie programu:
program [RozlíšenieX] [RozlíšenieY] [Farebná hĺbka] [FullScreen] [KresliťVšetko] [ŠírkaBludiska] [VýškaBludiska] [VzorkovanieFPS] [Perspektíva]
|
No a ďalšia SOČ (Stredoškolská odborná činnosť) tento krát ale pre bratranca. Trvalo to dva víkendy, pamätám si to presne, lebo ku mne chodil keď som to vyvíjal, aby mal v tom aký taký prehľad. Moc to nepomohlo a keby sme mali učiteľa, ktorý by sa aspoň trochu vyznal, tak by mu na to asi rýchlo prišli. Jeden sa ho aj pokúsil dostať, ale keď ho videl spraviť dva či tri isté kliky, zapochyboval a radšej sa na to vykašlal, pričom odišiel s tým, že aj tak vie, že to nerobil on, ale že to nechce ďalej rozmazávať.
Hra sa skladá z dvoch hier, jednou sú klasické míny a druhou opäť piškvorky (Tic Tac Toe).
Míny obsahujú nejaké grafické efekty a komické animácie. Ako som si všimol, jedna animácia nefunguje, na čo program upozorní zakaždým, keď sa ju snaží spustiť, čo je asi raz za minútu. Vylepšením oproti klasickým mínam je takzvaný žolík, inak povedané, možnosť nápovedy v prípade, že sa človek dostane do stavu, kedy si musí tipnúť (tento prípad som na klasických mínach nenávidel).
Piškvorky boli pridané len preto, aby projekt narástol. V podstate som len prekopíroval kód zo starých piškvoriek (tieto by už nemali obsahovať pôvodný bug a nemalo by byť možné vyhrať nad počítačom). Okrem klasických piškvoriek, je aj ich nočná verzia, čo bol viacmenej iba marketingový ťah, nakoľko je to to isté, len s iným pozadím, no na prvý pohľad to zaujme. Vývoj trval asi pol dňa, hneď po tom, ako sa skončilo s mínami.
Keď som tieto hry teraz vyhrabal, prišiel som na pár bugov, ktoré sú asi následkom zmeny Win98 na WinXP. Ide napríklad o farbu nastavenú pod ovládacím panelom komponentov. Komponent by mal byť priehľadný, namiesto toho je tam teraz farba Magenta. Nechystám sa to však opravovať.
Čo sa týka technickej stránky, tak si spomínam, že som pri vývoji používal nejakú špeciálnu grafickú knižnicu, ktorá podporovala základne efekty ako napríklad blending.
|
Klikátko na tvorbu skinov k aplikácií AudioCDCreator. Opäť niečo nepoužiteľné a rovnako ťažkoapádne ako celé skiny. Pri tvorbe som sa nechal inšpirovať nastavovaním parametrov ako to má riešené Delphi pri nastavovaní parametrov komponentov a mám pocit, že to aj celkom išlo (nech nechce niekto vedieť ako, ja si na to matne spomínam, ale snažím sa zabudnúť).
|
Tak toto bola moja SOČ (Stredoškolská odborná činnosť). Obsadil som s ňou štvrté miesto v krajskom prebore tejto súťaže (čo ale asi každý. ktorý neskončil do tretieho miesta). Podľa úrovne projektu treba povedať, že konkurencia nebola ktovie aká.
Pre popis projektu budem citovať časť nápovedy k aplikácie, samozrejme s plným súhlasom autora. Čiže:
Jedná sa o program pre správu mp3 a ogg CD-čiek. Môže byť vhodný na tvorbu kompletných diskografií jednotlivých skupín. Program môže obsahovať: obal originálneho CD, texty piesní a samozrejme piesne. Piesne sa vkladajú vo mp3 alebo ogg formáte, ale v prípade výberoviek je možné vytvoriť aj tzv. zoznam, ktorý slúži ako playlist. Neoceniteľná výhoda je v možnosti zmeny skinov, alebo prípadného dopaľovania nových albumov.
Inými slovami mi išlo o to, aby aplikácia dokázala sama prejsť obsah CD, na základne ktorého vygeneruje prehľadnú diskografiu skupiny. V čase keď aplikácie vznikala stálo jedno CD okolo 50 korún a za napálenie sa dalo ďalších 50, prepaľovať celé CD po vydaní nového albumu bolo preto pre študenta strednej školy finančne nákladné.
Pamätám si, že pri tvorbe tohoto projektu som s Delphi len začínal a objavoval som rôzne možnosti práce s grafickými komponentami. Vrcholom blaha bolo naprogramovanie vlastného grafického komponentu (vtedy som ešte nepoznal ženy). Z dnešného pohľadu to bola fakt blbosť a dosť jednoduchá záležitosť, ale v tom čase mi to pripadalo ako veľký úspech. Treba podotknúť, že som sa stále potýkal s absenciou študijných materiálov a to nehovorím o nulovej znalosti anglického jazyka. Veľa vecí prebiehalo klasickou metódou vývoja pokus-omyl. Som rád, že to mám už za sebou, akurát, že vtedy ma programovanie fakt bavilo (na rozdiel od pascalu som konečne vyvíjal niečo, čo sa ponášalo na skutočný program a v tom je podľa mňa sila Delphi).
V programe sú implementované nejaká grafické komponenty snažiace sa zachovať objektový model stávajúcich grafických komponentov v Delphi. Okrem toho sa využíva externá knižnica na prehrávanie ogg a mp3 súborov (nepamätám si, prečo mi nevyhovoval klasický komponent na prehrávanie multimediálneho obsahu a dokumentáciu som už niekde medzi časom stratil). Taktiež je tam podporná knižnica na čítanie ID3Tagov. Aplikácia je skinovateľná, síce veľmi ťažkopádne, ale je.
Okrem binárnych súborov, ktoré je možné spustiť aj v GNU/Linux-e cez wine prikladám aj zdrojové kódy. Priložený build nie je buildom z týchto zdrojových kódov, ktoré sú dokonca ešte označené pod starým názvom, ktorý mi odporučili po postupe do okresného kola zmeniť na niečo serióznejšie, čo znamená, že netuším, či je to ešte možné preložiť, resp. či sú priložené všetky potrebné súbory, ale mám pocit, že by to malo ísť. Každopádne opäť nepredpokladám, že sa o to niekto bude snažiť. Naprogramované je to fakt hnusne (len podľa toho, čo som teraz zbežne pozeral), ale bol som úplný začiatočník.
audiocdcreator.zip (5.2 MB)
audiocdcreator-bin.zip (2.6 MB)
1