XML + 3D = X3D

Pavel Tišnovský 24. 1. 2008

Dalším jazykem určeným pro popis prostorových scén, který si v seriálu o grafických formátech a metaformátech popíšeme, je jazyk nazvaný X3D (Extensible 3D). Jedná se o ideového zástupce již popsaného jazyka VRML (Virtual Reality Modeling Language), který původní ideu VRML v několika směrech rozšiřuje i zpřesňuje.

Obsah

1. XML + 3D = X3D (Extensible 3D)
2. Charakteristika formátu X3D
3. Profily X3D a rozšířené API
4. Rozdíly mezi VRML syntaxí a syntaxí založenou na XML
5. Trojrozměrná scéna popsaná pomocí VRML 97
6. Trojrozměrná scéna popsaná pomocí X3D (XML syntaxe)
7. Příklad složitější trojrozměrné scény
8. Literatura a odkazy na Internetu
9. Obsah následující části tohoto seriálu

1. XML + 3D = X3D (Extensible 3D)

V předchozích devíti částech tohoto seriálu jsme si poměrně podrobným způsobem popsali způsob ukládání trojrozměrných scén pomocí deklarativního jazyka VRML (Virtual Reality Modeling Language). Tento jazyk nabízí svým uživatelům na jednu stranu mnoho zajímavých možností, například jednotný způsob reprezentace celé trojrozměrné scény pomocí stromové struktury, systém senzorů, specifikace textur popsaných polem číselných hodnot, podporou animací atd.; na stranu druhou jsou v něm však obsaženy některé části, které nebyly řešeny tím nejvhodnějším způsobem. Týká se to například nemožnosti popisu plošných tvarů (2D shapes), podporu NURBS (Non-Uniform Rational B-Splines/Surfaces) bez nutnosti použití rozšiřujících modulů apod.

x3d_11

Logo deklarativního jazyka VRML

Z tohoto důvodu byl krátce po vydání specifikace VRML 97 představen nový formát určený pro popis plošných i prostorových scén, který byl nazván zkratkou X3D neboli celým jménem Extensible 3D. Slovo „extensible“ použité v plném názvu tohoto formátu prozrazuje, že se jedná o formát založený na dnes velmi populárním jazyku XML (Extensible Markup Language). Ve skutečnosti je možné X3D soubory ukládat ve dvou formátech: první je založen na „starém“ VRML 97, který má své kořeny v Open Inventoru, druhý způsob zápisu je založený na XML. V následujících několika částech seriálu se s tímto formátem, který se již začíná v 3D aplikacích prosazovat, budeme zabývat podrobněji.

x3d_1_2

Jedna z podob loga jazyka X3D

2. Charakteristika formátu X3D

Grafický formát X3D z velké části vychází z formátu VRML (ostatně proto je také někdy nazýván „VRML 3.0“), ovšem opravuje některé jeho nedostatky a především umožňuje – kromě původní syntaxe odvozené od Open Inventoru – použít i syntaxi zápisu založenou na XML. To s sebou nese celou řadu předností, především jednoduché zpracování celého dokumentu pomocí velkého množství knihoven a programových API pro práci s XML (SAX a DOM existující snad pro všechny významné programovací jazyky), možnost poloautomatické serializace a deserializace prostorové scény do X3D, relativně snadné převody mezi X3D a dalšími formáty apod.

Volba XML byla v tomto případě, podobně jako u dříve popsaného vektorového grafického formátu SVG (Scalable Vector Graphics) poměrně přirozená, protože trojrozměrné scény jsou i ve VRML 97 popsány stromovou strukturou, která má svůj jasný obraz ve struktuře XML dokumentu. Pro uživatele či programátory, kteří z různého důvodu preferují původní syntaxi VRML (například již mají napsané vstupní a výstupní rutiny), je tato možnost dále zachována, i když u nově vytvářených aplikací je většinou vhodnější se přidržet XML (osobně nejsem velkým příznivcem toho, když se XML používá například na jednoduché konfigurační soubory, ale v tomto případě je volba XML vhodná a přínosná; větší „ukecanost“ XML je daní za jednodušší zpracování).

x3d_1_3

Další (neoficiální) podoba loga jazyka X3D

3. Profily X3D a rozšířené API

Poměrně důležitou a přitom praktickou součástí X3D jsou takzvané profily. Zjednodušeně řečeno se jedná o to, že v některých případech není nutné či dokonce možné, aby nějaký prohlížeč implementoval celou normu X3D, ale pouze její určitou podmnožinu. Aby bylo zcela zřejmé, o jakou podmnožinu se jedná, měl by být na začátku každého dokumentu uloženého ve formátu X3D zapsán profil, který je vyžadován pro plnohodnotné prohlédnutí tohoto souboru. Například se dá předpokládat, že mobilní zařízení či jednoduché set-top boxy budou z paměťových i rychlostních hledisek implementovat pouze některé méně náročné profily (vypnutý výpočet osvětlení, snížená velikost textur atd.), zatímco aplikace určené pro výkonné osobní počítače a rychlé grafické karty by v ideálním případě měly či mohly podporovat profily všechny.

