ARTONIX

(c) Miroslav Němeček

update 25.9.2011

Zde vzniká 3D engine, zatím v počátcích a zatím pouze pro Windows. Očekává se jednoduchost použití, dobrá dokumetace a přehledný kód (zatím nic z toho samozřejmě neplatí !!! :-) ). A volně dostupné zdrojáky.

3D objekty jsou organizovány do stromové struktury s lokálními maticemi (spojování objektů). S objekty se manipuluje pomocí změny vlastností - např. výběr textury, souřadnice v prostoru atd. Každý objekt může mít až 21 transformačních operací v libovolném pořadí - změna měřítka, zkosení, rotace a transpozice. Každý objekt si uchovává renderovací stav (např. nastavení vyhlazení textur, volba materiálu, operace průhlednosti), každý stavový parametr může dědit ze zvoleného zdroje - z pohledového portu, z rodiče nebo z globálního nastavení.

Geometrie objektů, textury a materiály mohou být sdíleny mezi více objekty, čímž se zrychluje renderování a snižují nároky na systémovou i grafickou paměť. Předpokládá se podpora načítání dat z archivních souborů (pravděpodobně ZIP).

Rozhraní

Artonix podporuje rozhraní DirectX 3, DirectX 5, DirectX 6, DirectX 7, DirectX 8, DirectX 9, OpenGL 1.0 a OpenGL 1.1 (v současnosti vyvíjeno ve Visual Studiu 2005, ale předpokládá se portování do jiných prostředí a systémů). Scénu je možné zobrazit současně v několika pohledech a v několika renderovacích rámech (mohou běžet v různých oknech). Každý rám může používat jiný engine - na screenshotu běží současně rozhraní OpenGL 1.1, DirectX 3 až 9. Spodní 3 pohledy jsou jeden rám DirectX 9 se 3 vieporty (různé směry pohledů). Trochu je zatím potíž s OpenGL - nejede více rámů současně, při více viewportech v jednom rámu nelze vymazat pozadí jen v jednom viewportu, řešení nechám až na později.

Konstruktor

Engine disponuje konstruktorem objektů. Je možné vytvářet mnoho typů 3D objektů generovaných programově - trojúhelník, čtverec, kruh, mezikruží, statický objekt, krychle, koule, polokoule, prstenec (torus), poloprstenec, válec, dutý válec, kužel, komolý kužel, poweroid (lze zadat strmost - mocnina), komolý poweroid, rootoid (druhá odmocnina), komolý rootoid, paraboloid, komolý paraboloid, quartoid, komolý quartoid, hyperboloid, kolo, kapsle, figurka, hranol, hvězda, čtyřstěn, osmistěn, dvanáctistěn, dvacetistěn. U objektů lze definovat složitost, zda se budou vytvářet podstavy a u rotačních objektů úhel výřezu. Objekty jsou namapovány texturou (obvykle textura rovnoměrně obepíná povrch celého objektu).

Ještě by se hodila doplnit: geokoule (zkoušel jsem několika způsoby ale zatím neúspěšně) a 2D prostorové objekty (s hloubkou).

Deformátor

Kromě běžných transformací (pomocí matic) je možné deformovat přímo síť objektu a to v reálném čase: posunutí (transpose), zkosení (skew), zkroucení (twist), vydutí (bulge), zmáčknutí (squash), zúžení (taper), vír (whirl), zvlnění (waving), kruhy (rings), ohnutí (bend), prověšení (sag), otočení (rotate), měřítko (scale) omezení. Ne všechny deformace obsluhují správně normály, u některých je nutné normály dodatečně znovu vygenerovat - k dispozici podpora rychlého přegenerování normál.

Modifikátor

Modifikátor umožňuje provádět operace s objekty - ořezávání objektů rovinou nebo koulí, slučování objektů, inverze objektů, obrácení normál, změna orientace plošek, automatický výpočet normál, rychlé přegenerování normál, slučování a rozpojování vrcholů, redukce nepoužitých vrcholů.

Textury

Jako externí textury lze načítat soubory ve formátu BMP, TGA, DDS, JPG a PNG, textury lze ukládat do souborů ve formátu BMP, TGA a DDS.

Soubory BMP mohou být v bitových hloubkách 1, 4, 8, 16, 24 a 32 bitů (RGB nebo palety), s podporou RLE komprese a s detekcí vertikální orientace. Je podporována varianta BMP s alfa kanálem a 8-bitová šedá. Lze ukládat do souborů BMP s bitovou hloubkou 8, 16, 24 nebo 32 bitů, bez komprese, s podporou alfa kanálu.

Soubory TGA jsou podporovány v bitových hloubkách 8 (palety nebo šedá), 16, 24 a 32 bitů, včetně RLE komprese, s alfa kanálem nebo bez. Ukládat do formátu TGA lze s bitovou hloubkou 8, 16, 24 nebo 32 bitů, bez komprese, s podporou alfa kanálu.

Soubory DDS je formát určený speciálně pro textury, podporuje proto nejširší okruh formátů, včetně komprimovaných textur DXT. Načítané textury mohou být ve formátu 8, 15, 16, 24 nebo 32 bitů, orientace RGB nebo BGR, s podporou alfa kanálu. Kromě běžných formátů jsou podporovány též speciální texturové formáty A4R4G4B4, A8L8, A8, A4L4, R3G3B2, DXT0 až DXT5 a další. Je podporováno načítání mipmaps. Všechny formáty jsou podporované též při ukládání.

