Zanir » OpenGL

Archív z ‘OpenGL’ Kategórie

Program 21 – Kolízie

07.08.2002

014_dxf_loaderBez detekcie kolízie sa nezaobíde žiadna hra. Ja som použil detekciu kolízie zo stránok www.gametutorials.com kde je táto oblasť dobre vysvetlená. Program využíva detekciu kolízie medzi polygonom (štvorcom) a guľou. V prípade, že nastane kolízia, pozícia kamery sa posunie tak, aby guľa bola mimo polygónu.

zdrojové texty (bez jpeg.lib) a program – 230kB

Program 20 – Projekcia textúry

03.08.2002

020_projected_texturesProjekcia textúry na objekty v scéne je zaujímavý efekt. Týmto spôsobom sa dá docieliť zaujímavé osvetlenie scény, napríklad použitím svetla prechádzajúceho cez farebná sklá.

zdrojové texty (bez jpeg.lib) a program – 245kB

Program 19 – Sphere mapping

26.07.2002

019_sphere_mappingSphere mapping je spôsob implementácie environment mapping-u. Environment mapping je mapovanie okolia na zrkadlové predmety, ktoré sa nachádzaju v ňom. Základné dve spôsoby sú sphere mapping a cube mapping.
Základom sphere mapping-u je spheremap textúra, ktorá zobrazuje zrkadlovú guľu sfotenú rovnobežnými lúčmy. Textúra obsahuje informáciu o farbe prostredia pre každý smer.
Cube mapping používa naraz 6 – textúr pre každú stenu kocky. V OpenGL je podporovaný ako rozšírenie GL_EXT(NV)_texture_cube_map.

zdrojové texty (bez jpeg.lib) a program – 342kB

Program 18 – Radial blur

17.07.2002

018_radial_blurRadial blur – radiálne rozmazanie objektu. Robí sa to jednoducho, vykreslíme objekt do textúry a textúru potom vykreslíme viackrát rôzne rostiahnutú na celú obrazovku.
V prípade že budeme rozťahovať iba v smere horizontálnom, alebo vertikálnom dostaneme rozmazanie v danom smere.

zdrojové texty a program – 77kB

Program 17 – Motion blur

09.07.2002

017_motion_blurMotion blur – rozmazanie rýchleho pohybu. Na rozdiel od kamery kde sa rýchlo pohybujúce objekty rozmazavajú je každý obrázok vykreslený v počítačovej grafike (OpenGL) ostrý, čo spôsobuje pocit nespojitého pohybu aj pri vyššom fps ako majú kamery. Rozmazanie pohybu sa v OpenGL dá docieliť použitím akumulačného buffera, ale ten nie je hardwarovo podporovaný na večšine grafických kariet. Ako náhrada sa dá použiť kreslenie do textúry.

zdrojové texty (bez jpeg.lib) a program – 80kB

Program 16 – Tiene pomocou kreslenia do textúry

06.07.2002

016_shadow_used_render_to_textureTiene na steny nanášam pomocou light-mapy. Pri vytváraní light-máp využívam kreslenie do textúry. Pre každú stenu vytváram light-mapu tak, že kameru presuniem do pozície svetla a vykreslím objekty vrhajúce tien tmavou farbou. V prípade viacerých svetiel, vykreslím pre každú pozíciu svetla objekty pomocou blendingu. Aby som mohol pouzit blending tak objekty vykreslujem 2*: prvý krát iba do z-buffra a druhý krát s nastavením glDepthFunc(GL_EQUAL ).
Tento spôsob sa dá použiť iba pre tiene vrhajúce sa na rovinné plochy. Výhoda, že pridávaním objektov a svetiel sa rýchlosť veľmi neznižuje. Nevýhoda každá plocha vyžaduje dalšiu light-mapu, a to spomaľuje výrazne (Voodoo3 2000).

zdrojové texty (bez jpeg.lib) a program – 222kB

Program 15 – Rendering do textúry

03.07.2002

015_render_to_textureVytváranie textúr počas behu programu z obrazovky je zaujímavá technika, ktorá umožňuje vytvárať rôzne efekty: napr. motion blur, radiar blur,…
Funguje to jednoducho: použitím glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, size, size, 0); skopírujeme dáta z obrazovky do textúry. Má to však nevýhodu je to pomalé, na mojej Voodoo3 2000 kopíruje jednú textúru 110 ms :-( .

zdrojové texty a program – 93kB

Program 14 – Načítanie dxf súboru

26.06.2002

014_dxf_loaderSúbory s príponov dxf je možné vytvárať, alebo exportovať z rôznych programov. Najčastejšie však z AutoCad-u, prípadne CADKEY (môj prípad). Načítavam iba štvorcové plochy – dáta zo sekcií 3DFACE. Aby som mohol používať viac textúr v jednom súbore používam pre každú textúru iný level, pričom v popise levelu je názov textúry.

zdrojové texty (bez jpeg.lib) a program – 220kB

Program 13 – Načítanie 3ds súboru

26.06.2002

013_3ds_loaderSúbory 3ds je možné vyexportovať v 3ds max. V súboroch sa ukladajú aj textúrové koordinácie a názvy textúr. Normálové vektory po bodoch sa neukladajú preto ich treba vypočítať pri načítavaní objektu.

zdrojové texty (bez jpeg.lib) a program – 410kB

Program 12 – Bump-mapping

02.06.2002

012_bump_mapping012_bump_mapping_marsBump-mapping je spôsob ako zobraziť malé štrbinky a kopčeky na prevažne rovinných plochách.
Orginálny bump-mapping je taký, v ktorom sa podľa výškovej textúry moduluje normála.
Emboss bump-mapping je spôsob ako urobiť bump-mapping na sučasných (rok 2004) grafických kartách.

Používajú sa dve textúry jedna základná a druhá výšková. Z výškovej sa urobia dve textúry jedna o polovičnom jase a druhá negovaná taktiež s polovičným jasom. Obidve sa sčítajú pričom sú navzájom posunuté. Tým vzniknú svetlejšie a tmavšie miesta, ktoré simulujú svetlo a tieň. Ostatné miesta sú sivé (127,127,127). Nakoniec sa ešte vynásobí 2* so základnou textúrov. Podľa toho akým spôsobom sa toto vykoná rozoznávame bump-mapping 3,2,1 – pass (priebehoví).
3-pass – ide na každom hardware, vyžaduje sčítavací a násobiaci(2*) blending.
2-pass – ide na graf. kartách, ktoré majú multitexturing. Sčítanie sa urobí v jednom kroku a násobenie v druhom.
1-pass – využíva operátor ADDSIGNED2X, ale má horšiu kvalitu farieb

Ja používam 3-pass a 2-pass bump-mapping. V programe sú 4 ukážky: vysvetlenie, bump-mapping s bodovým svetlom, bludisko(miesnosť so bump-mapping stenami) a planeta mars so bump-mappingom.

zdrojové texty (bez jpeg.lib) a program – 700kB