x3d_1_4

4. Rozdíly mezi VRML syntaxí a syntaxí založenou na XML

V předchozích kapitolách jsme si řekli, že zápis prostorových scén do souborů uložených ve formátu X3D je možné provádět ve dvou variantách (nebo chcete-li, syntaxích). Je podporována jak původní syntaxe VRML 97 založená na formátu Open Inventoru, tak i syntaxe jazyka XML, se všemi požadavky na well-formed dokumenty i validitu. Pro soubory X3D ukládané v XML variantě samozřejmě existuje příslušné XSLT, takže kontrola správnosti zápisu je snadná a je pro ni možno použít mnoho nástrojů, včetně šikovných rozšíření některých textových editorů. Rozdíl mezi oběma způsoby zápisu je sice na první pohled značný, z praktického hlediska jsou si však obě syntaxe rovnocenné, alespoň co se týče schopnosti uložit reprezentaci stejných scén, tj. stejného stromu, v němž jsou uloženy všechny uzly scény. Kupodivu ani velikosti souborů obsahujících tu samou scénu se příliš neliší, i když XML formát je považovaný za příliš „ukecaný“.

5. Trojrozměrná scéna popsaná pomocí VRML 97

Pro ilustraci rozdílů mezi oběma způsoby zápisu je uveden výpis části trojrozměrné scény, ve které je uložena specifikace jednoho tělesa ve tvaru válce, který má jasně zelený povrch. Nejprve si uvedeme zápis v syntaxi kompatibilní s VRML 97, kterou již známe z předchozích deseti částí tohoto seriálu:

Transform {
    children Shape {
        appearance Appearance {
            material Material {
                diffuseColor 0 1 0
            }
        }
        geometry {
            Cylinder {
                height 0.1
                radius 0.5
            }
        }
    }
} 

6. Trojrozměrná scéna popsaná pomocí X3D (XML syntaxe)

Při uložení toho stejného fragmentu celé trojrozměrné scény do formátu jazyka XML dostaneme kód vypsaný pod tímto odstavcem. Všimněte si, že je popsána zcela stejná stromová struktura jako v předchozím případě, přičemž hodnoty vlastností (barva, poloměr a výška válce) jsou převedeny na hodnoty atributů. Jak je u XML zvykem, je nutné každý uzel explicitně uzavřít názvem značky, před kterou je uveden znak lomítka. V případě značek neobsahujících žádné poduzly (atributy s hodnotami však značka samozřejmě obsahovat může) lze použít zkráceného způsobu zápisu s lomítkem umístěným ihned za název značky. Po přidání hlavičky souboru a kořenovéhu uzlu by bylo možné tento soubor načíst jakýmkoli XML editorem nebo filtrem (procesorem):

<Transform>
    <Shape>
        <Appearance>
            <Material diffuseColor="0 1 0"/>
        </Appearance>
        <Cylinder height="0.1" radius="0.5"/>
    </Shape>
</Transform> 

7. Příklad složitější trojrozměrné scény

V této kapitole si ukážeme zdrojový kód poněkud složitější trojrozměrné scény uložené ve formátu X3D, konkrétně s využitím XML syntaxe. Povšimněte si především toho, že se skutečně jedná o validní a well-formed XML soubor s (vyžadovaným) úvodním řádkem se specifikací verze XML a použitého kódování. Úvodní byty sekvence BOM – Byte Order Mark – je podle mých zkušeností vhodnější vynechat, protože s nimi mají některé XML parsery i textové editory problémy – jako první znaky v souboru očekávají znak „menší než“ následovaný otazníkem. Dále je uveden typ XML souboru včetně určení DTD, následovaný určením názvu profilu (Immersive) v kořenovém uzlu nazvaném <X3D>. Všechny ostatní uzly musí být uloženy právě v tomto uzlu. V hlavičce, tj. uzlu typu <head> jsou uloženy metainformace, které mohou být využity například indexovacími roboty k pozdějšímu vyhledání této scény podle zadaných kritérií.

