Hlavní navigace

OpenGL a nadstavbová knihovna GLU (9)

21. 9. 2004
Doba čtení: 8 minut

Sdílet

Dnešním pokračováním seriálu o nadstavbové grafické knihovně OpenGL GLU zahajujeme část věnovanou popisu NURB křivek a ploch. Jedná se o velmi zajímavé a přitom poměrně rozsáhlé téma, proto mu bude věnováno hned několik dílů. S využitím funkcí pro práci s NURBS, které knihovna GLU programátorům aplikací poskytuje, se značně zvýší užitné možnosti grafických aplikací, neboť bude možné, mimo jiné, pracovat s modely těles vytvořených mnoha profesionálními CAD a CAM systémy.

Obsah

1. Význam pojmu NURBS
2. Standard pro reprezentaci těles v počítačové grafice
3. Parametrické křivky a plochy
4. Vlastnosti NURB křivek a ploch
5. Obsah dalšího pokračování
6. Odkazy na další zdroje na Internetu, literatura
7. Zkomprimovaná verze článku i s obrázky
 

1. Význam pojmu NURBS

Zkratkou NURBS jsou v počítačové grafice označovány jedny z nejpoužívanějších typů parametrických křivek a ploch. Tato zkratka má dva významy:

  1. Non-Uniform Rational B-Splines – racionální neuniformní B-splajny. Jedná se o zobecnění B-splajnů a Bézierových křivek o racionalitu (váhy řídících bodů) a uzlový vektor.
  2. Non-Uniform Rational B-Surfaces – racionální neuniformní B-plochy. Jedná se o zobecnění B-ploch a Bézierových ploch (plátů).

NURB křivky a především plochy se staly populární zejména díky podpoře matematicky přesného modelování kvadrik a offsetových ploch, které nebylo možné s pomocí klasických B-ploch a Bézierových ploch přesně vytvořit. Důležitá je také flexibilita při tvorbě NURBS, protože kromě poloh řídících bodů je možné měnit i jejich váhu (racionalita) a globální uzlový vektor –knot-vector (neuniformita).

Postupem času se NURBS staly standardem pro systémy CAD a CAM (SurfCAM), stejně jako pro pokročilé modelovací programy (Alias Wavefront atd.). Význam existence takového standardu pro počítačovou grafiku je nastíněn v další kapitole.

Model stegosaura vytvořený pomocí NURB ploch
Obrázek 1: Model stegosaura vytvořený pomocí NURB ploch

2. Standard pro reprezentaci těles v počítačové grafice

Při postupném rozšiřování programových prostředků pro tvorbu počítačové grafiky se začalo ukazovat, že je zapotřebí určitým způsobem sjednotit matematický a programový aparát, který by se používal při modelování plošných i prostorových objektů. Výhody sjednocení a následné standardizace takového aparátu byly zřejmé – umožnil by se poměrně nekomplikovaný převod modelů těles mezi různými programovými systémy, byl by možný vývoj dokonalejších algoritmů i celých výpočetních systémů a v neposlední řadě by zde existovala možnost vytvoření knihoven pečlivě navržených modelů těles.

Úplné a dokonalé sjednocení všech možných reprezentací těles však nelze provést pro všechny myslitelné aplikace, protože každým způsobem reprezentace se snažíme popsat pouze určité (pro nás důležité) atributy těles, přičemž ostatní (pro nás nezajímavé) atributy jsou většinou zanedbány. Obecně je však možné říci, že lze popisovat buď povrch těles (tj. množinu tzv. hraničních bodů), nebo objem těles (tj. množinu vnitřních bodů).

První typ reprezentace se nazývá povrchová (hraniční) reprezentace, anglicky boundary representation, zkráceně B-rep. Druhý typ je nazván objemová reprezentace, anglicky volume representation. V dalším textu se budu zabývat výhradně reprezentací hraniční, i když povídání o objemové reprezentaci by bylo taktéž zajímavé (viz například knihovnu OpenGL Volumizer od SGI).

Hraniční reprezentace povrchů těles stále patří k nejpoužívanějším způsobům popisu těles v počítačové grafice. Mezi hlavní důvody vedoucí k častému použití tohoto typu reprezentace patří poměrně jednoduché datové struktury využívané pro popis plochy tělesa, přímočaré a rychlé zobrazení s případným využitím grafických akcelerátorů a grafických knihoven (OpenGL, Direct3D, GKS, Phigs) a dobrá podpora ze strany CAD a CAM systémů.

