<< Zpět

 

  Česky: , English:

ARTONIX 3D engine

>>> NEDOKONČENO <<<

Artonix je 3D engine vycházející z 3D engine programu Petr. Původní záměr bylo vytvořit snadno použitelný 3D engine přizpůsobitelný různým prostředím a vyžadující od programátora jen minimum znalostí o implementaci. Projekt zůstal nedokončen. Přesto však jsou v něm použity některé zajímavé prvky, které by mohly někomu posloužit k inspiraci a jako polotovar pro vlastní projekt.

3D objekty jsou organizovány do stromové struktury s lokálními maticemi (spojování objektů a dědičnost transformací). 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ěť. Engine je vyvíjen ve Visual Studio C++ 2005.

Download engine Artonix (3,7 MB) ... překlad ve Visual Studio C++ 2005

Rozhraní

Artonix podporuje rozhraní DirectX 3, DirectX 5, DirectX 6, DirectX 7, DirectX 8, DirectX 9, OpenGL 1.0 a OpenGL 1.1. 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 níže běží současně rozhraní OpenGL 1.1, DirectX 3 až 9. Spodní 3 pohledy jsou jeden rám DirectX 9 se 3 viewporty (různé směry pohledů). Trochu je 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.

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). Chybí zde geokoule 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 (jako BMP 32-bit s automatickou detekcí zda obsahuje alfa kanál) 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.

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í.

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 MP3 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

Bylo připraveno pár základních tutoriálů:

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

Download engine Artonix (3,7 MB) ... překlad ve Visual Studio C++ 2005

Miroslav Němeček

<< Zpět