Všechny geometrické objekty trojrozměrné scény i objekty reprezentující kameru či světelné zdroje jsou uloženy v uzlu nazvaném <Scene>. Pro seskupení objektů do větších skupin je možné použít buď uzel typu <Group> (pouhé seskupení pro účely další manipulace s objekty) nebo uzel typu <Transform> (seskupení se specifikací lineární transformace aplikované na všechny podřízené objekty). Při podrobnějším zkoumání obsahu souboru si můžete také všimnout toho, že geometrie těles, v našem případě koule a textového objektu, je zapsána formou atributů daného uzlu (<Sphere>, <Text>) a nikoli v poduzlu tak, jak jsme na to byli zvyklí ve VRML 97. Na příkladu poduzlu <ImageTexture> je také vidět, že je možné zadat i vícenásobné hodnoty (v tomto případě URL obrázků v pořadí jejich vyhledávání), podobně jako tomu bylo ve VRML 97 v případě polí.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd">
<X3D profile='Immersive' version='3.1' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.1.xsd'>
    <head>
        <meta content='HelloWorld.x3d'     name='title'/>
        <meta content='Simple X3D example' name='description'/>
        <meta content='30 October 2000'    name='created'/>
        <meta content='2 December 2007'    name='modified'/>
        <meta content='Don Brutzman'       name='creator'/>
        <meta content='license.html'       name='license'/>
        <meta content='http://www.web3d.org/x3d/content/examples/HelloWorld.x3d' name='identifier'/>
        <meta content='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit' name='generator'/>
    </head>
    <Scene>
        <!-- Example scene to illustrate X3D tags and attributes. -->
        <!-- seskupení uzlů pomocí uzlu typu Group -->
        <Group>
            <Viewpoint description="Hello world!" position="0 -1 7" centerOfRotation="0 -1 0"/>
                <Transform rotation='0 1 0 3'>
                    <!-- modrozelená koule, která může být pokrytá texturou (pokud je obrázek nalezen) -->
                    <Shape>
                        <!-- geometrie objektu je zapsána formou atributů -->
                        <Sphere radius='1'/>
                        <!-- uzel typu Appearance svým obsahem zcela odpovídá VRML 97  -->
                        <Appearance>
                            <Material diffuseColor='0 0.5 1'/>
                            <ImageTexture url='"earth-topo.png"
                                               "earth-topo-small.gif"
                                               "http://www.web3d.org/x3d/content/examples/Basic/earth-topo.png"
                                               "http://www.web3d.org/x3d/content/examples/Basic/earth-topo-small.gif"'/>
                        </Appearance>
                    </Shape>
                </Transform>
            <!-- transformace všech poduzlů uzlu typu Transform -->
            <Transform translation='0 -2 0'>
                <Shape>
                    <Text string='"Hello" "world!"' solid='false'>
                        <FontStyle justify='"MIDDLE" "MIDDLE"' />
                    </Text>
                    <!-- uzel typu Appearance svým obsahem zcela odpovídá VRML 97  -->
                    <Appearance>
                        <Material diffuseColor='0.1 0.5 1'/>
                    </Appearance>
                </Shape>
            </Transform>
        </Group>
    </Scene>
</X3D>

<!-- finito --> 

8. Literatura a odkazy na Internetu

  1. Dr. Clue's VRML reference V2.0
    (dokument ve formátu WinHelp)
  2. Gavin Bell, Anthony Parisi, Mark Pesce: The Virtual Reality Modeling Language, Version 1.0 Specification,
    Silicon Graphics Inc., Intervista Software
    26-MAY-95
  3. Graef, G.L.: „Graphics Format“,
    Graphics Format
  4. Sládeček Hynek a kolektiv: „1000 File Formats“,
    (freeware encyklopedie – hypertextový dokument ve formátu Microsoft Help File), 1997, 1998
  5. Žára J., Beneš B., Felkel P.: „Moderní počítačová grafika“,
    Computer Press, Praha, 1998, ISBN 80–7226–049–9
  6. Žára J., Limpouch A., Beneš B., Werner T.: „Počítačová grafika – principy a algoritmy“,
    Grada, 1992
  7. Web 3D Consortium,
    http://www.web3d­.org/
  8. X3D Specification,
    http://www.web3d­.org/x3d/speci­fications/
  9. X3D Wiki,
    http://www.web3d­.org/x3d/wiki/in­dex.php/Main_Pa­ge
  10. X3D Help,
    http://www.web3d­.org/x3d/conten­t/examples/hel­p.html
  11. X3D Tooltips,
    http://www.web3d­.org/x3d/conten­t/X3dTooltips­.html
  12. Extensible 3D: XML Meets VRML,
    http://www.xml­.com/pub/a/2003/08/06/x3­d.html
  13. Wikipedia: VRML,
    http://en.wiki­pedia.org/wiki/Vrml
  14. Wikipedia: Open Inventor,
    http://en.wiki­pedia.org/wiki/O­pen_Inventor
  15. Wikipedia: Web 3D Consortium,
    http://en.wiki­pedia.org/wiki/Web3D_Con­sortium
  16. Wikipedia: List of vector graphics markup languages,
    http://en.wiki­pedia.org/wiki/Lis­t_of_vector_grap­hics_markup_lan­guages
  17. Wikipedia: XML-based standards,
    http://en.wiki­pedia.org/wiki/Ca­tegory:XML-based_standards
  18. The Virtual Reality Modeling Language Specification,
    Version 2.0, ISO/IEC WD 14772
    http://graphcom­p.com/info/spec­s/sgi/vrml/spec/
  19. VRML 97 Specification,
    http://www.web3d­.org/x3d/conten­t/examples/Ba­sic/Vrml97Spe­cification/in­dex.html
  20. VRML Tutorial,
    http://www.lig­hthouse3d.com/vrml/tu­torial/
  21. Onyx Graphics VRML Development,
    http://onyxgrap­hics.com/VRML­.html
  22. Open InventorTM,
    http://oss.sgi­.com/projects/in­ventor/
  23. VRML (Virtual Reality Modeling Language) and X3D,
    http://xml.co­verpages.org/vrml-X3D.html
  24. Root.cz: Seriál Open Inventor,
    /serialy/open-inventor/
  25. Root.cz: Seriál Grafická knihovna OpenGL,
    /serialy/graficka-knihovna-opengl/