V dnešní době jsou také k dispozici programové knihovny, které umožňují práci s hierarchicky uspořádanou trojrozměrnou scénou, kde jsou využity různé metody pro rozdělení a zpracování této scény. Jedná se o popis topologie a geometrie scény pomocí KD-stromů, BSP-stromů, portálů nebo hierarchických mřížek. Tyto datové struktury tvoří i nezanedbatelnou část herních enginů.

Mezi další přednosti tohoto způsobu reprezentace těles patří skutečnost, že dnes již existují a jsou poměrně dobře přístupná zařízení umožňující získávání trojrozměrných dat o reálných tělesech. Mezi tato zařízení patří i optické 3D skenery, které mohou po základním zpracování získaného obrazu vygenerovat pravidelnou či nepravidelnou trojúhelníkovou síť (TIN) představující povrch snímaného tělesa. Dobré výsledky však dává i použití digitálních fotoaparátů spolu s osvětlením scény speciálním vzorkem a následným postprocessingem získaných snímků.

Pokud se prostorová tělesa ve vytvářených scénách popisují svojí hranicí, je nutné zvolit vhodný způsob popisu povrchu těles, tj. hranice mezi tělesem a volným prostorem či jiným tělesem. Povrch lze popsat buď jako celek, nebo jako množinu částí povrchu. Popis povrchu jako celku se používá pouze pro jednoduchá tělesa, která lze popsat jednou implicitní či explicitní rovnicí (koule, válec, toroid apod.).

Mnohem častěji se povrch tělesa před dalším zpracováním rozděluje na menší části, z nichž každá je popsána samostatně. Zbývá pouze výběr vhodných tvarů (nazývaných také grafická primitiva), pomocí nichž bude celý povrch tělesa popsán.

Nejčastěji se setkáme s rozdělením povrchu na trojúhelníkové plošky, kdy jednotlivé sousední trojúhelníky sdílí společné hrany a vrcholy. Podle způsobu rozdělení povrchu tělesa je možné vytvářet pravidelné sítě trojúhelníků či naopak nepravidelné trojúhelníkové sítě (Triangular Irregular Network – TIN). Tímto typem reprezentace těles jsem se podrobněji zabýval v seriálu o grafické knihovně OpenGL, neboť v OpenGL se mezi grafická primitiva (stavební prvky vykreslované scény) zařadil i trojúhelník, pruh trojúhelníků a trs trojúhelníků, pomocí nichž lze TIN sítě jednoduše a efektivně tvořit.

Nepravidelná trojúhelníková síť - TIN
Obrázek 1: Nepravidelná trojúhelníková sít – TIN

Pokud není z nějakého důvodu vhodné reprezentovat povrch těles TIN sítí, je možné podle požadavků aplikace zvolit buď jednodušší reprezentaci, nebo naopak reprezentaci na vyšší úrovni. Jednodušší reprezentaci lze zvolit v případě požadavku na co nejvyšší rychlost vykreslování, který se kloubí s požadavkem na malé datové toky mezi pamětí a grafickým akcelerátorem. Reprezentace na vyšší úrovni je zase potřebná při modelování a tvorbě animací.

Jediným plošným útvarem, který je jednodušší než trojúhelník, je elementární rovinná ploška, nazývaná také surfel (surface element). Tato ploška je popsaná pozicí svého středu v prostoru, velikostí a normálovým vektorem. To je méně dat než u trojúhelníku, kde je zapotřebí popsat pozice všech jeho vrcholů – ve skutečnosti se u trojúhelníkových sítí zbytečně ukládají i topologické informace, které nejsou pro některé operace (včetně vykreslování) nezbytně nutné.

3. Parametrické křivky a plochy

Mnohem častěji je však zapotřebí zvolit hraniční reprezentaci povrchu těles na vyšší úrovni, než je pouhá trojúhelníková síť. Důvodů může být víc, nejpatrnější je však potřeba zachování topologie těles, snažší tvorba animací, práce s hierarchickým modelem scény aj. V počítačové grafice se povrch tělesa rozděluje na elementární části povrchu nazývané pláty či záplaty. Výsledná plocha tělesa se získá hladkým navázáním těchto plátů na sebe.

Každý z plátů je vyjádřen tzv. bodovou rovnicí, což je explicitní vyjádření polohy bodu v závislosti na jednom (křivka) či více (plocha) parametrech. V počítačové grafice se nejčastěji používají bodové rovnice, které jako své bázové funkce obsahují polynomy nízkých stupňů. Předností polynomů je snadný výpočet jejich hodnot pomocí Hornerova schématu a v neposlední řadě také to, že polynomy jsou snadno diferencovatelné, čehož se využívá při hladkém navazování křivek a ploch.

Bodová rovnice parametrické plochy Q(u,v) dvou parametrů u a v může být vyjádřena následovně:

