VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY
|
|
- Stanislava Vacková
- před 7 lety
- Počet zobrazení:
Transkript
1 VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV AUTOMATIZACE A MĚŘÍCÍ TECHNIKY FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF CONTROL AND INSTRUMENTATION ZOBRAZOVÁNÍ 3D DAT DISPLAYING 3D DATA BAKALÁŘSKÁ PRÁCE BACHELOR S THESIS AUTOR PRÁCE AUTHOR VEDOUCÍ PRÁCE SUPERVISOR JIŘÍ MATYSKIEWICZ Ing. MILOSLAV RICHTER, Ph.D. BRNO 2008
2
3 Anotace Bakalářská práce se zabývá problematikou práce s 3D daty, manipulaci s nimi, s jejich archivací a zobrazováním. Teoretická část obsahuje stručný přehled současného stavu problematiky. Praktickou součástí práce je návrh a implementace knihovny pro zobrazování 3D dat a prohlížeče / editoru, který ji využívá. Knihovna je napsána v programovacím jazyce c++ s využitím objektového programování a určená k používání jako dynamicky linkovaná knihovna, její funkčnost je možné snadno rozšiřovat psaním zásuvných modulů, nevyžadujících zásah do zdrojového kódu knihovny. Zobrazování není vázáno na konkrétní typ grafického API a knihovnu je možné doplnit zásuvným modulem pro vykreslování libovolným softwarovým nebo hardwarovým způsobem. Součástí implementace je zásuvný modul pro vykreslování přes rozhraní OpenGL. Klíčová slova: 3D data, 3D grafika, zobrazování 3D dat.
4 Abstract Thesis deals with manipulation, archiving and viewing of 3D data. Theoretic part contains basic introduction to the field. Practical part of the thesis is design and implementation of the library for viewing 3D data and viewer / editor using this library. Library is written in c++ computer language and it s intended to be used as a dynamic linked library, which functionality can be easily enhanced with additional plug-in modules without need to modify the source code of the library. Actual viewing is not tied to any specific type of graphical API, library can be extended with plug-in for rendering using any software or hardware. Part of the implementation is plug-in for rendering 3D data using OpenGL interface. Keywords: 3D data, 3D graphics, viewing 3D data
5 B i b l i o g r a f i c k á c i t a c e MATYSKIEWICZ, Jiří. Zobrazování 3D dat. Brno: Vysoké učení technické v Brně,, s.. Vedoucí práce Ing. Miloslav Richter, Ph.D.
6 P r o h l á š e n í Prohlašuji, že svou bakalářskou práci na téma "zobrazování 3D dat" jsem vypracoval samostatně pod vedením vedoucího bakalářské práce a s použitím odborné literatury a dalších informačních zdrojů, které jsou všechny citovány v práci a uvedeny v seznamu literatury na konci práce. Jako autor uvedené bakalářské práce dále prohlašuji, že v souvislosti s vytvořením této diplomové práce jsem neporušil autorská práva třetích osob, zejména jsem nezasáhl nedovoleným způsobem do cizích autorských práv osobnostních a jsem si plně vědom následků porušení ustanovení 11 a následujících autorského zákona č. 121/2000 Sb., včetně možných trestněprávních důsledků vyplývajících z ustanovení 152 trestního zákona č. 140/1961 Sb. V Brně dne : Podpis: P o d ě k o v á n í Děkuji tímto Ing. Miloslavu Richterovi, PhD., za cenné připomínky a rady při vypracování diplomové práce. V Brně dne : Podpis:
7 5 OBSAH 1. ÚVOD TEORETICKÁ ČÁST Motivace Typy grafických dat Matematická reprezentace 3D dat Scéna Archivace grafických dat Způsoby zobrazování 3D dat Přehled dostupného HW a SW pro zobrazování Další vývoj oblasti do budoucna PRAKTICKÁ ČÁST Základní požadavky Přehled knihovny a jejích základních schopností Jednotlivé funkční bloky Základní knihovna SELI3D Seli3D Pomocné třídy Správci zásuvných modulů D matematika a geometrie Materiály a textury Scéna a uzly v ní Renderer Základní funkce Výhledová okna Vykreslování vyšší úrovně Přímé vykreslování D funkce Správce geometrie Správce světel Správce textur... 33
8 Správce materiálů Souborový formát Motivace pro vlastní formát Základní popis formátu Hlavička Nastavení Materiály Scéna Zásuvné moduly Používání knihovny Použité vývojové prostředí a cílová platforma Externí závislosti Možná rozšíření ZÁVĚR LITERATURA... 48
9 7 1. ÚVOD Tato bakalářská práce vychází z mé předchozí semestrální práce, která se zabývala problematikou především z teoretického hlediska, ale její součástí byl i základní návrh knihovny SELI3D, jejíž vytvoření bylo hlavním cílem této práce. Knihovna byla oproti původnímu návrhu mírně upravena a rozšířena, jejím účelem však stále zůstává poskytnutí základních programových nástrojů pro zpracování a zobrazování 3D dat, snadná další rozšiřitelnost za pomocí standardizovaných zásuvných (plug-in) modulů a uživatelského kódu a především co nejjednodušší použití knihovny pro jejího uživatele. Kompletní zdrojové kódy knihovny, jejich modulů, uživatelská dokumentace, spustitelná verze a ukázkové programy jsou součástí elektronické přílohy.
10 8 2. TEORETICKÁ ČÁST Tato část primárně slouží k základnímu a velmi stručnému úvodu do problematiky, například k poskytnutí základních teoretických znalostí potřebných k využívání knihovny SELI3D. Problematika zobrazování a reprezentace 3D dat a především grafiky je velmi rozsáhlá a rozsah bakalářské práce umožňuje poskytnout pouze nejzákladnější informace, jako rozsáhlejší zdroj informací je možné využít například knihu Moderní počítačová grafika 5, jejíž modernizovaná verze nedávno vyšla, případně mou semestrální práci 5, ze které tato bakalářská práce vychází, a která se teoretickou částí zabývá rozsáhleji. 2.1 MOTIVACE Z hlediska našich smyslů žijeme v prostorově trojrozměrném světě a proto je také velká část informací týkajících se našeho okolí reprezentovatelná právě jako 3D data, tedy informace pracující se třemi prostorovými rozměry. Ačkoli obecně je využití záznamu v 3D prostoru mnohem rozsáhlejší, nejčastěji se využívá pro grafické znázornění, odtud tedy termín 3D grafika. S nástupem a rozvojem počítačové technologie se stalo praktickým využívání 3D dat pro mnoho různých oborů i v reálném čase, ať už pro umělecké, zábavní, praktické či vědecké účely. Naprostá většina dnešních výrobků vzniká nejprve formou 3D modelu v počítači, než dojde k aktuální výrobě a to je pouze jeden z příkladů. 2.2 TYPY GRAFICKÝCH DAT Grafická, nebo obecně jakákoli 3D data, je možné reprezentovat spojitě či diskrétně. Diskrétní záznam neboli rastrová data dělí 2D či 3D (případně i vícerozměrný, stále platí stejný postup) obraz na pole jednotlivých prvků, u 2D obrazu označované většinou jako pixely (Picture element prvek obrazu), méně často používané 3D prvky bývají označovány jako voxely (Volume element prvek objemu). Tyto prvky pak obsahující data daného bodu, u grafiky většinou informace o jeho barvě. Výsledná kvalita zobrazení tedy značně závisí na použitém rozlišení,
11 9 neboli počtu bodů, které data obsahují. Při použití nízkého rozlišení se ztrácí detailní informace a dochází k obrazovým artefaktům, způsobeným převodem na digitální formu záznamu (například aliasing efekt). Ačkoli je pochopitelně možné data různým způsobem komprimovat (ať už bezztrátovou kompresí, nebo v případě 2D obrazu často některou z účinnějších ztrátových kompresí, které však do obrazu samy vnášejí chyby), stále platí, že jde o metodu záznamu velmi náročnou na paměť, především u vícerozměrného záznamu. Proto se rastrová data většinou používají pouze pro záznam jednotlivých 2D obrazů (nejčastější označení je bitmapa bitová mapa) a textur používaných pro trojrozměrné modely. Způsob záznamu jednotlivých pixelů se liší podle konkrétní implementace, dříve byl u počítačové grafiky častý způsob záznamu indexu v paletě barev, ale v dnešní době se většinou používá způsob záznamu po jednotlivých barevných složkách (například R, G, B), případně doplněný informací o průsvitnosti neboli alfě bodu. Typicky bývá používán záznam 16-bitový (například po 5 bitech na barevné složky R, G, B a jeden bit nepoužívaný nebo jako alfa kanál, případně po 5 bitech na složky R a B a 6 bitech na složku G), označovaný také jako Hi-color, nebo 32-bitový (po osmi bitech na složky R, G, B, zbylých 8 bitů je použito pro alfa kanál nebo se nepoužívá) True-Color. Pro běžné lidské vnímání je barevnost True Color více než dostačující. Pro některé specializované případy se používá High Dynamic Range Imaging vykreslování z velkým dynamickým rozsahem, kdy jsou jednotlivé barevné složky vyjádřeny jako reálné číslo. Pro zobrazování 3D grafiky se většinou používá spojitá reprezentace formou matematické reprezentace jednotlivých objektů, doplněná texturami definujícími detailněji povrch těchto objektů, které bývají 2D rastrové, případně parametrické (parametrické textury). 2.3 MATEMATICKÁ REPREZENTACE 3D DAT Pro matematickou reprezentaci se často používá souhrnné označení vektorová grafika, jelikož je jejím základem vektorová matematika. Každý zobrazovaný objekt je zapsán jako jedno či více grafických primitiv (tedy základních prvků definovaných použitým záznamovým modelem).
12 10 Grafické primitivum je vždy nějaký základní geometrický útvar, například trojúhelník, polygon, koule atd. s určenými základními parametry a pozicí. Nejzákladnějším prvkem je tedy jeden jediný bod v prostoru. Z hlediska vykreslování v reálném čase se v současné době většinou převádí každý další objekt na sérii bodů a informace, které body společně vytváří plochy. V tomto kontextu se prostorový bod označuje jako vertex a nese v sobě informace především o své pozici, ale často doplněné o další, jako je jeho barva, normála plochy k vertexu patřící, nebo texturovací souřadnice, používané k promítání 2D dat na danou plochu. Objekt popisovaný sítí bodů bývá většinou označován jako mesh (neboli síť), česky se používá označení drátěný model (který objekt zobrazovaný pouze jako série čar reprezentujících jednotlivé hrany připomíná). Konkrétních způsobů zápisu existuje větší množství, nejčastěji bývají vertexy zapisovány po sobě tak, jak tvoří jednotlivé trojúhelníky případně jiná primitiva, pro složitější modely bývá vhodné používat indexovaný mesh, který seznam jednotlivých vertexů doplňuje ještě seznamem indexů vertexů, tvořících jednotlivé plošky. K takto (či obdobně, například s využitím křivkových ploch místo trojúhelníků) popsanému objektu se ještě přiřazuje materiál, definující jeho povrchové vlastnosti potřebné při vykreslování pro zjištění barvy (či dalších informací) v přesně definovaném bodě. Základním prostředkem bývá kromě základní barvy přiřazení textury, což vyžaduje, aby objekt obsahoval také texturové mapování, neboli informace o tom, jakému místě v textuře odpovídá ten který vertex. Nejčastější a nejuniverzálnější metodou je takzvané uv mapování (případně uvw mapování u 3D textur), při kterém se každému vertexu přiřadí také souřadnice uvnitř přiřazené textury. Normou je, že souřadnice u,v = 0,0 představují levý horní bod textury a souřadnice 1,1 pravý spodní bod textury. Při použití záporných souřadnic se textura zrcadlově převrátí. S použitím texturovacích souřadnic větších než 1 je možné využít tiling (dlaždice), kdy je možné zobrazit použít texturu jako dlaždici a plochu s ní vydláždit.
13 SCÉNA Výše popsané metody záznamu pomocí matematické reprezentace se většinou používají pro záznam dat pro jeden jednotlivý objekt, kompletní záznam rozsáhlé 3D scény pomocí přímé definice všech bodů a ploch je pro většinu použití nepraktický, proto se většinou také využívá některý ze způsobů definice celé scény z většího množství objektů. Nejjednodušším formátem záznamu by pochopitelně bylo použití obyčejného pole všech přítomných objektů, ale z mnoha praktických důvodů se nejčastěji používá záznam scény prostřednictvím grafu scény (někdy také označovanému jako strom scény). Graf scény tvoří jednotlivé uzly (anglicky nodes), které jsou navzájem hierarchicky propojeny. Každý objekt může být tvořený více uzly spojenými dohromady, což poskytuje velké výhody při vykreslování nebo manipulaci. Typicky bývá objekt rozdělen podle svých jednotlivých pohyblivých částí, se kterými je pak možné manipulovat nezávisle na ostatních, ale celková manipulace s nejvyšším uzlem hierarchie se promítne i na jednotlivé potomky. Stromovou strukturu je tak možné použít i na ukládání dalších dat, uložení jednotlivých variant objektu při používání úrovní detailů, trajektorií pro pohyb atd. Často se také používá stromová struktura pro rychlostní optimalizace při vykreslování jednotlivých prvků či k rychlému zjišťování jejich vzájemné pozice. Každý uzel si kromě informací specifických pro svůj typ a odkazů na další uzly také nese informaci o své pozici s ohledem na globální scénu, případně na nadřazený uzel. Souřadnice uložené v uzlu jsou pak většinou definované v jeho vlastním neboli lokálním prostoru (tedy bod o souřadnicích 0,0,0 znamená střed pozice uzlu, ne střed světové scény. Do prostoru světa je pak třeba tyto souřadnice transformovat pomocí transformace objektu. Pro přesné popsání vztahu mezi prostorem uzlu a světovým prostorem postačují tři informace translace (neboli posun středu uzlu oproti světovému prostoru), rotace a škála neboli jeho zvětšení nebo zmenšení. Jde tedy o sadu tří trojrozměrných vektorů (při použití záznamu rotace pomocí ruletových úhlů), ale z hlediska časové optimalizace se informace často zaznamenává ve formě
14 12 transformační matice. Pak pro vypočtení přesné světové pozice z vektoru souřadnic jednoho bodu ve světě uzlu stačí tento vektor násobit předem spočtenou transformační maticí. Další výhodou použití záznamu do grafu scény je fakt, že graf může obsahovat libovolná data, ne pouze data pro zobrazování. 2.5 ARCHIVACE GRAFICKÝCH DAT Pro archivaci grafických dat vznikla celá řada různých formátů, historicky většina z nich začínala jako proprietární formát firmy vytvářející grafický software. U rastrového 2D záznamu, ať už pro obrázky či video sekvence, existuje několik rozsáhle používaných standardních formátů, ať už se ztrátovou či bezztrátovou kompresí, mezi nejpoužívanější patří formáty JPEG, BMP, GIF a TIFF, k dispozici je celá řada volně použitelných knihoven k jejich načítání a ukládání. (Poznámka: detailnější informace o jednotlivých formátech jsou uvedeny v mé semestrální práci 5.) U souborů určených k záznamu 3D, či obecně vektorových dat, není situace tak jednoduchá. Formát souborů musí být už ze samotného principu většinou výrazně komplikovanější, než u jednoduchého záznamu obrazových bodů, ale především se do dnešní doby neprosadil žádný z formátů jako výrazný univerzální standard. V současné době jsou nejperspektivnější dva formáty používané pro záznam formáty X3D 5 a Collada 5, oba založené na formátu XML. Formát X3D, procházející ISO standardizací, je nástupcem formátu VRML (Virtual Reality Markup Language, ISO ), původně určeného pro tvorbu interaktivních 3D webových stránek. Jde o velmi rozsáhlý a komplikovaný formát, zahrnující mimo jiné i podporu animací humanoidů, schválení všech jeho částí ještě není dokončeno. Konkurencí pro X3D je systém COLLADA (Collaborative Design Activity spolupráce na designové aktivitě), původně vyvinutá firmou Sony pro použití na herní konzoli Playstation 3, v současné době pod kontrolou skupiny Khronos. Jde o otevřenou specifikaci určenou k vyřešení problémů nekompatibility mezi jednotlivými grafickými programy. Ačkoli byl formát původně určen jako přenosový, mnoho aplikací ho začíná používat jako formát nativní, například
15 13 populární Google Earth a SketchIt, a stává se tedy de-facto standardem pro záznam 3D scén a objektů, podporovaný naprostou většinou moderních modelovacích nástrojů a 3D aplikací. 2.6 ZPŮSOBY ZOBRAZOVÁNÍ 3D DAT Problém zobrazovaní 3D grafických dat se většinou omezuje na převod na 2D obraz, představující výhled pozorovatele. Ačkoli existuje několik experimentálních systémů pro plnohodnotné volumetrické zobrazování, praktické využití a rozšíření těchto systémů je stále otázkou budoucnosti. Zobrazování stereoskopické, tedy takové, které vzbuzuje stejně jako lidské vidění dojem trojrozměrné prostoru, je ve skutečnosti stejné, jako zobrazování do 2D prostoru, pouze se pro každé oko vytvoří mírně jiný obraz. Při převádění 3D grafiky na 2D obraz (tedy průmětu 3D dat na 2D plochu), je možné použít několik různých technik s různou výpočetní náročností a značně rozdílnou výslednou vizuální kvalitou. Techniky vycházející z realistického modelování fyzikálních vlastností světla nabízí fotorealistickou kvalitu. Většinou se využívá algoritmus zvaný raytracing (sledování paprsku), nebo některá z jeho modifikací, při které se pro každý obrazový bod spočítá výsledná hodnota sledováním všech možných světelných paprsků ze všech dostupných světelných zdrojů. Ačkoli jde o principiálně jednoduchou metodu, která poskytuje vynikající výsledky včetně věrohodných stínů, jde o techniku extrémně výpočetně náročnou. Používání těchto metod pro zobrazování v reálném čase se v současné době omezuje na experimenty, obecně se předpokládá, že k reálnému rozšíření a používání dojde nejprve za pět až deset let. V současné době se pro vykreslování v reálném čase používá téměř výhradně proces pasterizace, spočívající v přímém geometrickém průmětu 3D dat na 2D plochu, kdy se veškeré světelné a barevné efekty (povrchy materiálů, odrazy, stíny) dopočítávají různými metodami, aby bylo dosaženo co nejlepšího výsledku. Tuto metodu používají dnes všechny současné grafické karty podporující 3D zobrazení.
16 14 Při procesu rasterizace se postupně vykreslují jednotlivé plochy objektů tvořené trojúhelníky na obrazovku. Souřadnice každého bodu se transformují na 2D průmět pomocí projekční matice a následně se vykreslí plocha tvořená body na obrazovku. Zde však vzniká základní problém rasterizace a to je nutnost zajistit, aby se vykreslené prvky správně překrývaly. Do značné míry tento problém řeší použití z-bufferu (někdy také depth-bufferu), do kterého se pro každý vykreslený bod ukládá na danou pozici i jeho vzdálenost od pozorovatele. Zůstává však problém ploch, které jsou průsvitné nebo průhledné, které musí být vykreslovány ve správném pořadí po sobě. Pro správný výsledný dojem obrazu je nutné plochy správně nasvítit a nastínovat. Realistický světelný model by byl výpočetně příliš náročný, proto se používají zjednodušené empirické modely, nejčastěji Phongův model, nebo jeho zjednodušená varianta Blinn-Phongův model, poskytující poměrně vysokou kvalitu výsledného obrazu, neřeší však problémy zobrazování stínů. Celkový jas bodu je ve Phongově modelu tvořen kombinací tří složek ambientního, difúzního a spekulárního osvětlení. Ambientní osvětlení představuje model osvětlení, které je uniformní všude ve scéně, je vytvářené slabými světelnými odrazy od všech prvků scény. Typicky se používá velmi slabé bílé světlo. Difúzní osvětlení vzniká odrazem od nerovného povrchu, takže se paprsek jakoby odráží do náhodných směrů a tím pádem difúzní složka světla nezávisí na úhlu, který svírá vektor pohledu s normálou povrchu. Difúzní složka se používá pro simulaci matného povrchu. Spekulární složka vzniká dokonalým odrazem světla od povrchu, její úroveň pro daný bod tedy závisí na úhlu mezi vektorem pohledu a normálou povrchu. Spekulární složka se používá pro definici lesklých povrchů. Nasvětlování výsledné plochy je možné provádět několika různými způsoby. Z rychlostních důvodů se nejčastěji používá nasvětlování per-vertex, při kterém se počítá světelná hodnota pouze pro jednotlivé vertexy tvořící plochu. Pro tu se pak použije jedna uniformní hodnota stínování (flat shading ploché stínování), nebo
17 15 výrazně lépe vypadající Gourardovo stínování, při kterém se hodnota světlosti pro daný bod interpoluje mezi hodnotami jednotlivých vertexů. Současný moderní zobrazovací hardware již umožňuje i nasvětlování perpixel neboli pro každý bod zvlášť (Phongovo stínování), prostřednictvím shaderovacích programů. Nasvětlování per-pixel bývá většinou doprovázeno použitím dalších technik výrazně zvyšujících celkovou kvalitu obrazu, například použití spekulárních map měnících lesklost povrchu či normálových map simulujících nerovnosti na povrchu. 2.7 PŘEHLED DOSTUPNÉHO HW A SW PRO ZOBRAZOVÁNÍ Grafické karty osobních a domácích počítačů procházejí za posledních deset let značným rozvojem, který kupředu ženou především počítačové hry a multimédia. Původní grafické čipy a zobrazovače se omezovaly na jednoduché zobrazování grafického bufferu na obrazovku, ale postupně přibývaly různé akcelerované funkce, zpočátku pouze pro přesun paměťových bloků pro 2D grafiku, později první funkce pro akceleraci 3D grafiky, především přímé vykreslování texturovaných polygonů a podpora transformačních výpočtů. Dnešní grafická karta vybavená programovatelným procesorem GPU (graphics processor unit), masivně využívajícím paralelizaci, poskytuje obrovský matematický výpočetní výkon, specializovaný primárně na vektorovou matematiku. Původní určení GPU bylo pro spouštění shaderovacích (stínovacích) krátkých prográmků, vypočítávajících hodnoty pro jednotlivé vertexy a pixely obrazové složky, ale díky obrovskému výkonu se GPU čím dál více prosazují i pro další výpočty, dokonce je možné zakoupit speciálně upravené karty určené pro vědecké výpočty, které neobsahují video výstup, pouze GPU a paměť. Ačkoli je v dnešní době možné pomocí shaderů programovat zobrazovací postupy přímo v GPU, stále se pro přístup k hardware používá některé zobrazovací API (application program interface), které definuje základní zobrazovací funkce.
18 16 V dnešní době (především z hlediska 3D grafiky) se používají dvě nízkoúrovňová API DirectX a OpenGL. OpenGL je grafické API vyvinuté firmou Silicon Graphics Inc. v roce 1992 a dodnes se používá na mnoha různých platformách pro nejrůznější aplikace. Do roku 2006 držela kontrolu nad standardy OpenGL skupina OpenGL Architecture Review Board (ARB). V roce 2006 přešla kontrola do rukou Khronos Groups, průmyslovému konsorciu soustředěnému na vytváření a spravování otevřených standardních API pro různá mediální využití. Aktuální verze OpenGL je 2.1, přičemž se koncem roku 2007 nebo začátkem roku očekává vydání nové, značně modifikované verze 3.0. OpenGL poskytuje snadný přístup k mnoha grafickým funkcím prostřednictvím jazykově a platformově nezávislých funkcí. Implementace OpenGL existuje prakticky pro všechny současně používané osobní počítače a operační systémy a u mnoha se používá jako oficiální grafické API, zatímco modifikovaná verze OpenGL ES se používá pro embedded systémy, jako jsou mobilní telefony a PDA. Direct3D, součást multimediálních knihoven DirectX firmy Microsoft, je hlavním konkurentem OpenGL na PC, je však limitovaná pouze na operační systém Windows. Direct3D poskytuje přibližně stejné možnosti jako OpenGL, ale na rozdíl od OpenGL používajícího strukturovaný způsob programování jde o objektově orientované API. První verze Direct3D si zaslouženě získaly nepříliš dobrou pověst pro svou komplikovanost a nesnadné používání, ale v současné době jde o plnohodnotné a použitelné grafické API. Aktuální verze DX 10 (a nejnovější 10.1) API značně zpřehlednila a vylepšila, jejím problémem je však nekompatibilita s předchozími verzemi a především fakt, že se firma Microsoft rozhodla vydat DirectX 10 pouze pro svůj nový operační systém Windows Vista. Při programování s přímým použitím nízkoúrovňového API je výběr vhodného API primárně omezen cílovou platformou, jelikož OpenGL i Direct3D poskytují téměř stejné možnosti. Zásadní nevýhodou Direct3D je jeho omezení na
19 17 platformu Windows, zatímco OpenGL existuje prakticky na všech dnešních systémech. U API vyšší úrovně je celkem běžné, že se výběr řeší abstrakcí a poskytnutím rendererů (vykreslovacích knihoven) pro OpenGL i Direct3D. Kromě nízkoúrovňových API zprostředkujících práci s grafickým hardwarem obsahuje obrovské množství nejrůznějších API usnadňujících práci s grafikou, od jednoduchých rozšíření OpenGL (například Open Inventor) či Direct3D (tak zvaný Direct3D Retained mode) a specializované grafické knihovny (například SpeedTree pro rychlé vykreslování vegetace) až po kompletní grafické balíky s více či méně specializovanou funkčností. Tyto knihovny se většinou označují jako renderery nebo grafické enginy. Jejich nevýhodou bývá přílišná specializace (i u teoreticky obecných rendererů, které se většinou tvrdě specializují na počítačové hry) a u komerčních cena, která dosahuje u známějších a kvalitnějších případů ceny stovky tisíc dolarů. Volně dostupné knihovny často trpí značnou zastaralostí nebo omezenými schopnostmi, případně restriktivními open-source licencemi. Pravděpodobně nejlepší aktuálně dostupná open-sourcová knihovna je OGRE (Object Graphic Renderer), univerzální knihovna pro zobrazování 3D grafiky, distribuovaná pod licencí LGPL (umožňující využívat knihovnu ve zkompilované formě i v uzavřených a komerčních projektech). Je používaná v mnoha opensourcových i komerčních programech a především hrách. 2.8 DALŠÍ VÝVOJ OBLASTI DO BUDOUCNA V současné době panuje v oblasti zobrazovacího HW boj mezi o vedení mezi kartami založenými na čipech firmy ATI (od roku 2006 vlastněná firmou AMD) a NVIDIA. Ačkoli největší počet grafických čipů vyrábí firma Intel, jde stále o velice nekvalitní a levné čipy, určené pro integrování na základní desky pro levné a především kancelářské počítače. Současná generace grafických karet stojí na programovatelných GPU, umožňujících rychlou rasterizaci a téměř libovolné úpravy procesu vykreslování.
20 18 Vývoj do budoucnosti je nejistý, ale nejpravděpodobnějším případem je využívání hybridních procesorů (tedy klasické CPU, doplněných obdobou shaderovacích jednotek z GPU, umožňujících rychlé zpracování matematických výpočtů), vývoj takovýchto procesorů oznámil jak Intel, tak AMD (a právě vývoj hybridního procesoru je důvodem jejich akvizice firmy ATI). Procesor Cell, vyvinutý firmami Sony, IBM a Toshiba, používaný zatím v herní konzoli Playstation 3 a serverech Blade, je příkladem právě takovéhoto procesoru, kombinujících obecné výpočetní jádro vycházející z PowerPC, doplněné takzvanými synergistickými jednotkami určenými pro rychlé matematické výpočty. Je velmi pravděpodobné, že s takovýmito procesory a očekávaným nárůstem výkonu dojde v zobrazování grafiky k přesunu k plně softwarovému vykreslování a používání technologií typu raytracing, mimo jiné také proto, že v případě extrémně složitých scén a modelů může být raytracing rychlejší, než rasterizace, jelikož se vykresluje vždy jen to, co je v obrazu opravdu vidět, a nedochází ke zbytečnému vykreslování částí zakrytých jinými objekty. Kromě výhody vyšší kvality a realističtějšího obrazu dokáže raytracing snadno vytvořit efekty, které se pomocí rasterizace vytváří často velice složitě (například reálné dynamické stíny a odrazy). Optimistické odhady stanovují tento přesun na období přibližně za pět let, ale experimentální ukázky se objevují už teď. Z hlediska předpokládaného přechodu na raytracing a podobné metody je jasné, že dnes používaná nízkoúrovňová grafická API značně ztratí na významu, jejich účelem je totiž pouze poskytovat standardizovaný přístup k současnému zobrazovacímu hardwaru. Jak Direct3D, tak OpenGL poskytují metody pro rasterizaci a data se zobrazují postupným vykreslováním jednotlivých polygonů. Pro raytracing je nutná existence kompletně popsané geometrické scény a definovaných materiálů, což byla zatím doména API a knihoven vyšší úrovně. Dá se předpokládat, že API pro raytracing vznikne celá řada, už dnes se živě rozvíjí kupříkladu specifikace OpenRT, obdoba OpenGL pro raytracing. Zásadní otázkou však je, zda se objeví nějaký dostatečně silný formát, který se stane de-facto standardem, nebo zda bude oblast zahlcena množstvím různých navzájem nekompatibilních knihoven.
21 19 3. PRAKTICKÁ ČÁST Tato část bakalářské práce se zabývá návrhem a implementací grafické knihovny umožňující jednoduché a rychlé vykreslování různé vektorové grafiky a základního editačního prostředí, které tuto knihovnu využívá. Pro knihovnu bylo zvoleno jméno Seli3D (Simple Extensible Library for 3D jednoduchá rozšiřitelná knihovna pro 3D.) Text poskytuje především základní informace o knihovně, popisuje filozofii, s jakou byla navrhována, dokumentuje použité postupy a popisuje jednotlivé její části a interface, prostřednictvím kterého se knihovna používá, dále definuje interní datový formát používaný knihovnou pro záznam 3D dat a způsoby vytváření zásuvných modulů (plug-inů) přímo použitelných knihovnou bez nutnosti zasahovat do zdrojového kódu knihovny. S ohledem na přehlednost textu tedy nejsou detailně popisovány úplně všechny prvky kódu. Přehledný popis všech objektů, funkcí a jejich parametrů je uveden v hypertextové dokumentaci obsažené v elektronické příloze, která navíc obsahuje kompletní zdrojové kódy knihovny a implementovaných modulů, spustitelnou verzi a několik ukázkových příkladů. V závěru části je uveden seznam a popis dalších rozšířeních, kterými by se užitečnost a použitelnost knihovny značně zvětšila, které ale však nebylo možné z časových ohledů implementovat již teď. 3.1 ZÁKLADNÍ POŽADAVKY Při návrhu knihovny pro mě bylo primárním požadavkem, aby měla knihovna jasné a především velice snadno použitelné API, tedy aby se daly jednoduché aplikace psát s minimální námahou a nutností detailní znalosti všech prvků knihovny a postupů, na kterých funguje. Druhým základním požadavkem byla maximální univerzálnost a použitelnost knihovny pro libovolné použití na zobrazování, manipulaci či editaci dat. Z tohoto ohledu je knihovna psána bez používání různých specifických optimalizací, vhodných pro ten daný účel, což je častý problém mnoha vysokoúrovňových
22 20 grafických knihoven. Navržená struktura grafu scény a postupů však umožňuje tyto optimalizace později přidat. Třetím základním požadavkem totiž byla snadná možnost systém nadále rozvíjet a doplňovat dalšími moduly, bez nutnosti zasahovat do kódu samotné knihovny. Rozšiřitelnost (extensibility) je obsažena přímo ve jméně knihovny. Konkrétní požadavky na schopnosti knihovny byly tyto: - nezávislost na konkrétním koncovém grafickém API - schopnost přímo zobrazovat grafické objekty ve standardním způsobu zápisu a poskytovat základní grafické funkce, včetně 3D matematiky a geometrických funkcí - základní definice materiálů pro Phongův nasvětlovací model, umožňující pozdější rozšíření pro moderní materiály využívající grafické shadery - podpora barevných textur, schopnost načítat standardní typy bitmapových souborů - schopnost definovat hierarchickou scénu, manipulovat s ní a vykreslovat ji - podpora definice jednoduchých animací zaznamenávaných jako transformační trajektorie - podpora definice neomezeného počtu zdrojů světla základních typů uložených ve scéně - podpora definice kamer ve scéně, kterými je možné manipulovat a přepínat mezi nimi obraz - základní zobrazování z předdefinovaných úhlů (případně i pro ortografickou projekci) - vlastní souborový formát - načítání a ukládání dat scény ze souboru na disku - podpora používání samostatných zásuvných modulů, umožňujících snadné rozšíření funkčnosti (import/export souborových formátů, jiné koncové renderery, rozšiřování typů uzlů scény o další typy) - základní editor a prohlížeč, využívající knihovnu 3.2 PŘEHLED KNIHOVNY A JEJÍCH ZÁKLADNÍCH SCHOPNOSTÍ Knihovna SELI3D je psána objektově v jazyce c++ a určena pro používání jako dynamicky linkovaná knihovna. Poskytuje všechny základní prostředky pro zobrazování a zpracovávání 3D a 2D dat a grafiky, ať už nízkoúrovňovými voláními na přímé vykreslování objektů, tak možností vytvářet komplikované hierarchické
23 21 stromy obsahující libovolné grafické i negrafické objekty a tyto vykreslovat a zpracovávat. Implementuje vlastní souborový formát na bázi XML (extended markup language), který může obsahovat prakticky libovolná uživatelská data, která se při opětovném ukládání scény neztratí. Uživatelské programy a moduly mohou snadno definovat vlastní datové typy, které se mohou z datového souboru načítat a ukládat. Knihovnu je možné doplnit uživatelskými zásuvnými moduly pro import a export z a do specifických souborových formátů (jak pro 2D grafiku pro textury, tak pro scénu). Samotný vykreslovací systém není pevně vázán na dané grafické API, místo toho knihovna sama o sobě implementuje pouze abstraktní vykreslovač (renderer), takže je možné používat ji i pro zpracovávání scén a grafiky bez zobrazování,, například pro dávkové zpracování mnoha různých dat kupříkladu při rekonstrukci obrazu. Třída abstraktního rendereru a přiřazených objektů (správců různých typů konkrétních dat, jako jsou textury, světla atd.) se používá jako základ pro konkrétní implementaci rendereru, který může data vykreslovat libovolným způsobem, ať už v reálném čase, nebo pro off-line renderování kupříkladu některou z raytracovacích metod. Knihovna je standardně doprovázena rendererem na bázi OpenGL, určeným pro rychlé zobrazování v reálném čase. Součástí knihovny jsou také správci již výše zmíněných zásuvných modulů, umožňující snadno doplňovat knihovnu různými dalšími funkcemi bez nutnosti zasahovat do zdrojového kódu samotné knihovny. 3.3 JEDNOTLIVÉ FUNKČNÍ BLOKY Provedená implementace knihovny je rozdělena na tři samostatné funkční bloky samotná knihovna SELI3D, obsahující abstraktní renderer, GLRenderer, což je zásuvný modul implementující konkrétní zobrazování přes akcelerované grafické API OpenGL, a SeliView, což je jednoduchý prohlížeč a editor scény.
24 ZÁKLADNÍ KNIHOVNA SELI3D Jádro knihovny je složeno z několika bloků. Jsou jimi hlavní třída (kontrolní objekt) knihovny Seli3D, správce zásuvných modulů, blok objektů pro 3D matematiku a geometrii, hierarchická scéna a uzly, které může obsahovat, a abstraktní renderer poskytující přístup k vykreslovacím funkcím a představujícím základ pro konkrétní implementace rendererů. Pro zjednodušení práce a používání je v knihovně navíc obsažena podpora logování/ladění a konzole (obecná textová, či používající GUI operačního systému. Konvencí je, že většina metod, jejichž volání nemusí uspět, vrací návratovou hodnotu. Pokud je návratová hodnota kladná, volání uspělo a návratová hodnota je platná. V případě neúspěchu je vrácena záporná hodnota definovaná v hlavičkovém souboru SeliErrors. Textový popis chyby je možné získat voláním překladové funkce v hlavním objektu Seli3D. Všechny základní třídy řídící chod knihovny využívají designový styl singleton approach, zděděný z třídy csingleton. Tyto třídy existují vždy pouze v jediné možné instanci na každý program, uživatel nemá možnost vytvářet si jejich instance. K těmto třídám přistupuje voláním statické funkce Instance() (příklad Seli3D::Instance() ), která vrací referenci na platnou instanci, metody se pak tedy volají například Seli3D::Instance().metoda() Seli3D Hlavní třídou, používanou jako rozhraní ke knihovně, je třída Seli3D. V nejjednodušších případech použití se veškerý uživatelský kód omezí pouze na volání metod Seli3D. Seli3D poskytuje základní příkazy pro práci s knihovnou a odkazy na specifické hlavní objekty, jejím prostřednictvím může uživatel získat odkazy na jednotlivé platné třídy řídící konkrétní funkce knihovny, především na aktuální
25 23 inicializovaný renderer, aktivní hlavní scénu a používanou vstupně / výstupní konzoli. Z hlediska funkčnosti lze rozdělit dostupné metody Seli3D na tyto skupiny: - Inicializace a ukončení - Správa rendererů - Základní správa scény - Získání odkazů na platné další třídy - Pomocné často používané funkce, fungující jako zkratka volání konkrétních tříd. Inicializace Před jakýmkoli používáním kterékoli části knihovny je nutné knihovnu inicializovat voláním metody Seli3D::Instance().Init(). Při volání bez parametru se provede standardní typ inicializace provede se načtení všech dostupných zásuvných modulů, zaregistrují se dostupné renderery a aktivuje se konzole. Chování je možné modifikovat voláním metody Init() s parametrem typu sinitinfo. sinitinfo je struktura, obsahující parametry pro modifikaci inicializačního procesu, například umožňuje zakázat načítání zásuvných modulů, přikázat použití pouze abstraktního či výchozího (OpenGL) rendereru a podobně. Návratová hodnota je buď 1 v případě, že vše proběhlo v pořádku, nebo definovaná záporná hodnota. Její textový význam je možné získat voláním metody Seli3D::GetErrorString(int error), která vrací ukazatel typu char* na řetězec obsahující chybovou hlášku. Před ukončením činnosti programu je vhodné zavolat metodu Seli3D::Close(), která korektně ukončí činnost programu uzavře renderer, vymaže aktivní scénu, zavře okno konzole a podobně. Správa rendererů Registrace rendererů se provádí prostřednictvím správce zásuvných modulů, ale Seli3D obsahuje zkratky pro jejich načítání a aktivaci (podrobněji viz níže u správce modulů) a především inicializaci. Před dalším používáním knihovny je po
26 24 inicializaci hlavního objektu nutné vybrat a inicializovat používaný renderer zavoláním funkce Seli3D::InitRenderer(), ať už bez parametru pro výchozí nastavení, nebo s parametrem typu sviewparameters, který umožňuje předefinovat základní vlastnosti rendereru (například velikost a jméno okna). Systém rendererů umožňuje, aby renderer buď vytvořil vlastní systémové okno, do kterého bude probíhat veškeré vykreslování, nebo aby pro vykreslování používal určené specifické (pro vložení renderovacího okna do formuláře operačního systému), vybraný renderer však musí tuto vlastnost podporovat. (Poznámka: všechny tyto možnosti se definují ve struktuře sviewparameters). Správa scény Seli3D obsahuje metody pro zjednodušené spravování hlavní scény, její nahrávání a ukládání z disku a na disk (LoadScene(char *filename) a SaveScene(char *filename)), nastavení časových parametrů (pro animace a objekty obsahující uživatelský kód měnící vlastnosti objektu v čase - TimeTick(double seconds) pro postupnou časovou změnu a SetTime(double seconds) pro přímé nastavení časové hodnoty) a kompletní vykreslení jednoho snímku scény (RenderScene()). Většina těchto funkcí v podstatě pouze zavolá odpovídající funkci objektu scény.) Získání odkazů na platné další třídy Prostřednictvím Seli3D může uživatel získat odkazy na další základní objekty konzoli (voláním GetConsole(), viz níže), scénu (GetScene()) a renderer (GetRenderer()) Pomocné třídy Pro základní vypisování informací a případně zjednodušené získání dat od uživatele koncového programu obsahuje Seli třídu konzole, definované třídou cseliconsole. Třída obsahuje několik různých metod pro výpis informací do textové konzole, zobrazování výstražných oken, dotazování uživatele a podobně.
27 25 Tento způsob byl použit místo normální textové konzole pro budoucí rozšíření a poskytuje vyšší funkcionalitu je tak možné například definovat grafickou uživatelskou konzoli, použitelnou i v případě, že se data zobrazují přes celou obrazovku. Používanou konzoli je možné změnit voláním SetConsole(cSeliConsole* newconsole), pokud je volána s parametrem NULL, vrátí se zpět na standardní systémovou. Další pomocnou třídou je CTimer, poskytující na platformě nezávislý časovač. Tato třída je stejně jako hlavní Seli3D typu singleton, musí se k ní tedy přistupovat prostřednictvím CTimer::Instance() Správci zásuvných modulů O zásuvné moduly se starají tři třídy, všechny typu singleton. Jsou jimi PluginManager, Extensions a ImageLoader. PluginManager je určen pro načítání zásuvných modulů v podobně zkompilovaných dynamických knihoven. Využívá se jak pro načítání informací o jednotlivých rendererech (dynamická knihovna s koncovkou srd), tak pro obecné moduly (dynamická knihovna s koncovkou spg). Pokud mají být moduly nahrány (v případě rendererů pouze registrovány pro další použití) automaticky, musí mít odpovídající koncovky, tento způsob je použit pro to, aby se správce nepokoušel automaticky načítat všechny dynamicky linkované knihovny v aktivním adresáři. Pochopitelně je možné přidávat moduly ručně v kódu přímou specifikací cesty a jména souboru. Více informací o používání a vytváření zásuvných modulů je uvedeno v níže, v kapitole 3.8 Zásuvné moduly. Poznámka: pro běžné aplikace není přímé používání této třídy nijak nutné, pro aktivaci rendereru stačí použít zkratkový příkaz v třídě Seli. Extensions je interní správce jednotlivých podporovaných typů zásuvných modulů v SELI3D. Uživateli je veřejně přístupný, protože právě v něm je možné
28 26 registrovat vlastní rozšíření, ať už ze standardizovaného zásuvného modulu, nebo uživatelského programu. Extensions v současné době podporuje registrování funkcí pro import a export scény (nebo její části), import a export bitmap a z hlediska běžného uživatele především pro import uživatelských typů uzlů při načítání ze souboru scény. Více informací o používání a vytváření zásuvných modulů je uvedeno v níže, v kapitole 3.8 Zásuvné moduly. Posledním správcem, určeným pouze pro interní používání, je správce ImageLoader, využívající jak registrovaná rozšíření, tak interní funkce (importované z open source knihovny SDL_Image) pro načítání a ukládání bitmap D matematika a geometrie Část 3Dmath obsahuje objekty pro základní práci s trojrozměrnou grafikou na nejnižší úrovni. Naprostá většina metod je definovaná jako inline, tedy se při kompilaci vkládá přímo do cílového kódu s ohledem na co nejvyšší rychlost zpracovávání. Je v ní definována třída Vector3, což je trojrozměrný vektor reálných čísel, základní prvek 3D dat. Třída obsahuje všechny potřebné matematické operátory a funkce pro základní geometrické výpočty. Dále je zde třída Quaternion, pro interní ukládání záznamu rotace geometrických prvků a Matrix4, což je matice 4x4 určená pro homogenní transformaci trojrozměrných vektorů. I tyto třídy obsahují všechny základní potřebné operátory a funkce pro práci s nimi. Část pro zpracování geometrie je poměrně rozsáhlá a definuje základní struktury a třídy potřebné pro reprezentaci a manipulaci se základními typy geometrických dat. Základním typem je zde struktura svertex, používaná pro záznam informací pro jednotlivé vertexy tedy pozici, barvu, normálu a texturovací souřadnice.
29 27 Všechny obecné geometrické objekty dědí ze základní abstraktní třídy Geometry. Ta definuje několik základních funkcí pro práci s geometrií, jako je výpočet vzdálenosti od pozice, jiného geometrického objektu a určení průsečíku s paprskem (polopřímkou), což je základní metoda při vybírání objektů ve scéně uživatelem. Důležitými jsou však konverzní metody. Každý geometrický upravuje virtuální metodu PreferredConversion(), která vrací typ nejzákladnějšího geometrického objektu (který dokáže renderer vykreslit), jakému dává geometrický objekt přednost pro konverzi. Tyto základní typy jsou seznam bodů (PointList3D), lomená čára (PolyLine3D), seznam čas (LineList3D), seznam trojúhelníků (TriMesh) a indexovaný seznam trojúhelníků (IndexedMesh). Konverze se pak provádí použitím metod ToPointList(),ToPolyLine(), ToLineList(), ToTriMesh() a ToIndexedMesh(). Metody umožňují jako nepovinný parametr použít určení kvality a maximální počet vertexů, které má výsledný objekt mít, což je určeno pro parametrické objekty (například koule). Každý přidaný uživatelský typ geometrie musí podporovat konverzi alespoň do jednoho typu základního objektu, jinak nebude možné jeho vykreslení. Dále by měl také implementovat vlastní varianty virtuálních metod pro určení průsečíku a vzdálenosti. V Seli3D jsou pak dále definovány tyto standardní geometrické objekty: - Point3D obecný jediný bod. - PointList3D seznam bodů. - Line3D obecná přímka. - Ray3D paprsek, neboli polopřímka s počátečním bodem - LineSegment3D úsečka tvořená dvěma body - PolyLine3D lomená čára o libovolném počtu bodů - LineList3D seznam úseček
30 28 - Surface3D obecně objekt s povrchem - Triangle3D trojúhelník - Quad3D čtyřúhelník - TriMesh seznam trojúhelníků - IndexedMesh indexovaný seznam trojúhelníků (seznam vertexů, doplněný seznamem indexů těchto vertexů, které tvoří jednotlivé trojúhelníky) - Volumetric3D obecný geometrický objekt s objemem - Sphere3D - koule - Box3D hranol se stěnami paralelně s osami souřadnicového systému 3.5 MATERIÁLY A TEXTURY Základními prvky pro definici materiálů jsou barvy a textury. Pro definici barvy je vytvořena struktura PixelColor, obsahující definici barvy v maximální možné běžně používané kvalitě, tedy po osmi bitech pro barevné složky R, G a B, a dále doplňkovou informaci o průhlednosti (alfa), používané v průhledných texturách. Základní typ textury definuje třída ctexture. Primárně je určena pro záznam statické 2D bitmapy, ale je navržená tak, aby z ní bylo možné vytvořit děděním texturu trojrozměrnou, časově proměnlivou (například video záznam), případně i parametrickou. Samotný materiál definovaný třídou cmaterial přiřazovaný k jednotlivým objektům pak vychází z Phongova nasvětlovacího modelu definuje tedy základní barevné složky pro ambientní světlo (rozptýlené všudypřítomné ), difúzní (základní matná složka), spekulární (lesklá složka) a emisivní (což je barva světla, které objekt zdánlivě vydává sám o sobě). Tyto základní informace jsou doplněné indexem barevné textury, která se má na objekt aplikovat. Ačkoli aktuální implementace rendereru podporuje pouze tento základní typ materiálu, třída je upravena tak, aby mohla udržovat informace i pro rozšířený základní materiál (umožňující používání sekundární barevné textury a samostatných textur pro ambientní, spekulární a emisivní složku a také normálmapu, simulující
31 29 nerovnosti povrchu) pro příští verzi rendereru. Kromě těchto dvou připravených typů materiálů existuje i základní definice speciálního uživatelského materiálu, kterou však specifikace knihovny zatím neumí, ale počítá se s ní pro další rozšíření. 3.6 SCÉNA A UZLY V NÍ Základem hierarchického stromu scény je třída cnode. Každý objekt typu cnode může mít libovolný počet potomků, na které odkazuje. Kromě základních operací pro správu potomků (jejich přidávání, odstraňování, procházení a prohledávání) obsahuje také základní informace o uzlu, veřejné metody pro nastavování základních parametrů uzlu, virtuální metody pro časové změny, uložení do souboru scény, aktualizace objektů a podobně. Nejdůležitějším a základním typem odvozené třídy je pak cnode3d. Jde o uzel, který má danou geometrickou orientaci v prostoru, tedy vlastní souřadnicový systém, který se od hlavního liší o posun, rotaci a změnu měřítka. cnode3d implementuje různé pomocné funkce pro změnu orientace a pozice uzlu a jeho potomků, a metody pro aktualizaci transformace uzlu, využívané rendererem. Z cnode3d pak dědí prakticky všechny základní grafické objekty, především cnodegeometric, což je uzel, obsahující obecná geometrická data typu Geometry. Pro každý další standardně definovaný geometrický objekt z něj dědí specifické uzly, například cnodepointlist nebo cnodetrimesh. Ty však ve většině případů pouze modifikují funkci SaveToXML, používanou při zápisu scény do souboru (aby byly do scény správně uloženy i parametrické, ne pouze základní typy geometrických objektů). Z cnode3d také dědí třída clight3d, představující zdroj světla ve scéně (podporovány jsou čtyři základní typy světel ambientní, směrové přicházející z nekonečné vzdálenosti, bodové zářící všemi směry a kuželové světlo, simulující běžný zdroj světla s definovaným světelným kuželem. Světlo může být doplněno dalšími nepovinnými informacemi, jako je kupříkladu definice oblasti, ve které je platné, prostřednictvím objemového objektu Volumetric3D.
32 30 Dalším základním typem objektu je ccamera, dědící z cnode3d, představující reprezentaci kamery, použitelné pro prohlížení scény, která má navíc metody pro získání transformací (projekční i světové) scény na 2D obraz. Sadu základních uzlů pak doplňují animace uložené ve formě zaznamenaných klíčových snímků pro různé časy (obsahující změny transformace objektu) v uzly typu cnodeanimation, a neznámý typ uzlu cnodeunknown. Neznámý uzel je používán pro uchování neznámých objektů nalezených v souboru scény, pro které není definována žádná extenze, aby se tato uživatelská data neztratila (například při otevření a uložení uživatelské scény ve standardním editoru). Aktuální hlavní scéna, třída SceneManager, dědí přímo z cnode a doplňuje funkčnost o několik metod specifických pro hlavní scénu především ukládání a načítání ze standardního typu souboru scény. 3.7 RENDERER Základní třídou pro vykreslování je třída crenderer, nebo přesněji řečeno třída z ní dědící, samotný crenderer představuje primárně rozhraní, přes které se používá volání konkrétního API, a implementuje správu objektů vyšší úrovně za pomocí tříd cgeometrymanager (správce geometrických dat), cmaterialmanager (správce materiálů), ctexturemanager (správce textur) a clightsmanager (správce světel). I tyto třídy je nutné pro konkrétní aplikaci podědit a implementovat v nich konkrétní na použitém API závislé funkce, k jejich instancím může uživatelský kód přistupovat voláním odpovídajících funkcí rendereru, (GetLightsMan() a podobně). Pro nejjednodušší aplikace není třeba používat přímá volání rendereru vůbec a veškeré vykreslování provádět voláním SceneManager::RenderScene(). Pro specifické případy však crenderer poskytuje uživateli sadu funkcí pro různé změny nastavení, úpravy, ruční řízení vykreslování i přímé vykreslování základních primitiv a 2D kreslících funkcí na obrazovky.
33 Základní funkce Mezi základní funkce patří inicializace (int Init(sViewParameters& parameter)), kde je parametrem struktura obsahující základní inicializační informace, pokud není uvedena, použije se výchozí nastavení, uzavření a vyčištění všech dat specifických pro renderer (pro změnu používaného ovladače, void Dispose()), a správa okna rendereru je možné měnit titulek okna (pokud je používáno samostatné a ne vlepení rendereru do už připraveného okna), určovat velikost a nastavovat uživatelské funkce, které se volají při změně rozlišení okna. Pro ruční řízení vykreslovacího procesu (bez použití automatického vykreslení prostřednictvím správce scény) je velmi důležitá dvojice metod StartFrame() a EndFrame(). První z nich připraví a zahájí vykreslovací proces (smaže obsah vykreslovacích bufferů), druhá proces ukončí a všechna data vykreslená do zobrazovacího bufferu vykreslí přímo na obrazovku (do okna). Veškerá přímá volání na vykreslování nízké i vysoké úrovně musí být provedena mezi těmito dvěma voláními. Uživatel může také metodou void SetRenderingCallback() nastavit vlastní funkce, které se mají zavolat těsně po zahájení snímku a těsně před jeho ukončením (zde je vhodné místo pro umístění kódu například pro vykreslování textů na obrazovku) Výhledová okna Renderer umožňuje definovat pro vykreslování více různých oken neboli viewportů, je tedy možné do jednoho obrazu najednou vykreslit pohled na scénu z několika různých pohledů najednou. Viewport definuje třída cviewport, která má určenou kameru, do níž se objekty vykreslují, a další parametry určující kvalitu vykreslování (je tedy možné mít v jednom okně pouze drátěný model a v druhém menším model v plné kvalitě). crenderer má od začátku nastavený Viewport s identifikačním číslem 0, který má nastavenou plnou kvalitu a vykreslování přes celý kontext okna, ale je možné přidat další funkcemi int AddViewPort
34 32 (cviewport& vp) a přepínat mezi nimi ChangeActiveViewPort(int id), která jako parametr používá identifikační číslo viewportu vrácené funkcí AddViewPort. Doporučený postup při používání většího množství viewportů je vytvořit pro každé okno jeden nový a viewport 0 nechat pro vykreslování přes celou obrazovku (například přes 2D funkce) Vykreslování vyšší úrovně Pro standardní způsob vykreslování je nejvhodnější využít volání RenderScene(cNode* scene), která projde danou scénu, u vykreslitelných objektů (označených vlajkou NODEFLAG_RENDERABLE) si vytvoří nebo zaktualizuje specifické renderovací objekty daného rendereru (voláním metody UpdateRendererObjects() definované v uzlu) a vykreslí je do aktivního viewportu. Použitý parametr nemusí být pouze přímo kořen scény (třída SceneManager), ale libovolně vytvořená hierarchie, která nemusí být součástí hlavní scény. V tomto případě je ale pak potřeba před změnou rendereru danou samostatnou hierarchii od vytvořených rendererovacích objektů vyčistit voláním metody CleanScene(cNode* scene) v rendereru, nebo ji smazat a vytvořit znovu Přímé vykreslování Pro nestandardní způsoby vykreslování a především 2D kreslící funkce renderer umožňuje i přímé ruční vykreslování (například metodou DrawGeometry(Geometry* object)), které je však vhodné pouze v případě, že se data neustále mění. U geometrických objektů je vhodnější vytvořit nový renderovací buffer metodou NewRenderBuffer(), naplnit ho hodnotami získanými vytvořením geometrie prostřednictvím GeometryManageru, a vykreslovat přímo ten D funkce Renderer poskytuje také základní sadu funkcí pro vykreslování 2D objektů přímo na obrazovku vykreslení bodu (DrawPoint), čáry(drawline),
35 33 obdélníku(drawrectangle, DrawFilledRectangle), textury nebo její části jako obdélníkovou výseč (DrawImage), a především text metodou DrawText. Podpora vykreslování textu je pouze základní, vycházející z bitmapového fontu. Renderer sám o sobě definuje výchozí font, je však možné vytvořit vlastní font z textury a definičního souboru fontu (určující bloky v textuře, která tvoří jednotlivá písmena). Poznámka: z rychlostních důvodů je vhodné před zahájením vykreslování 2D prvků přepnout renderer do vykreslování 2D kontextu metodou Set2DContext() a po skončení vykreslování ho vrátit do původního stavu metodou ReturnFrom2D() Správce geometrie Třída GeometryManager představuje abstrakci správy bufferů obsahujících vertexy a případné indexy geometrických objektů, je interně používána rendererem pro vytváření těchto objektů specificky podle používaného API. Její přímé využívání uživatelem není potřeba Správce světel Třída LightsManager poskytuje abstrakci správy světel (aktivních i neaktivních), používaných jako zdroje světla. Při běžném používání nemusí uživatel do správce světel zasahovat, všechna světla zařazená do vykreslované scény se zde přiřadí automaticky Správce textur Správce textur TextureManager poskytuje prostředky pro základní správu textur a jejich registrování uvnitř rendereru. Pro nejjednodušší používání uživatel plně vystačí s metodou int LoadTexture(const char* filename), která nahraje texturu z disku a vrátí její index. Pro ruční vytváření textur za běhu je možné vytvořit novou prázdnou texturu specifikované velikosti metodou CreateTexture(int width, int height) a naplnit její data prostřednictvím metod vráceného odkazu na novou texturu.
36 Správce materiálů Správa materiálů se provádí prostřednictvím třídy MaterialManager, umožňující vytvářet nové materiály a přidávat je do interní databáze. V současné době jsou podporovány pouze základní typy materiálů, tedy ve třídě cmaterial představující definici materiálu jsou platné pouze základní barevné hodnoty a index jedné platné textury. 3.8 SOUBOROVÝ FORMÁT Motivace pro vlastní formát Základní důvod pro vytvoření vlastního formátu je téměř stejný, jaký v dřívější době měla i většinu výrobců modelovacích a zobrazovacích programů nedostupnost vhodného standardního formátu, splňujícího všechny potřebné požadavky. Dnes už pro obecný záznam scénických dat několik otevřených formátů existuje, především COLLADA a X3D, ale tyto formáty sebou nesou další problém a tou je velká komplexnost formátu a jeho kompletní implementace by byla velmi náročná a v tomto případě i částečně zbytečná. Proto je pro daný cíl nejvhodnější definice vlastního formátu a problém přenášení dat se bude řešit pozdější případnou implementací rozšiřujících modulů Základní popis formátu Pro zápis dat v textovém formátu, zvláště objektových a řazených hierarchicky, jako je graf scény, je velmi vhodný standardizovaný formát XML (Extensible Mark Up Language), hojně používaný pro zápis nejrůznějších typů dat (včetně grafických, na XML jsou založeny formáty COLLADA i X3D a další). Formát jasně řeší většinu problémů datových dokumentů v textové formě, přímo podporuje stromovou strukturu zápisu a jsou dispozici parsovací knihovny prakticky pro všechna existující prostředí. Data se ve formátu XML specifikují pomocí
37 35 párových a nepárových značek, textu vloženému mezi ně, a přiřazování atributů značkám (prakticky stejně jako specializovaný formát HTML). Pro standardní příponu souboru byla zvolena přípona.sce (scéna, scene), která podle informací dostupných na internetu nekoliduje s žádným jiným veřejně běžněji používaným formátem. Ačkoli specifikace XML určuje, že jsou jména značek a atributů casesensitive, pro zjednodušení ručního zápisu dat formát scény rozdíly mezi malými a velkými písmeny ignoruje. Pro hodnoty atributů platí, že mohou být číselné, textové (například pro identifikátory) nebo typu boolean neboli logické pro označení hodnoty logická jedna je možné použít číslovku 1 nebo zápis true, pro hodnoty logická nula číslovku 0 nebo false. Pokud je některá značka párová, tedy se mohou vkládat data mezi značky, jde většinou o data textová, jako jsou popisy. Jedinou výjimku tvoří seznam indexů u indexovaného meshe, kde se používá pro úsporu seznam čísel oddělených čárkou. Veškerá data souboru jsou vložena mezi párové značky <SceneFile>, s nepovinným atributem version (tedy <SceneFile version = 1.0 >. Pokud není parametr verze vyplněn, předpokládá se verze 1.0 zápis verze slouží pro podporu případného dalšího rozšiřování formátu, jeho umístění přímo jako atribut základního bloku umožní rychlé detekování verze souboru. Uvnitř <SceneFile> je možné definovat čtyři typy bloků hlavičku, nastavení, materiály a samotné scény Hlavička Hlavička definovaná párovými značkami <Header> umožňuje definovat základní informace o souboru. Veškerá konkrétní data se zapisují mezi párové značky. Standardní specifikace počítá s těmito informacemi:
38 36 <Name> - jméno souboru <Description> - více slovný popis souboru (typ zaznamenaných dat a podobně). <Author> - autor souboru <CreationDate> - datum vytvoření souboru Ani hlavička, ani její jednotlivé parametry nejsou povinné. Uživatel si může klidně nadefinovat další vlastnosti podle libosti, ty budou při načítání ignorovány Nastavení Blok nastavení mezi párovými značkami <Settings> slouží pro uložení různého obecného nastavení, specifického pro aplikaci. Například editor si zde uchovává informace o aktuální vybrané kameře, nastaveném typu zobrazování (drátěný model / stínované plochy) a podobně Materiály Blok materiálů mezi párovými značkami <Materials> poskytuje prostor pro definici standardizovaných materiálů, používaných objekty ve scéně. Blok materiálů může obsahovat tři typy dat. <Library file = jméno souboru /> - Pomocí tohoto příkazu je možné provést import materiálů ze specifikovaného souboru, pro používání nějaké standardní knihovny materiálů. Následující bloky vyžadují zadání textového parametru id, který musí být pro daný typ objektů (tedy materiály, textury, scénické objekty) unikátní. Pokud se při načítání objeví blok bez platného identifikátoru nebo duplicitní, automaticky se vytvoří náhradní číselný identifikátor a uživatel je na tento fakt upozorněn hlášením v konzoli.
39 37 <Texture file = jméno souboru id = identifikace alpha = 1 > - Definice textury načítané z externího souboru v některém z podporovaných grafických formátů. Povinné jsou pouze parametry file a id. Parametr alfa určuje, zda má mít textura alfa kanál, což má smysl pouze pro případ, že je některá textura uložená ve formátu, který transparenci podporuje a soubor ji obsahuje, ale pro vykreslování ji použít z nějakého důvodu nechceme. <Material id = identifikace > - Značka pro definici materiálu. Z důvodu většího počtu parametrů se tyto pro přehlednost uvádí mezi párovými značkami materiálu. Je možné použít parametry: - <AmbientColor r= hodnota červené g = hodnota zelené b = hodnota zelené /> - definice ambientní barvy. Hodnoty barevné intenzity se udávají jako floatová hodnota v úrovni od 0 do 1. - <DiffuseColor r= hodnota červené g = hodnota zelené b = hodnota zelené /> - definice difúzní barvy. - <SpecularColor r= hodnota červené g = hodnota zelené b = hodnota zelené /> - definice spekulární barvy. - <EmissiveColor r= hodnota červené g = hodnota zelené b = hodnota zelené /> - definice emisivní barvy. - Parametr <DiffuseTexture id = id textury /> je možné k určení textury, která se má používat pro barvu předmětu prostřednictvím identifikátoru dříve zapsané textury. - Nepovinný blok <Description> umožňuje zapsat textový popis daného materiálu Scéna Blok dat scény se ukládá mezi párové značky <Scene>. Každý vložený blok by měl představovat některý z platných typů uzlů, ať už definovaných přímo v jádru knihovny, nebo uživatelem (neznámé typu jsou předávány na zpracování uživatelské aplikaci).
40 38 Každý platný uzel musí obsahovat atribut id, obsahující jeho unikátní identifikátor, podobně jako u materiálů. Duplicitní nebo chybící identifikátory budou automaticky doplněny číselnou hodnotou. Každý z definovaných uzlů, který mám mít vlastní geometrickou orientaci, by měl povinně obsahovat informace pro transformaci uzlu oproti systému světa, minimálně hodnotu <Position x= y= z= />, určující pozici, nepovinně pak <Rotation p= y= r= /> obsahující úhly ve stupních pro rotaci v systému Pitch-Yaw-Roll (náklon dolů/nahoru kolem osy y objektu, rotaci doleva/doprava kolem osy z objektu a natočení doleva / doprava kolem osy x objektu), případně ve formátu <Rotation q1= q2= q3= q4= /> představující jednotlivé složky rotačního quaternionu, a zvětšení <Scale x= y= z= /> podle jednotlivých os. Pokud je některý z bloků vynechán, předpokládá se nulový posun, rotace a zvětšení na úrovni 1. Další standardně použitelné bloky dat uvnitř uzlu jsou: - <Material id = /> - použitý materiál z předem definovaných, pokud není určen, použije se materiál předchozího uzlu v hierarchii, u objektů přímo ve scéně pak výchozí materiál (bílá barva pro ambientní i difúzní osvětlení). Poznámka, s výjimkou indexovaného meshe platí materiál vždy pro celý objekt. Pokud by měly objekt tvořit části s různými materiály, je třeba rozdělit ho na samostatné bloky. - <Description> - popis předmětu. - <Hidden all= /> - pokud je tato značka přítomná, bude objekt skryt (nebude se zobrazovat), což je vhodné pro objekty, které sice mají ve scéně reprezentaci, ale aplikace je používá pro jiné než zobrazovací účely (například jako zjednodušený model pro fyzikální simulaci). Pokud je nepovinný parametr all nastaven na true, nebudou se zobrazovat ani všechny uzly ležící v hierarchii pod tímto. - <Nodes> - do tohoto bloku se uvádí všechny další uzly, které stojí v hierarchii pod daným uzlem. Knihovna standardně definuje následující typy uzlů: <Node> - obecný hierarchický uzel pro vytváření složitější hierarchie.
41 39 <Point> - jeden jediný bod. Není potřeba zadávat další informace, pozice bodu se předpokládá v nule lokálního prostoru. <PointList> - seznam bodů. Jednotlivé body se definují příkazy <vertex x = y = z = />. Případně je možné definovat další parametry a to: barvu uvnitř značky parametry r, g, b a a, tedy <vertex x = y = z = r = g = b= />, normály bodů (u seznamu bodů jsou většinou zbytečné, ale stejný formát se používá i u dalších objektů) parametry nx, ny a nz a texturovací souřadnice parametry u, v, w. <Line> - úsečka, definuje se zadáním dvou vertexů stejnou definicí jako u seznamu bodů. <LineList> - seznam úseček, definuje se zadáváním série vertexů, vždy dva tvoří hraniční body. <PolyLine smoothing = > - vícebodová čára, definuje se zadáváním série vertexů, které tvoří jednotlivé body čáry. Pokud je nepovinný parametr smoothing nastaven na true, vykreslí se místo čáry křivka (splajna). <TriList> - seznam trojúhelníků, určený sadou vertexů, vždy tři tvoří jeden trojúhelník. Stejně jako u polygonu je vhodné definovat normály ať už přímo ve vertexech, nebo značkou <Normal x= y= z= /> před vertexy definujícími trojúhelník. <IndexedMesh> - indexovaný mesh. Kromě definice jednotlivých bodů tvořících mesh je nutné dodat i indexy, tvořící jednotlivé plochy. To se provádí uvedením značky <Indices id = material = > a uvedením seznamu indexů jednotlivých vertexů, tak jak byly zapsány v souboru po sobě. Atributy id a
42 40 material jsou v tomto případě nepovinné, ale hodí se pro objekty obsahující větší množství různých ploch s různými materiály. <Animation id = smoothed= > - uzel představující animaci jeho rodičovského uzlu v čase pomocí záznamu transformací pro jednotlivé časové úseky. Pokud je atribut smoothed pravdivý, bude se mezi jednotlivými body interpolovat po křivce. Jednotlivé časové úseky se uvnitř animace definují pomocí bloku <KeyFrame time= >, kde time je hodnota v sekundách a uvnitř bloku musí být uvedeny hodnoty transformace, tedy <Position>, <Rotation> a <Scale>. Pokud některý z nich není uvedený, předpokládá se žádná změna od předchozí hodnoty. <Light type = > - definice světla. Atribut type může být dir směrové světlo v nekonečnu, point bodové světlo, spot kuželové realistické světlo. Pomocí bloků <Ambient r= g= b= />, <Diffuse r= g= b= />, <Specular r= g= b= /> je možné definovat intenzitu pro jednotlivé složky světla. Podle typu světla je také nutné uvést potřebné parametry. Pro bodové světlo vystačí standardní pozice uzlu, pro směrové rotace, pro kuželové světlo je nutné přidat blok <SpotLight angle= />, kde atribut angle definuje úhel kuželu. <Camera> - definice základní kamery. Pozice a rotace kamery je určená standardními parametry <Position> a <Rotation>. <Box> - standardní hranol s osami souběžně s osami souřadnicového systému uzlu. Blok <Parameters x1= y1= z1= / x2= y2= z2= /> definuje minimální a maximální pozice hranolu, pokud není zadán, je vytvořena krychle s délkou hrany 1 s počátečním bodem v nule. <Sphere> - koule. Blok <Parameters r= /> definuje její poloměr, pokud není zadán, je poloměr 1.
43 41 Následující ilustrační ukázka představuje soubor scény, která obsahuje kouli osvětlenou červeným zdrojem světla.
44 42 <?xml version="1.0" encoding="utf-8"?> <SceneFile> <Header> <Name>Ukazkovy soubor</name> <Header> <Settings> </Settings> <Materials> <Material id = 1 > <AmbientColor r= 1.0 g = 1.0 b = 1.0 /> <DiffuseColor r= 1.0 g = 1.0 b = 1.0 /> <Description> Standardni bily material. </Description> </Material> </Materials> <Scene> <Node id= uzel > <Nodes> <Sphere id = koule > <Parameters r= 10 > <Position x= 1.0 y= 1.0 z= 1.0 /> <Material id = 1 /> </Sphere> <Light id = slunicko type= dir > <Rotation x= 45 y= 0 z= 0 /> <Ambient r= 0.1 g= 0.1 b= 0.1 /> <Diffuse r= 1.0 g= 0.0 b= 0.0 /> </Light> </Nodes> </Node> </Scene> </SceneFile>
45 ZÁSUVNÉ MODULY Zásuvné moduly pro SELI3D se vytváří jako dynamicky linkované knihovny, pro zjednodušení hledání by měly být pojmenovány s koncovou srd (pro renderovací modul) a spg (pro obecný modul), pak jsou nalezeny při inicializaci SELI automaticky. Aby byl modul správně načten, musí exportovat funkce, umožňující jeho identifikaci a použití. Renderovací modul Musí exportovat funkci bool SeliRendererInfo(RendererInfo*), která po zavolání naplní definovanou strukturu základními informacemi o rendereru a vrátí true, pokud je vše v pořádku. Dále musí exportovat funkci crenderer* SeliRendererInit(), která po zavolání vrátí odkaz na instanci objektu dědícího z abstraktního rendereru. Obecný modul Obecný modul musí exportovat bool SeliPluginInfo(PluginInfo*), která naplní definovanou strukturu informacemi o modulu, a především funkci bool SeliPluginInit(), která je volána při inicializaci modulu. V této funkci musí modul zavolat správce extenzí (Extensions) a dodat mu odkazy na instance jednotlivých rozšíření. Poznámka: je nutné, aby byla exportovaná jména přesně stejná, při běžném kompilování většinou dochází k tomu, že jsou ke jménům přidány další znaky. Jednoduchým způsobem, jak zajistit, aby byla daná funkce exportována správně, je předřadit její deklaraci klíčovým slovem extern "C" POUŽÍVÁNÍ KNIHOVNY Poznámka: Tato část uvádí pouze základní demonstraci, jak se knihovna Seli může používat v uživatelském programu, detailní popis je uvedený v elektronické příloze.
46 44 Pro použití Seli3D je nutné přidat do zdrojového kódu odkaz na hlavní hlavičkový soubor Seli3D. Všechny třídy a definice jsou obsaženy ve jmenném prostoru Seli, proto je vhodné aktivovat používání tohoto jmenného prostoru direktivou using namespace Seli; Nejjednodušší program, který nainicializuje Seli3D, aktivuje výchozí renderer (GLRenderer), načte určenou scénu a zobrazuje ji z výchozí kamery definované scény nebo z obecně výchozí kamery, dokud uživatel nestiskne klávesu, pak vypadá třeba takto: #include "../Seli3D/Seli3D.h" using namespace Seli; int main(int argc, char* argv[]) { if (Seli3D::Instance().Init()<1) return 0; if (Seli3D::Instance().SetRenderer(1)<1) return 0; if (Seli3D::Instance().InitRenderer()<1) return 0; if (Seli3D::Instance().LoadScene("scena.sce")) return 0; while (!Seli3D::Instance().GetConsole()->IsKeyPressed()) { Seli3D::Instance().TimeTick(); Seli3D::Instance().RenderScene(); } Seli3D::Instance().Close(); return 1; } 3.11 POUŽITÉ VÝVOJOVÉ PROSTŘEDÍ A CÍLOVÁ PLATFORMA Seli3D je napsáno v jazyce c++ s využitím prostředí Microsoft Visual Studio 2008 a prozatím funguje pouze na platformě Windows. Knihovna je však napsána tak, aby byl její převod na libovolné další prostředí co nejjednodušší, jelikož používá pouze naprosto nezbytné minimum kódu specifického pro platformu (například načítání DLL knihoven). Díky kompilování knihovny a modulů do formy DLL je možné využít ji z jakéhokoli programovacího jazyka, který umožňuje načítání
47 45 standardních DLL knihoven. Jedním z předpokládaných rozšíření do budoucna je i poskytnutí standardního navázání na platformu DOT.NET (ať už pro Microsoft DOT.NET, nebo otevřenou multiplatformní Mono.NET) EXTERNÍ ZÁVISLOSTI Kromě použití standardních c++ knihoven, STL (standard template library) a OpenGL pro renderer používá knihovna ještě několik dalších. Všechny tyto knihovny byly vybírány tak, aby byly multiplatformní (s ohledem na případnou přenosnost systému na jinou platformu než Windows) a jejich licence musí umožňovat jejich využití. V současné době používá Seli3D tyto knihovny: SDL (Simple Direct Media Library) pro základní zobrazovací funkce, nezávislé na operačním systému. SDL je distribuována s licencí LGPL a ve formě dynamicky linkované knihovny je tedy možné využít ji v jakémkoli projektu. SDL_Image pro načítání bitmapové grafiky. Knihovna SDL_Image je určená jako rozšíření knihovny SDL, stejně jako SDL je distribuovaná s licencí LGPL. TinyXML pro základní načítání a ukládání souborů ve formátu XML. TinyXML je distribuována s licencí zlib, která umožňuje prakticky libovolné využití. Seli3D obsahuje TinyXML zkompilovanou ve formě DLL knihovny MOŽNÁ ROZŠÍŘENÍ Navrhovaná knihovna je v mnoha ohledech značně minimalistická, ale poskytuje velký prostor k vylepšování a rozšiřování. První očividnou možností je doplnění standardní podpory dalších běžně využívaných geometrických primitiv, především pro případné načítání CAD souborů by bylo vhodné doplnit specifikaci a funkčnost o podporu NURBS ploch. Dále by bylo vhodné vytvořit podporu komplexnějších materiálů, než je aktuálně použitý zjednodušený model a doplnit standardní renderer tak, aby je dokázal zobrazovat. Samotný renderer by bylo vhodné doplnit o komplexnější sadu metod na
48 46 vykreslování 2D grafiky a především dodat podporu true-type fontů, pravděpodobně prostřednictvím některé open-source knihovny. Další vhodnou funkčností by bylo vytvoření importů a exportů pro nejpoužívanější grafické 3D formáty, ať už jejich přímou integrací do jádra, nebo vytvořením zásuvných modulů v podobě dynamicky linkovaných knihoven. Navržený a používaný interní formát souboru je sice pro většinu aplikací plně dostačující a je možné ho rozšiřovat pro uživatelské typy dat, ale pro komplexní projekty by bylo možná vhodné doplnit ho zapouzdřenou komprimovanou verzí, která by mohla obsahovat v jediném souboru i všechny používané textury, různé sady materiálů a modelů, vše zkomprimované do binární podoby, podobně jak je tomu u dnes používaných office formátů. Rozšířením se zřejmě potenciálně největší prospěšností by byla integrace jádra s nějakým vhodným skriptovacím jazykem, který by snadno umožnil rychlé modifikace a rozšířenou funkčnost jak v rámci záznamových souborů, tak především v jádru a editoru. Vhodným se jeví použití například programovacího jazyka LUA, vytvořeného na Pontifical University of Rio de Janeiro a dnes běžně používaného v mnoha různých komerčních i nekomerčních aplikací. LUA je určena jako embedded jazyk, je kompaktní, snadno připojitelná k jakémukoli projektu na bázi c/c++, je velmi rychlá a dá se použít prakticky k čemukoli. S použitím jazyka LUA by bylo extrémně snadné vytvoření plně programovatelného uživatelského prostředí s možností psát a modifikovat kód přímo za chodu editoru, obdobně jako to funguje například v programu MatLab. Velký prostor pro další rozšiřování představuje standardní editor a prohlížeč SELIVIEW, v současné verzi jde pouze o nejzákladnější nástroj. Kromě doplnění dalších modelovacích a editačních funkcí by bylo vhodné připravit ho na možnost přidávání uživatelských editačních modulů a funkcí, v případě použití skriptovacího jazyka a jeho navázání na editor by tak vznikl plnohodnotný program s velmi rozsáhlým použitím.
49 47 4. ZÁVĚR Knihovna SELI3D je sice minimalistická, ale i v současném stavu poskytuje dostatečný základ knihovny pro jednoduché 3D aplikace. Její potenciál je však především v dalším rozšíření základních funkcí a standardního editoru. Předpokládám, že na knihovně budu dále pracovat a rozvíjet ji, v další fázi vývoje bych se rád dostal do stavu, kdy bude knihovna a její editor plně a snadno použitelná jako náhrada běžně používaných modelovacích programů, a s pomocí zabudovaného skriptovacího systému kupříkladu k vytváření interaktivních 3D scén, simulací a prezentací.
50 48 5. LITERATURA [1] Žára J., Beneš B., Sochor J., Felkel P.: Moderní počítačová grafika, Computer Press, 1998, ISBN [2] Hlaváč V., Šonka M.: Počítačové vidění,grada, 1992, ISBN [3] Wright R.S. Jr., Lipchak B.: OpenGL SuperBible, Third Edition. Sams Publishing, 2004, 1200 stran. ISBN : [4] Hearn D., Baker M.P.: Computer Graphics, C version (2nd Edition). Prentice Hall, 1996, 652 stran. ISBN [5] Sanchez J., Canton M.P.: DirectX 3D Programming Bible. Hungry Minds, stran. ISBN [6] Dunn F., Parberry I.: 3D Math Primer for Graphics and Game Development. Wordware Publishing, stran. ISBN [7] ISO/IEC 19775:2004 X3D Abstract, 2005 [8] COLLADA Specifications, ( ) [9] Wikipedia, The Free Encyklopedia, ( ) [10] Matyskiewicz, J. Zobrazování 3D dat. Brno: FEKT VUT v Brně, 2007, 46 s.
Základy 3D modelování a animace v CGI systémech Cinema 4D C4D
EVROPSKÝ SOCIÁLNÍ FOND Základy 3D modelování a animace v CGI systémech Cinema 4D C4D PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Mgr. David Frýbert 2013 CGI systémy Computer - generated imagery - aplikace
Co je grafický akcelerátor
Co je grafický akcelerátor jednotka v osobním počítači či herní konzoli přebírá funkce hlavního procesoru pro grafické operace graphics renderer odlehčuje hlavnímu procesoru paralelní zpracování vybaven
Vektorové grafické formáty
Vektorové grafické formáty Semestrální práce na předmět KAPR Fakulta stavební ČVUT 28.5.2009 Vypracovali: Petr Vejvoda, Ivan Pleskač Obsah Co je to vektorová grafika Typy vektorových formátů Souborový
VY_32_INOVACE_INF.19. Inkscape, GIMP, Blender
VY_32_INOVACE_INF.19 Inkscape, GIMP, Blender Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Jiří Kalous Základní a mateřská škola Bělá nad Radbuzou, 2011 INKSCAPE Inkscape je open source
GIS Geografické informační systémy
GIS Geografické informační systémy Obsah přednášky Prostorové vektorové modely Špagetový model Topologický model Převody geometrií Vektorový model Reprezentuje reálný svět po jednotlivých složkách popisu
GIS Geografické informační systémy
GIS Geografické informační systémy Obsah přednášky Prostorové vektorové modely Špagetový model Topologický model Převody geometrií Vektorový model Reprezentuje reálný svět po jednotlivých složkách popisu
Úvod do počítačové grafiky
Úvod do počítačové grafiky elmag. záření s určitou vlnovou délkou dopadající na sítnici našeho oka vnímáme jako barvu v rámci viditelné části spektra je člověk schopen rozlišit přibližně 10 milionů barev
DATOVÉ FORMÁTY GRAFIKY, JEJICH SPECIFIKA A MOŽNOSTI VYUŽITÍ
DATOVÉ FORMÁTY GRAFIKY, JEJICH SPECIFIKA A MOŽNOSTI VYUŽITÍ UMT Tomáš Zajíc, David Svoboda Typy počítačové grafiky Rastrová Vektorová Rastrová grafika Pixely Rozlišení Barevná hloubka Monitor 72 PPI Tiskárna
Kde se používá počítačová grafika
POČÍTAČOVÁ GRAFIKA Kde se používá počítačová grafika Tiskoviny Reklama Média, televize, film Multimédia Internetové stránky 3D grafika Virtuální realita CAD / CAM projektování Hry Základní pojmy Rastrová
MBI - technologická realizace modelu
MBI - technologická realizace modelu 22.1.2015 MBI, Management byznys informatiky Snímek 1 Agenda Technická realizace portálu MBI. Cíle a principy technického řešení. 1.Obsah portálu - objekty v hierarchiích,
Hierarchický model. 1995-2013 Josef Pelikán CGG MFF UK Praha. pepca@cgg.mff.cuni.cz http://cgg.mff.cuni.cz/~pepca/ 1 / 16
Hierarchický model 1995-2013 Josef Pelikán CGG MFF UK Praha pepca@cgg.mff.cuni.cz http://cgg.mff.cuni.cz/~pepca/ 1 / 16 Hierarchie v 3D modelování kompozice zdola-nahoru složitější objekty se sestavují
Využití ICT techniky především v uměleckém vzdělávání. Akademie - VOŠ, Gymn. a SOŠUP Světlá nad Sázavou
Datum: 1. 12. 2013 Projekt: Registrační číslo: Číslo DUM: Škola: Jméno autora: Název sady: Název práce: Předmět: Ročník: Obor: Časová dotace: Vzdělávací cíl: Pomůcky: Využití ICT techniky především v uměleckém
Autodesk AutoCAD 2018
Novinky Autodesk AutoCAD 2018 www.graitec.cz www.cadnet.cz, helpdesk.graitec.cz, www.graitec.com Novinky Autodesk AutoCAD 2018 PDF dokument obsahuje přehled novinek produktu AutoCAD 2018. AutoCAD 2018
Návod k použití softwaru Solar Viewer 3D
Návod k použití softwaru Solar Viewer 3D Software byl vyvinut v rámci grantového projektu Technologie a systém určující fyzikální a prostorové charakteristiky pro ochranu a tvorbu životního prostředí a
IVT. Grafické formáty. 8. ročník
IVT Grafické formáty 8. ročník listopad, prosinec 2013 Autor: Mgr. Dana Kaprálová Zpracováno v rámci projektu Krok za krokem na ZŠ Želatovská ve 21. století registrační číslo projektu: CZ.1.07/1.4.00/21.3443
Adobe Photoshop 18. Ukládání dokumentu formáty
Adobe Photoshop 18. Ukládání dokumentu formáty www.isspolygr.cz Vytvořila: Bc. Blažena Kondelíková Vytvořila dne: 20. 11. 2012 Strana: 1/5 Škola Ročník 4. ročník (SOŠ, SOU) Název projektu Interaktivní
Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN
Škola: Gymnázium, Brno, Slovanské náměstí 7 Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN prostřednictvím ICT Číslo projektu: CZ.1.07/1.5.00/34.0940
Tvorba 3D výukových aplikací pomocí technologie
Tvorba 3D výukových aplikací pomocí technologie Microsoft Silverlight Martin Tribula, Martin Vavrek, Michal Otčenášek Abstrakt V dnešním moderním světě je virtuální realita považovaná za rozvíjející se
Počítačová grafika 2 (POGR2)
Počítačová grafika 2 (POGR2) Pavel Strachota FJFI ČVUT v Praze 19. února 2015 Kontakt Ing. Pavel Strachota, Ph.D. Katedra matematiky Trojanova 13, místnost 033a E-mail: pavel.strachota@fjfi.cvut.cz WWW:
Vývoj počítačové grafiky. Tomáš Pastuch Pavel Skrbek 15.3. 2010
Vývoj počítačové grafiky Tomáš Pastuch Pavel Skrbek 15.3. 2010 Počítačová grafika obor informatiky, který používá počítače k tvorbě umělých grafických objektů nebo pro úpravu již nasnímaných grafických
Specifikace projektu Ocerus
Specifikace projektu Ocerus Tým Vedoucí: Ondřej Sýkora (ondrasej@centrum.cz) Členové: Michal Čevora (macjariel@gmail.com) Lukáš Hermann (lukas.hermann@seznam.cz) Ondřej Mocný (hardwire@volny.cz) Tomáš
Zobrazování těles. problematika geometrického modelování. základní typy modelů. datové reprezentace modelů základní metody geometrického modelování
problematika geometrického modelování manifold, Eulerova rovnost základní typy modelů hranový model stěnový model objemový model datové reprezentace modelů základní metody geometrického modelování těleso
Úvod do problematiky. Význam počítačové grafiky. Trochu z historie. Využití počítačové grafiky
Přednáška 1 Úvod do problematiky Význam počítačové grafiky Obrovský přínos masovému rozšíření počítačů ovládání počítače vizualizace výsledků rozšíření možnosti využívání počítačů Bouřlivý rozvoj v oblasti
Úvod do problematiky. Význam počítačové grafiky. Trochu z historie. Využití počítačové grafiky
Přednáška 1 Úvod do problematiky Význam počítačové grafiky Obrovský přínos masovému rozšíření počítačů ovládání počítače vizualizace výsledků rozšíření možnosti využívání počítačů Bouřlivý rozvoj v oblasti
Matematika v programovacích
Matematika v programovacích jazycích Pavla Kabelíková am.vsb.cz/kabelikova pavla.kabelikova@vsb.cz Úvodní diskuze Otázky: Jaké programovací jazyky znáte? S jakými programovacími jazyky jste již pracovali?
RadioBase 3 Databázový subsystém pro správu dat vysílačů plošného pokrytí
Databázový subsystém pro správu dat vysílačů plošného pokrytí RadioBase je datový subsystém pro ukládání a správu dat vysílačů plošného pokrytí zejména pro služby analogové a digitální televize a rozhlasu.
Zdroj: http://www.root.cz/clanky/pravda-a-myty-o-gifu/
Zdroj: http://www.root.cz/clanky/pravda-a-myty-o-gifu/ Bitmapový formát (rastrový obrázek) Většina z používaných grafických formátů (JPEG, PNG, TGA, BMP) obsahuje popis rastrového obrázku jako celku ukládají
Webové stránky. 16. Obrázky na webových stránkách, optimalizace GIF. Datum vytvoření: 12. 1. 2013. str ánk y. Vytvořil: Petr Lerch. www.isspolygr.
Webové stránky 16. Vytvořil: Petr Lerch www.isspolygr.cz Datum vytvoření: 12. 1. 2013 Webové Strana: 1/6 Škola Ročník Název projektu Číslo projektu Číslo a název šablony Autor Tématická oblast Název DUM
9 Prostorová grafika a modelování těles
9 Prostorová grafika a modelování těles Studijní cíl Tento blok je věnován základům 3D grafiky. Jedná se především o vysvětlení principů vytváření modelů 3D objektů, jejich reprezentace v paměti počítače.
Rastrová grafika. Grafický objekt je zaznamenán jednotlivými souřadnicemi bodů v mřížce. pixel ( picture element ) s definovanou barvou
Rastrová grafika Grafický objekt je zaznamenán jednotlivými souřadnicemi bodů v mřížce. pixel ( picture element ) s definovanou barvou Kvalita je určena rozlišením mřížky a barevnou hloubkou (počet bitů
FORMÁTY UKLÁDÁNÍ OBRAZOVÝCH INFORMACÍ VÝMĚNA DAT MEZI CAD SYSTÉMY
FORMÁTY UKLÁDÁNÍ OBRAZOVÝCH INFORMACÍ VÝMĚNA DAT MEZI CAD SYSTÉMY FORMÁTY UKLÁDÁNÍ OBRAZOVÝCH INFORMACÍ VEKTOROVÁ GRAFIKA Obraz reprezentován pomocí geometrických objektů (body, přímky, křivky, polygony).
Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý
Uživatelský manuál Aplikace GraphViewer Vytvořil: Viktor Dlouhý Obsah 1. Obecně... 3 2. Co aplikace umí... 3 3. Struktura aplikace... 4 4. Mobilní verze aplikace... 5 5. Vytvoření projektu... 6 6. Části
2. přednáška z předmětu GIS1 Data a datové modely
2. přednáška z předmětu GIS1 Data a datové modely Vyučující: Ing. Jan Pacina, Ph.D. e-mail: jan.pacina@ujep.cz Pro přednášku byly použity texty a obrázky z www.gis.zcu.cz Předmět KMA/UGI, autor Ing. K.
TÉMATICKÝ OKRUH Softwarové inženýrství
TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 25. Otázka : Komponentní technologie - základní pojmy a principy, metody specifikace komponent. Obsah : 1. Základní pojmy 1.1 Komponenta Komponenta
Počítačová grafika. Studijní text. Karel Novotný
Počítačová grafika Studijní text Karel Novotný P 1 Počítačová grafika očítačová grafika je z technického hlediska obor informatiky 1, který používá počítače k tvorbě umělých grafických objektů a dále také
Počítačová grafika SZŠ A VOŠZ MERHAUTOVA 15, BRNO
Počítačová grafika SZŠ A VOŠZ MERHAUTOVA 15, BRNO 1 Základní dělení 3D grafika 2D grafika vektorová rastrová grafika 2/29 Vektorová grafika Jednotlivé objekty jsou tvořeny křivkami Využití: tvorba diagramů,
12 Metody snižování barevného prostoru
12 Metody snižování barevného prostoru Studijní cíl Tento blok je věnován základním metodám pro snižování barevného rozsahu pro rastrové obrázky. Postupně zde jsou vysvětleny důvody k použití těchto algoritmů
VYUŽITÍ POČÍTAČOVÉ GRAFIKY
POČÍTAČOVÁ GRAFIKA VYUŽITÍ POČÍTAČOVÉ GRAFIKY ÚPRAVA FOTOGRAFIÍ NAFOCENÉ FOTOGRAFIE Z DIGITÁLNÍHO FOTOAPARÁTU MŮŽEME NEJEN PROHLÍŽET, ALE TAKÉ UPRAVOVAT JAS KONTRAST BAREVNOST OŘÍZNUTÍ ODSTRANĚNÍ ČERVENÝCH
Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek
Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek = Velmi malé jádro = implementuje jen vybrané základní mechanismy: = virtuální paměť; = plánování vláken; = obsluha výjimek; = zasílání
Informatika Počítačová grafika Mgr. Jan Jílek (v.11/12) Počítačová grafika
Počítačová grafika - obor informatiky zabývající se zpracováním grafické informace (př. obrázky, videa, fotografie, informační plakáty, reklamy, konstrukční plány, návrhy, virtuální světy, hry aj.) První
Počítačová grafika 1 (POGR 1)
Počítačová grafika 1 (POGR 1) Pavel Strachota FJFI ČVUT v Praze 8. října 2015 Kontakt Ing. Pavel Strachota, Ph.D. Katedra matematiky Trojanova 13, místnost 033a E-mail: WWW: pavel.strachota@fjfi.cvut.cz
Jádrem systému je modul GSFrameWork, který je poskytovatelem zejména těchto služeb:
Technologie Marushka Základním konceptem technologie Marushka je použití jádra, které poskytuje přístup a jednotnou grafickou prezentaci geografických dat. Jádro je vyvíjeno na komponentním objektovém
IVT. Rastrová grafika. 8. ročník
IVT Rastrová grafika 8. ročník listopad, prosinec 2013 Autor: Mgr. Dana Kaprálová Zpracováno v rámci projektu Krok za krokem na ZŠ Želatovská ve 21. století registrační číslo projektu: CZ.1.07/1.4.00/21.3443
Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody
Obsah 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody 3) 4) Mantichora Mantichora je moderní aplikace, který
Typy geometrie v. Rhinu. Body
Typy geometrie v 16 Rhinu Rhino rozeznává pět základních typů geometrie: body (points), křivky (curves), plochy (surfaces) a spojené plochy (polysurfaces). Navíc jsou plochy nebo spojené plochy, které
Diplomová práce Prostředí pro programování pohybu manipulátorů
Diplomová práce Prostředí pro programování pohybu manipulátorů Štěpán Ulman 1 Úvod Motivace: Potřeba plánovače prostorové trajektorie pro výukové účely - TeachRobot Vstup: Zadávání geometrických a kinematických
PB001: Úvod do informačních technologíı
PB001: Úvod do informačních technologíı Luděk Matyska Fakulta informatiky Masarykovy univerzity podzim 2013 Luděk Matyska (FI MU) PB001: Úvod do informačních technologíı podzim 2013 1 / 29 Obsah přednášky
Reprezentace 3D modelu
Ing. Jan Buriánek (ČVUT FIT) Reprezentace 3D modelu BI-MGA, 2010, Přednáška 8 1/25 Reprezentace 3D modelu Ing. Jan Buriánek Katedra softwarového inženýrství Fakulta informačních technologií České vysoké
ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická. Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy
ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy Bc. Petr Pokorný Letní semestr 2009/2010 1 Obsah 1 Úvod... 3 2 Workflow... 3 3 Workflow
Fakulta informačních technologíı. IZG cvičení 6. - Zobrazování 3D scény a základy OpenGL 1 / 38
IZG cvičení 6. - Zobrazování 3D scény a základy OpenGL Tomáš Milet Ústav počítačové grafiky a multimédíı Fakulta informačních technologíı Vysoké učení technické Brno IZG cvičení 6. - Zobrazování 3D scény
Novinky v Solid Edge ST7
Novinky v Solid Edge ST7 Primitiva Nově lze vytvořit základní geometrii pomocí jednoho příkazu Funkce primitiv je dostupná pouze v synchronním prostředí Těleso vytvoříme ve dvou navazujících krocích, kde
11 Zobrazování objektů 3D grafiky
11 Zobrazování objektů 3D grafiky Studijní cíl Tento blok je věnován základním algoritmům zobrazení 3D grafiky. Postupně budou probrány základní metody projekce kolmé promítání, rovnoběžné promítání a
7. Geografické informační systémy.
7. Geografické informační systémy. 154GEY2 Geodézie 2 7.1 Definice 7.2 Komponenty GIS 7.3 Možnosti GIS 7.4 Datové modely GIS 7.5 Přístup k prostorovým datům 7.6 Topologie 7.7 Vektorové datové modely 7.8
Zobrazte si svazy a uspořádané množiny! Jan Outrata
LatVis Zobrazte si svazy a uspořádané množiny! Jan Outrata Motivace potřeba visualizovat matematické (algebraické) struktury rychle, přehledně a automaticky počítačovými prostředky ruční kreslení je zdlouhavé
Ing. Jan Buriánek. Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Jan Buriánek, 2010
Ing. Jan Buriánek (ČVUT FIT) Reprezentace bodu a zobrazení BI-MGA, 2010, Přednáška 2 1/33 Ing. Jan Buriánek Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické
GIS Geografické informační systémy
GIS Geografické informační systémy Obsah přednášky Prostorové vektorové modely Špagetový model Topologický model Vektorový model Reprezentuje reálný svět po jednotlivých složkách popisu geoprvků. Geometrická
Implementace systémů HIPS: historie a současnost. Martin Dráb
Implementace systémů HIPS: historie a současnost Martin Dráb martin.drab@secit.sk HIPS: základní definice Majoritně používané operační systémy disponují bezpečnostními modely, které dovolují jednotlivým
III/ 2 Inovace a zkvalitnění výuky prostřednictvím ICT
Metodický list k didaktickému materiálu Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět
1 Strukturované programování
Projekt OP VK Inovace studijních oborů zajišťovaných katedrami PřF UHK Registrační číslo: CZ.1.07/2.2.00/28.0118 1 Cíl Seznámení s principy strukturovaného programování, s blokovou strukturou programů,
Identifikátor materiálu: ICT-1-20
Identifikátor materiálu: ICT-1-20 Předmět Informační a komunikační technologie Téma materiálu Kancelářské balíky a grafické editory Autor Ing. Bohuslav Nepovím Anotace Student si procvičí / osvojí programové
Novinky. Autodesk Vault helpdesk.graitec.cz,
Novinky Autodesk Vault 2018 www.graitec.cz www.cadnet.cz, helpdesk.graitec.cz, www.graitec.com Novinky Autodesk Vault 2018 PDF dokument obsahuje přehled novinek produktu Autodesk Vault 2018. Obsah: Úvod...
Controlweb. Úvod. Specifikace systému
Controlweb Úvod ControlWeb je aplikace pro řízení a indikaci v průmyslu v reálném čase. Mezi jeho základní funkce patří ovládání různých veličin spojitých, binárních nebo textových a zobrazování stavu
Multimediální systémy. 07 Animace
Multimediální systémy 07 Animace Michal Kačmařík Institut geoinformatiky, VŠB-TUO Osnova přednášky Animace historie, současnost Formáty, přístupy Sprite animace Warping, morphing Animace Vytváření iluze
Název DUM: VY_32_INOVACE_2B_9_Software_-_základní_programové_vybavení_počítače
Název školy: Základní škola a Mateřská škola Žalany Číslo projektu: CZ. 1.07/1.4.00/21.3210 Téma sady: Informatika pro sedmý až osmý ročník Název DUM: VY_32_INOVACE_2B_9_Software_-_základní_programové_vybavení_počítače
Bridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
Mapový server Marushka. Technický profil
Technický profil Úvodní informace Mapový aplikační server Marushka představuje novou generaci prostředků pro publikaci a využívání dat GIS v prostředí Internetu a intranetu. Je postaven na komponentové
Vzdělávací obsah vyučovacího předmětu
V.9.3. Vzdělávací obsah vyučovacího předmětu Vzdělávací oblast: Inormatika a informační a komunikační technologie Vyučovací předmět: Informatika Ročník: 1. ročník + kvinta chápe a používá základní termíny
13 Barvy a úpravy rastrového
13 Barvy a úpravy rastrového Studijní cíl Tento blok je věnován základním metodám pro úpravu rastrového obrazu, jako je např. otočení, horizontální a vertikální překlopení. Dále budo vysvětleny různé metody
PRODUKTY. Tovek Tools
jsou desktopovou aplikací určenou k vyhledávání informací, tvorbě různých typů analýz a vytváření přehledů a rešerší. Jsou vhodné pro práci i s velkým objemem textových dat z různorodých informačních zdrojů.
Novinky AutoCAD LT 2017
Novinky AutoCAD LT 2017 www.graitec.cz www.cadnet.cz, helpdesk.graitec.cz, www.graitec.com Novinky AutoCAD LT 2017 PDF dokument obsahuje přehled novinek produktu AutoCAD LT 2017. Obsah: 1. Autodesk aplikace...
Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U
Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U P R O G R A M O V É V Y B A V E N Í Studijní obor: 18-20-M/01 Informační technologie Školní
zdroj světla). Z metod transformace obrázku uvedeme warping a morfing, které se
Kapitola 3 Úpravy obrazu V následující kapitole se seznámíme se základními typy úpravy obrazu. První z nich je transformace barev pro výstupní zařízení, dále práce s barvami a expozicí pomocí histogramu
Animace a geoprostor. První etapa: Animace 2. přednáško-cvičení. Jaromír Landa. jaromir.landa@mendelu.cz Ústav informatiky PEF MENDELU v Brně
Animace a geoprostor První etapa: Animace 2. přednáško-cvičení Jaromír Landa jaromir.landa@mendelu.cz Ústav informatiky PEF MENDELU v Brně Náplň přednáško-cvičení - Flamingo Prostředí Nekonečná rovina
Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Jarkovský, L. Dušek, M. Cvanová. 5. Statistica
Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Jarkovský, L. Dušek, M. Cvanová 5. Statistica StatSoft, Inc., http://www.statsoft.com, http://www.statsoft.cz. Verze pro Mac i PC, dostupná
Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech."
Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech." Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Na
Podpora skriptování v Audacity
Specifikace softwarového díla & Časový plán implementace pro Podpora skriptování v Audacity Audacity je oblíběný editor zvuku, který ovšem v současné době postrádá možnost automatizovaného vykonávání skriptů.
Rastrová reprezentace
Rastrová reprezentace Zaměřuje se na lokalitu jako na celek Používá se pro reprezentaci jevů, které plošně pokrývají celou oblast, případně se i spojitě mění. Používá se i pro rasterizované vektorové vrstvy,
UNIVERZITA PARDUBICE Fakulta elektrotechniky a informatiky Katedra softwarových technologií
UNIVERZITA PARDUBICE Fakulta elektrotechniky a informatiky Katedra softwarových technologií Softwarový nástroj pro tvorbu a správu genealogických dat Manuál pro programátory Bc. František Hlaváček Součást
KAPITOLA 1 - ZÁKLADNÍ POJMY INFORMAČNÍCH A KOMUNIKAČNÍCH TECHNOLOGIÍ
KAPITOLA 1 - ZÁKLADNÍ POJMY INFORMAČNÍCH A KOMUNIKAČNÍCH TECHNOLOGIÍ KLÍČOVÉ POJMY technické vybavení počítače uchování dat vstupní a výstupní zařízení, paměti, data v počítači počítačové sítě sociální
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY 3D SIMULAČNÍ TOOLBOX 3D SIMULATION TOOLBOX
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION
BALISTICKÝ MĚŘICÍ SYSTÉM
BALISTICKÝ MĚŘICÍ SYSTÉM UŽIVATELSKÁ PŘÍRUČKA Verze 2.3 2007 OBSAH 1. ÚVOD... 5 2. HLAVNÍ OKNO... 6 3. MENU... 7 3.1 Soubor... 7 3.2 Měření...11 3.3 Zařízení...16 3.4 Graf...17 3.5 Pohled...17 1. ÚVOD
Počítačová grafika RHINOCEROS
Počítačová grafika RHINOCEROS Ing. Zuzana Benáková Základní otázkou grafických programů je způsob zobrazení určitého tvaru. Existují dva základní způsoby prezentace 3D modelů v počítači. První využívá
Programátorská dokumentace
Programátorská dokumentace Požadavky Cílem tohoto programu bylo představit barevné systémy, zejména převody mezi nejpoužívanějšími z nich. Zároveň bylo úkolem naprogramovat jejich demonstraci. Pro realizaci
5.15 INFORMATIKA A VÝPOČETNÍ TECHNIKA
5.15 INFORMATIKA A VÝPOČETNÍ TECHNIKA 5. 15. 1 Charakteristika předmětu A. Obsahové vymezení: IVT se na naší škole vyučuje od tercie, kdy je cílem zvládnutí základů hardwaru, softwaru a operačního systému,
Datové formáty grafiky, jejich specifika a možnosti využití. L u b o š T o m e š e k U M T M a n a ž e r s k á i n f o r m a t i k a 2015/ 16
Datové formáty grafiky, jejich specifika a možnosti využití L u b o š T o m e š e k U M T M a n a ž e r s k á i n f o r m a t i k a 2015/ 16 Plán prezentace N A C O S E M Ů Ž E T E T Ě Š I T??? Úvodní
Novinky. Autodesk Vault helpdesk.graitec.cz,
Novinky Autodesk Vault 2017 www.graitec.cz www.cadnet.cz, helpdesk.graitec.cz, www.graitec.com Novinky Autodesk Vault 2017 PDF dokument obsahuje přehled novinek produktu Autodesk Vault 2017. Obsah: 1.
WR Reality. Web Revolution. Uživatelský manuál administračního rozhraní
WR Reality Web Revolution Uživatelský manuál administračního rozhraní Web Revolution s. r. o. 2010 WR Reality Administrace uživatelský manuál Praktický průvodce administrací webové aplikace WR Reality
Reprezentace bodu, zobrazení
Reprezentace bodu, zobrazení Ing. Jan Buriánek VOŠ a SŠSE P9 Jan.Burianek@gmail.com Obsah Témata Základní dělení grafických elementů Rastrový vs. vektorový obraz Rozlišení Interpolace Aliasing, moiré Zdroje
Produktové Dokumenty (Datum 28.11.2014) Srovnání verzí: pcon.planner 7.0 Rozdíly mezi verzemi Standard-, ME a PRO
Produktové Dokumenty (Datum 28.11.2014) Srovnání verzí: pcon.planner 7.0 Rozdíly mezi verzemi Standard-, ME a PRO Základní formáty STD ME PRO Nahrávání a ukládání souborů DWG a DWT Převod a podpora starších
6 Objektově-orientovaný vývoj programového vybavení
6 Objektově-orientovaný vývoj programového vybavení 6.1 Co značí objektově-orientovaný - organizace SW jako kolekce diskrétních objektů, které zahrnují jak data tak chování objekt: OMG: Objekt je věc (thing).
VY_32_INOVACE_INF4_12. Počítačová grafika. Úvod
VY_32_INOVACE_INF4_12 Počítačová grafika Úvod Základní rozdělení grafických formátů Rastrová grafika (bitmapová) Vektorová grafika Základním prvkem je bod (pixel). Vhodná pro zpracování digitální fotografie.
Obsah. Úvod do studia 11 Co byste měli předem znát 13. Úvod do obsluhy AutoCADu 23. Kapitola 1 11. Kapitola 1 23
Předmluva 9 Komu je tato kniha určena 11 Kapitola 1 11 Úvod do studia 11 Co byste měli předem znát 13 CAD technologie 13 Product Lifecycle Management 14 AutoCAD není jenom CAD, je to vývojová platforma
Stru ný obsah. Úvod do Microsoft.NET Kapitola 1: Vývoj her a ízený kód...15
Stru ný obsah Úvod...11 Úvod do Microsoft.NET Kapitola 1: Vývoj her a ízený kód...15 Základy grafiky, první hra Kapitola 2: Návrh první hry...31 Kapitola 3: Pochopení kostry aplikace DirectX...39 Kapitola
1.2 Operační systémy, aplikace
Informační a komunikační technologie 1.2 Operační systémy, aplikace Studijní obor: Sociální činnost Ročník: 1 Programy (Software - SW) V informatice se takto označují všechny samospustitelné soubory které
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Úlohy nad rastrovými daty Daniela
Zobrazování bannerů podporují pouze nově vytvořené šablony motivů vzhledu.
Bannerový systém ProEshop od verze 1.13 umožňuje zobrazování bannerů na popředí e-shopu. Bannerový systém je přístupný v administraci e-shopu v nabídce Vzhled, texty Bannerový systém v případě, že aktivní
Autodesk AutoCAD 2020
Novinky Autodesk AutoCAD 2020 www.graitec.cz www.cadnet.cz, helpdesk.graitec.cz, www.graitec.com PDF dokument obsahuje přehled novinek produktu AutoCAD 2020. Obsah: Úvod... 3 1. Zjednodušené vkládání bloků...
1. Dědičnost a polymorfismus
1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář
Základy vizualizace. Výpočetní metody
10 Základy vizualizace Reálným zobrazováním se zabývá samostatný obor nazvaný Vizualizace. Podstata většiny vizualizačních systémů vychází z jednoduché koncepce skupin objektů, které nazýváme Scéna. Základní