Obsah
1. Popis vlastností geometrických objektů vytvářených v rovině
2. Plošné objekty obsahující kruhové části
2.1 Uzel typu Arc2D
2.2 Uzel typu ArcClose2D
2.3 Uzel typu Circle2D
2.4 Uzel typu Disk2D
3. Ostatní plošné objekty
3.1 Uzel typu Polyline2D
3.2 Uzel typu Polypoint2D
3.3 Uzel typu Rectangle2D
3.4 Uzel typu TriangleSet2D
4. Základní geometrické objekty vytvářené v prostoru
4.1 Uzel typu Box
4.2 Uzel typu Cone
4.3 Uzel typu Cylinder
4.4 Uzel typu Sphere
5. Odkazy na další informační zdroje
6. Obsah následující části tohoto seriálu
1. Popis vlastností geometrických objektů vytvářených v rovině
V předchozí části tohoto seriálu jsme si řekli, že s pomocí uzlů ukládaných ve formátu X3D (podle syntaxe VRML, XML či binárně) je možné popsat jak plošné výkresy, tak i plně trojrozměrné a k tomu ještě interaktivní scény. Vraťme se na chvíli k plošným výkresům a ukažme si, jak lze zapisovat vlastnosti plošných geometrických objektů, tj. objektů ležících v rovině, kterou je možné posouvat či rotovat pomocí lineárních transformací rotace, posunu, změny měřítka a jejich kombinací. Každý plošný objekt je ve formátu X3D reprezentován pojmenovaným uzlem, jenž je umístěn, jak již víme z předchozí části tohoto seriálu, v uzlu typu Shape. Mezi základní plošné objekty patří:
Název uzlu | Význam |
---|---|
Arc2D | kruhový oblouk |
ArcClose2D | kruhová výseč |
Circle2D | kružnice (nevyplněná) |
Disk2D | kruh (vyplněný) nebo mezikruží |
Polyline2D | lomená čára (polyčára) |
Polypoint2D | seznam (množina) samostatných nepropojených bodů |
Rectangle2D | obdélník s hranami rovnoběžnými s lokálním souřadným systémem |
TriangleSet2D | množina plošných trojúhelníků |
Popis plošných objektů je rozdělen do dvou samostatných kapitol. Ve druhé kapitole jsou popsány ty objekty, které jsou tvořeny kruhovými částmi. Jedná se o kruhový oblouk, kruhovou výseč, kružnici, kruh a mezikruží. V kapitole třetí je uveden popis zbývajících plošných objektů, tj. lomené čáry, obdélníku, množiny trojúhelníků i množiny samostatných bodů.
2. Plošné objekty obsahující kruhové části
V této kapitole budou popsány ty plošné objekty, které se skládají z kruhových částí. Jedná se o kruhový oblouk (Arc2D), kruhovou výseč či kruhovou úseč (ArcClose2D), kružnici (Circle2D) a kruh či vyplněné mezikruží (Disk2D).
2.1 Uzel typu Arc2D
Kruhový oblouk je možné zapisovat v uzlu pojmenovaném Arc2D. Tento uzel může mít nastaveno několik atributů, které jsou vypsány v následující tabulce. Všechny dále uváděné datové typy byly popsány v předchozí části tohoto seriálu. U kruhového oblouku je možné zadat jeho poloměr a dva úhly – počáteční a koncový. Oblouk je omezen dvěma polopřímkami, z nichž jedna je natočena pod úhlem zadaným atributem startAngle a druhá má natočení rovné úhlu zadaného atributem endAngle. Měří se proti směru hodinových ručiček, na což je zapotřebí dávat pozor zejména při vytváření oblouku, jehož úhel má být větší než π. Střed oblouku vždy leží v počátku lokální souřadné soustavy.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
radius | SFFloat | (0, nekonečno) | 1 |
startAngle | SFFloat | (-2π 2π) | 0 |
endAngle | SFFloat | (-2π 2π) | π/2 |
Kruhový oblouk
2.2 Uzel typu ArcClose2D
Pomocí uzlu ArcClose2D je možné vytvářet kruhovou výseč nebo kruhovou úseč. Základní atributy tohoto uzlu jsou stejné jako u kruhového oblouku. Přibyl však atribut solid, kterým se specifikuje, zda se má objekt vyplnit či ne (na rozdíl od oblouku se totiž jedná o uzavřený obrazec) a atribut closureType, pomocí něhož je možné rozhodnout, jestli se vykreslí kruhová výseč (pie) nebo úseč (chord).
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
radius | SFFloat | (0, nekonečno) | 1 |
startAngle | SFFloat | (-2π 2π) | 0 |
endAngle | SFFloat | (-2π 2π) | π/2 |
solid | SFBool | TRUE/FALSE | FALSE |
closureType | SFString | „PIE“/„CHORD“ | „PIE“ |
Kruhová výseč
Kruhová úseč
2.3 Uzel typu Circle2D
Velmi jednoduchým uzlem je představována kružnice, u které je možné specifikovat pouze jeden geometrický atribut, jímž je poloměr. Střed kružnice vždy leží v počátku lokální souřadné soustavy, takže kružnicí je možné pohybovat pouze změnou transformační matice této soustavy. Kružnice je vždy kreslena pouze pomocí svého obrysu.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
radius | SFFloat | (0, nekonečno) | 1 |
Kružnice
2.4 Uzel typu Disk2D
Kruh či kruhové mezikruží je možné vykreslit pomocí uzlu typu Disk2D. V případě, že je atribut innerRadius nastavený na nulu a atribut solid na hodnotu TRUE, je vykreslen běžný vyplněný kruh. Zvětšováním hodnoty innerRadius nad nulu se postupně vytváří mezikruží. V případě, že jsou oba poloměry shodné, vykreslí se kružnice. Střed disku (kruhu či mezikruží) opět vždy leží v počátku lokální souřadné soustavy, takže kruhem je možné pohybovat pouze změnou transformační matice této soustavy.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
innerRadius | SFFloat | (0, nekonečno) | 0 |
outerRadius | SFFloat | (0, nekonečno) | 1 |
solid | SFBool | TRUE/FALSE | FALSE |
Mezikruží
3. Ostatní plošné objekty
V této kapitole jsou popsány ty plošné objekty, které neobsahují kruhové části. Jedná se o lomenou čáru (polyčáru), tj. uzel typu Polyline2D, dále o sadu samostatných, tj. nepropojených bodů (uzel typu Polypoint2D), osově orientovaný obdélník (uzel typu Rectangle2D) a sadu trojúhelníků ležících v ploše (uzel typu TriangleSet2D)).
3.1 Uzel typu Polyline2D
Pravděpodobně nejpoužívanějším plošným objektem je lomená čára neboli polyčára, která je ve formátu X3D reprezentovaná uzlem typu Polyline2D. Jediným atributem tohoto uzlu je atribut lineSegments, který obsahuje seznam souřadnic koncových bodů (vrcholů) lomené čáry. Počet spojnic je roven počtu vrcholů-1, protože lomená čára není uzavřeným objektem.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
lineSegments | MFVec2f | libovolný | prázdné pole |
Lomená čára
3.2 Uzel typu Polypoint2D
Pravděpodobně málo používaným objektem je množina bodů představovaná uzlem typu Polypoint2D. Jednotlivé body jsou zapsány jako záznamy v poli points (pozor, ve standardu je toto pole chybně pojmenováno). Počet vykreslených bodů odpovídá počtu záznamů.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
points | MFVec2f | libovolný | prázdné pole |
Množina samostatných bodů
3.3 Uzel typu Rectangle2D
Uzel typu Rectangle2D slouží pro vykreslení osově orientovaného obdélníka. Střed tohoto obrazce leží v počátku lokální souřadné soustavy, podobně jako tomu je u kružnice nebo mezikruží. Velikost obrazce je zadána pomocí atributu size, jehož implicitní hodnotou je dvojice (2, 2), tj. strany obdélníku jsou od počátku souřadné soustavy vzdáleny o jednu délkovou jednotku. Pokud by bylo zapotřebí obdélníkem natáčet (jak je ukázáno na obrázku), je nutné změnit transformační matici lokálního souřadného systému.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
size | SFVec2f | (0, nekonečno) | 2 2 |
solid | SFBool | TRUE/FALSE | FALSE |
Obdélník natočený pomocí změny lokální souřadné soustavy
3.4 Uzel typu TriangleSet2D
Poněkud zajímavým objektem, který má nahradit obecné vyplněné polygony, je množina trojúhelníků ležících v rovině, která může být zapsána pomocí uzlu typu TriangleSet2D. Kromě povolení či zákazu vyplňování trojúhelníků se zadávají i jejich vrcholy. Počet vrcholů by měl být dělitelný třemi. Pokud by tomu tak nebylo, byly by poslední jeden až dva vrcholy ignorovány. Proč však X3D neobsahuje v základní sadě objektů i obecné polygony? Pravděpodobně z toho důvodu, že dnešní grafické akcelerátory vykreslují pouze konvexní a k tomu planární objekty. U trojúhelníků je tato vlastnost zaručena vždy, takže rozklad obecného polygonu na sadu trojúhelníků je ponechán na exportních aplikacích a nikoli na prohlížečích formátu X3D.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
vertices | MFVec2f | libovolný | prázdné pole |
solid | SFBool | TRUE/FALSE | FALSE |
Množina trojúhelníků
4. Základní geometrické objekty vytvářené v prostoru
Pojďme nyní přejít od plošných výkresů k trojrozměrným scénám, ve kterých se vyskytují především „plnohodnotné“ trojrozměrné objekty. Nejjednodušší jsou základní geometrická tělesa, protože ke každému tělesu (například kouli, válci nebo kuželi) existuje specifický typ uzlu s několika málo parametry zapisovanými pomocí atributů tohoto uzlu. Je však samozřejmě možné vytvářet i složitější tělesa: buď pomocí obecných trojúhelníkových sítí, výškových polí (height fields) či šablonováním, nebo povrch těles modelovat s využitím populárních a často využívaných neuniformních racionálních B-spline ploch, neboli NURBS (Non-Uniform Rational B-splines/Surfaces).
4.1 Uzel typu Box
Jedním ze základních prostorových těles je kvádr, který je osově orientovaný vůči lokálnímu souřadnému systému, přičemž jeho střed leží v počátku souřadnic tohoto systému. Tak jako všechna prostorová tělesa, i kvádr může být pokrytý texturou, dokonce je možné na každé jeho stěně mít namapovánu odlišnou texturu. Jedinými geometrickými parametry kvádru jsou jeho rozměry, tj. šířka, výška a hloubka. Implicitně jsou všechny rozměry nastaveny na hodnotu 2, což znamená, že stěny válce jsou od počátku lokálního souřadného systému vzdáleny o jednu délkovou jednotku.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
size | SFVec3f | (0, nekonečno) | 2 2 2 |
solid | SFBool | TRUE/FALSE | FALSE |
4.2 Uzel typu Cone
Druhým typem tělesa, které je možné popsat pomocí zvlášť vyhrazeného uzlu, je kužel, jenž je opět orientovaný v rámci lokálního souřadného systému (jeho osa odpovídá souřadné ose y). Jedná se již o poněkud složitější těleso, které se musí popisovat více parametry. Jedná se o výšku kužele (height), poloměr jeho základny (bottomRadius) a určení, zda se má základna vykreslovat (bottom) a zda se má vykreslit plášť (side). Plášť je většinou rozdělen na menší plošky a teprve tyto plošky jsou poslány do grafického akcelerátoru – záleží však na konkrétní konfiguraci prohlížeče, stejně tak je možné použít i programový raytracing.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
bottomRadius | SFFloat | (0, nekonečno) | 1 |
height | SFFloat | (0, nekonečno) | 2 |
solid | SFBool | TRUE/FALSE | FALSE |
bottom | SFBool | TRUE/FALSE | TRUE |
side | SFBool | TRUE/FALSE | TRUE |
Kužel
4.3 Uzel typu Cylinder
Podobné parametry jako kužel má i těleso ve tvaru válce. Přibyl pouze jeden parametr nazvaný top, kterým je určeno, jestli se má vykreslit horní uzávěr válce (tj. jeho druhá základna), ostatní parametry zůstávají beze změny. Střed válce je umístěn ve středu lokální souřadné soustavy a osa válce je totožná s osou y.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
radius | SFFloat | (0, nekonečno) | 1 |
height | SFFloat | (0, nekonečno) | 2 |
solid | SFBool | TRUE/FALSE | FALSE |
top | SFBool | TRUE/FALSE | TRUE |
bottom | SFBool | TRUE/FALSE | TRUE |
side | SFBool | TRUE/FALSE | TRUE |
Válec
4.4 Uzel typu Sphere
Zatímco tělesa ve tvaru kužele, válce i kvádru musely být popsána pomocí většího množství geometrických parametrů, vystačíme si u koule pouze se zadáním jejího poloměru (atribut radius). Druhý geometrický parametr, tj. souřadnice jejího středu, je určen posunem lokálního souřadného systému oproti souřadnému systému globálnímu.
Název atributu | Datový typ | Rozsah | Implicitní hodnota |
---|---|---|---|
radius | SFFloat | (0, nekonečno) | 1 |
solid | SFBool | TRUE/FALSE | FALSE |
Těleso ve tvaru koule
5. Odkazy na další informační zdroje
- Foley, van Dam, Feiner and Hughes:
Computer Graphics Principles and Practice,
2nd Edition, Addison Wesley, Reading, MA, 1990. - Piegl, Les and Tiller, Wayne:
The NURBS Book, 2nd Edition,
Springer-Verlag (Berlin), 1997, ISBN: 3–540–61545–8. - ISO/IEC 14772–1:1997,
Information technology – Computer graphics and image processing – The Virtual reality modeling language (VRML) – Part 1: Functional specification and UTF-8 encoding. - ISO/IEC 19776,
Information technology – Computer graphics and image processing – Extensible 3D (X3D) encodings. - ISO/IEC 19776–1,
Part 1: Extensible Markup Language (XML) encoding - ISO/IEC 19776–2,
Part 2: Classic VRML encoding - ISO/IEC 19776–3, Part 3: Compressed binary encoding
6. Obsah následující části tohoto seriálu
V následující části seriálu o grafických formátech a metaformátech si ukážeme poněkud pokročilejší metody práce s trojrozměrnou scénou. Konkrétně se bude jednat o mapování textur na povrch trojrozměrných objektů, použití světelných zdrojů, aplikace mlhy či textury na pozadí vykreslované scény a především o práci s NURBS, tj. neuniformními racionálními B-spline plochami (Non-Uniform Rational B-Splines/Surfaces), které dnes tvoří standard při práci s parametrickými plochami prakticky ve všech vyspělých systémech typu CAD a CAM.
Část NURB plochy vybrané pomocí ořezové křivky (trimming curve)