9. Obsah následující části tohoto seriálu

V další části seriálu o grafických formátech a metaformátech si ukážeme způsob popisu plošných (2D) tvarů i prostorových (3D) objektů vkládaných do scén, které jsou uloženy do formátu odpovídajícího specifikaci X3D. Uvidíme, že základní způsob popisu scén zůstává stejný, jako tomu bylo v případě VRML, tj. objekty jsou hierarchicky uspořádány do stromové struktury, přičemž každý objekt je specifikován svým tvarem (geometrií, geometry) a vlastnostmi povrchu (vzhledem, appearance).

Ohodnoťte jako ve škole:

Průměrná známka 2,95

Našli jste v článku chybu?
Zasílat nově přidané názory e-mailem
120na80.cz: 5 triků, jak zastavit krvácení po holení

5 triků, jak zastavit krvácení po holení

Podnikatel.cz: Miliony hodin nad hlášením k DPH. K vzteku

Miliony hodin nad hlášením k DPH. K vzteku

Lupa.cz: Jak EET vidí ajťák aneb Drahá vražda UX

Jak EET vidí ajťák aneb Drahá vražda UX

Vitalia.cz: Tři sta kilogramů tuňáka obsahovalo histamin

Tři sta kilogramů tuňáka obsahovalo histamin

120na80.cz: Tady se vaří padělané léky

Tady se vaří padělané léky

Podnikatel.cz: Různé podoby lahve Coca–Coly. Úchvatné

Různé podoby lahve Coca–Coly. Úchvatné

Lupa.cz: Válka e-shopů. Alza končí s Heurekou

Válka e-shopů. Alza končí s Heurekou

Vitalia.cz: Proč máme prasklý chléb nejraději?

Proč máme prasklý chléb nejraději?

Podnikatel.cz: Když už je sexy, tak ať taky funguje

Když už je sexy, tak ať taky funguje

Vitalia.cz: Mražené ryby z Makra byly falšované

Mražené ryby z Makra byly falšované

Podnikatel.cz: Alza radí e-shopům, jak opustit Heureku

Alza radí e-shopům, jak opustit Heureku

120na80.cz: Velký přehled: 7 očkování proti exotickým nemocem

Velký přehled: 7 očkování proti exotickým nemocem

Podnikatel.cz: Přechod z OSVČ na firmu? Totální šok!

Přechod z OSVČ na firmu? Totální šok!

Podnikatel.cz: Šizený guláš na pultě. Jako Lidl to nedělejte

Šizený guláš na pultě. Jako Lidl to nedělejte

Lupa.cz: Schváleno: Rockaway může převzít Heureku

Schváleno: Rockaway může převzít Heureku

DigiZone.cz: UPC umí televizi sedm dní nazpět

UPC umí televizi sedm dní nazpět

Podnikatel.cz: Myšlenky Henryho Forda. Berte je za své

Myšlenky Henryho Forda. Berte je za své

Vitalia.cz: 7 nemocí očí, které musíte léčit včas

7 nemocí očí, které musíte léčit včas

120na80.cz: Zjistěte, zda je vaše klíště infikované

Zjistěte, zda je vaše klíště infikované

Podnikatel.cz: Proměny stavebnice Seva. Znáte ji?

Proměny stavebnice Seva. Znáte ji?