Plošné i trojrozměrné objekty v X3D

7. 2. 2008
Doba čtení: 9 minut

Sdílet

V dnešní části našeho seriálu o grafických formátech a metaformátech se seznámíme se způsobem zápisu plošných i trojrozměrných objektů do scén ukládaných ve formátu X3D. Kromě základních 2D objektů si také ukážeme popis objektů trojrozměrných, tedy základních tvarů popsaných geometrií.

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
x3d31

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“
x3d32

Kruhová výseč

x3d33

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
x3d34

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
x3d35

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
x3d36

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
x3d37

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
x3d38

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
x3d39

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
x3d3a

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
x3d3b

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
x3d3c

Těleso ve tvaru koule

5. Odkazy na další informační zdroje

  1. Foley, van Dam, Feiner and Hughes:
    Computer Graphics Principles and Practice,
    2nd Edition, Addison Wesley, Reading, MA, 1990.
  2. Piegl, Les and Tiller, Wayne:
    The NURBS Book, 2nd Edition,
    Springer-Verlag (Berlin), 1997, ISBN: 3–540–61545–8.
  3. 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.
  4. ISO/IEC 19776,
    Information technology – Computer graphics and image processing – Extensible 3D (X3D) encodings.
  5. ISO/IEC 19776–1,
    Part 1: Extensible Markup Language (XML) encoding
  6. ISO/IEC 19776–2,
    Part 2: Classic VRML encoding
  7. ISO/IEC 19776–3, Part 3: Compressed binary encoding

ict ve školství 24

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.

x3d3d

Část NURB plochy vybrané pomocí ořezové křivky (trimming curve)

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.