Q(u,v)=[x(u,v), y(u,v), z(u,v)]

kde x(u,v), y(u,v) a z(u,v) jsou funkce dvou parametrů, jejichž hodnoty leží v rozsahu <0, 1>. Jak uvidíme dále, není u NURBS potřebné, aby parametry (resp. jejich hodnoty) rostly rovnoměrně, protože díky knot-vectoru (uzlovému vektoru) je možné pro každé rozmezí dvou řídících bodů zvolit jiný rozsah hodnot.

Z bodové rovnice parametrické plochy lze jednoduše vyjádřit i rovnice tečných vektorů ve směrech růstu (či poklesu) parametrů u a v. Tečné vektory se používají ve dvou případech: pro výpočet normálového vektoru (pomocí normálového součinu dvou tečných vektorů, jednoho ve směru růstu parametru u a druhého ve směru růstu parametruv) a pro hladké napojení jednotlivých plátů.

Detail modelu vytvořeného z parametrických ploch
Obrázek 3: Detail modelu vytvořeného z parametrických ploch

4. Vlastnosti NURB křivek a ploch

NURB křivky a plochy se v počítačové grafice staly velmi populární zejména díky některým svým výhodným vlastnostem, které si krátce popíšeme:

  1. Pomocí NURB křivek lze jednoduše a přesně vytvářet kuželosečky, tj. kružnici, elipsu, parabolu atd. Zejména možnost přesného vytváření kružnic a elips (i jejich částí – oblouků) je v CAD/CAM aplikacích velmi důležitá – viz ilustrační obrázky 4 a 5.
  2. NURB plochy mohou přesně vytvářet povrch (nebo část povrchu) kvadrik, jež jsou obdobou kuželoseček v prostoru. Je tedy možné vytvořit kouli, válec, kužel apod.
  3. Vhodnou volbou uzlového vektoru a vah řídících bodů je možné vytvářet povrchy se zlomy a hranami, například kvádry. Tato vlastnost se opět použije při práci v CAD/CAM systémech, kde se běžně vytváří tělesa, jež mají střídavě spojité a nespojité povrchy.
  4. NURB křivky a plochy si přitom zachovávají veškeré vlastnosti parametrických křivek a ploch, například invarianci k transformacím, existenci komplexní obálky (pro nezáporné váhy řídících bodů) atd.
  5. Editace NURB je poměrně jednoduchá – mění se polohy řídících bodů, jejich váhy a případně i uzlový vektor. Při interaktivním modelování se však téměř vždy mění pouze polohy řídících bodů, jejichž cílenou změnou lze dosáhnout téměř jakéhokoli tvaru.

Význam některých vlastností NURBS bude patrný z demonstračních příkladů evedených v dalších pokračováních tohoto seriálu.

Tvorba kuželoseček pomocí NURB křivek
Obrázek 4: Tvorba kuželoseček pomocí NURB křivek

Tvorba kuželoseček pomocí NURB křivek
Obrázek 5: Tvorba kuželoseček pomocí NURB křivek

root_podpora

5. Obsah dalšího pokračování

V dalším pokračování, které na tento díl bezprostředně navazuje, si popíšeme matematický aparát použitý při konstrukci NURB křivek a ploch. Také si vytvoříme demonstrační aplikaci pro softwarový výpočet NURB křivky.

6. Odkazy na další zdroje na Internetu, literatura

  1. Foley J., Dam van A., Feiner S., Hughes J.: Computer Graphics – Principles and Practice (Second Edition)
    Addison-Wesley, Reading, Massachusetts, 1990, ISBN 0–201–12110–7
  2. W.T.Hewitt a další: NURBS: A Tool or an Ornament for Graphics?
    Manchester Computing Centre, University of Manchester, Manchester M13 9PL
  3. Žára J., Beneš B., Felkel P.: Moderní počítačová grafika
    Computer Press, Praha, 1998, ISBN 80–7226–049–9
  4. Žára J., Limpouch A., Beneš B., Werner T.: Počítačová grafika – principy a algoritmy
    Grada, Praha, 1992, ISBN 80–85623–00–5
  5. Krátké a výstižné vysvětlení pojmu NURBS na stránkách Wikipedie:
    en.wikipedia.or­g/wiki/Nurbs
  6. Model stegosaura byl získán na stránce:
    www.turbosquid.com
  7. Obrázek nohy dinosaura byl získán na adrese:
    perso.wanadoo­.fr/rimasson/3d/leg­.htm

7. Zkomprimovaná verze článku i s obrázky

Zkomprimovaná verze tohoto článku i s přiloženými obrázky je dostupná zde.

Byl pro vás článek přínosný?

Autor článku

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