U souborů JPG je podporována bitová hloubka 8 bitů (odstíny šedé) a 24 bitů. Ukládání není podporováno.

Soubory PNG mohou mít bitovou hloubku 2 (palety), 4 (palety), 8 (palety nebo odstíny šedé), 16 (odstíny šedé s alfa), 24 (RGB) a 32 bitů (RGB s alfa). Je podporovaný prokládaný formát a Huffmanova komprese s pevnou nebo dynamickou tabulkou. Ukládání do PNG není podporováno.

Mimochodem, PNG byl pěkně tvrdý oříšek :-). Ale na rozdíl od jiných systémů je zdrojový kód pro PNG obsažen uceleně v jednom cpp souboru a snadno přenositelný do jiných aplikací.

Engine si vnitřně uchovává textury v nejoptimálnějším formátu a tím šetří paměť i čas. Podporované vnitřní formáty jsou: R8G8B8. R5G6B5, L8, R3G3B2, A8R8G8B8, A1R5G5B5, A4R4G4B4, A8L8, A4L4, A8, DXT0 až DXT5. Všechny formáty lze mezi sebou libovolně převáděn, včetně komprimace a dekomprimace DXT formátů. U všech formátů jsou podporovány operace jako změna velikosti textury, ořezání, překlápění, generování alfa kanálu, generování mipmaps.

Při renderování textury je automaticky vyhledán nejvýhodnější formát, nejlépe textuře vyhovující. Je-li třeba, je automaticky provedena konverze formátu textury do exportovaného tvaru.

Funkce pro automatické mapování textur - promítání rovina, koule nebo válec, chrom, čočka. Chromové a čočkové mapování je dost nedokonalé a s chybičkami, snad se někdy podaří vymyslet něco lepšího.

S texturami je možné provádět široké spektrum funkcí. U textur lze měnit velikost, ořezávat, převracet, vyjmout výřez, vyplnit barvou nebo alfou (operacemi nastavení, přičtení, odečtení, modulace, demodulace, minimalizace, maximalizace), změna jasu, kontrastu a gammy, automatické generování alfa kanálu, záměna či kopie barevných kanálů, přičtení jiné textury, odečtení, násobení, inverzní násobení, minimalizace čí maximalizace s jinou texturou, vykreslení obdélníku, elipsy, rámečku, čáry, textu, jiné textury. Vykreslovací funkce lze provádět volitelnou operací nastavení, přičtení, odečtení, inverzní odečtení, násobení, inverzní násobení, modulace zdrojovou nebo cílovou alfa složkou.

Dialogy

Aby bylo možné engine používat jako Windows aplikaci, byla doplněna podpora Windows dialogových prvků (přes API): tlačítka, přepínače, seznamy, editační pole, táhla, záložky, nástrojový panel atd. K tomu doplněna (snad docela kvalitní) podpora textových řetězců. Lze využít jako knihovny do jiných Windows aplikací.

(poznámka: ovládací prvky na obrázku jsou nefunkční, je to jenom test)

Ovládání

K dispozici je podpora kláves z klávesnice - vstup kláves s virtuálním kódem nebo kláves se znakovou hodnotu, vstupy jsou bufferované. Kteroukoliv klávesu je možné testovat na stisk.

Pro ovládání myší je k dispozici aktuální souřadnice kurzoru myší, vstup stisku tlačítek myši (5 tlačítek - levé, pravé, střední, ext1 a ext2), testování držení tlačítka, skrolovací kolečko myši. Měnitelný vzhled kurzoru myši v překryvných oblastech okna. Ovládání myší lze uzamknout do středu okna a snímat pouze změnu polohy.

Zvuky

Engine umožňuje načítání a ukládání zvuků ve formátu WAV nebo MP3 (ukládaný zvuk má zatím nějaké chybičky v kompatibilitě). Je možné konvertovat zvuk mezi různými formáty (např. komprese do ADPCM či MP3), konverze mono/stereo, 16/8 bitů, konverze rychlosti zvuku, reverze, záměna kanálů, změna hlasitosti kanálů, fade in/out, tónový generátor, vyjmutí nebo zrušení části zvuku, sloučení zvuků, mixování zvuků.

Engine umožňuje používat dvě rozhraní pro práci se zvukem - globální zvuky a 3D zvuky.

Globální zvuky využívají Windows rozhraní waveout. Slouží např. k přehrávání hudby na pozadí. Umožňuje přehrávat komprimované zvuky, ale neumožňuje měnit hlasitost, balanci ani rychlost zvuků. Zvuků může být najednou přehráváno více.

3D zvuky využívají rozhraní DirectSound se sdílenými buffery. U každého zvuku je možné nezávisle (a s okamžitou reakcí) měnit hlasitost, balanci a rychlost přehrávání. 3D zvuky mohou být vázány na 3D objekt a tak přehrávány ve vztahu ke kameře - mění se hlasitost a balance podle vzdálenosti a směru objektu od kamery. 3D zvuky mohou být automaticky generovány s náhodným intervalem a s náhodnou rychlostí.

Tutoriály

Nyní zkouším vytvářet testovací aplikace a přitom doplňuji chybějící funkce a odlaďuji chyby. Později napíšu podrobné helpy a tutoriály. Zatím jen nějaké drobnosti (vše je ve spustitelné formě součástí balíku ke stažení):

A pár připravených programů pro tutoriály:

Download rozpracované verze 25.9.2011 (pro Visual Studio C++ 2005) (3,7 MB)

domovská stránka a email: http://Panda38.sweb.cz

[CNW:Counter]