Kapitola 3: Lekce 2 - Dělení fasády
Dělení fasády
V lekci dělení fasády použijeme model z předchozí lekce. Využijeme zde velmi důležitý nástroj pro modelování budov pomocí jazyku CGA – operaci comp(), která dokáže rozdělit fasádu na jednotlivé segmenty.
Budova0 -->
comp(f){ front : PredniStena | side : BocniStena | top: Strecha}
Po tomto rozdělení může být fasáda modelovaná detailněji. Obvykle se postupuje tak, že se budova rozdělí do několika pater a tyto patra se následně vertikálně rozčlení do jednotlivých dlaždic (Tiles). Každá dlaždice obsahuje nějaký element, jako okno, dveře nebo další prvek, jak ukazuje následující obrázek.
Pravidlo „PredniStena“ rozdělí pomocí operátoru „~“ stěnu na přízemí, definované v kódu výše atributem na velikost 3,5 a ostatní patra o velikosti 2. Stejně to uděláme i pro pravidlo „BocniStena“. Boční (vedlejší) stěny nemají přízemí s dveřmi, proto pro ně použijeme na celou plochu pravidlo „Patro“. Operátorem „~“ je definován poměr zobrazení jednotlivých částí budovy.
Bez tohoto operátoru lze určit absolutní hodnotu, která je vhodná pro části budovy, které mají pevně dané rozměry, jako dveře, okna apod.
PredniStena -->
split(y){ vyska_prizemi : Prizemi | { ~vyska_patra: Patro }* }
BocniStena -->
split(y){ vyska_prizemi: Patro | { ~vyska_patra: Patro }* }
Dále definujeme pravidla „Patro“ a „Prizemi“. Pravidlo pro přízemí rozděluje fasádu v přízemí s tím, že dveře se umístí implicitně vpravo. Šířka dlaždice je určena podle atributu „sirka_dlazdice“ definovaného opět na začátku Rule File na hodnotu 4.
Patro -->
split(x){ 1: Zed | { ~sirka_dlazdice: Dlazdice }* | 1 : Zed }
Prizemi -->
split(x){ 1: Zed |{ ~sirka_dlazdice: Dlazdice }* | ~sirka_dlazdice: VchodovaDlazdice | 1: Zed }
Po předpisech pro prvotní rozdělení fasády začneme definovat vzhled jednotlivých dlaždic (pravidlo „Dlazdice“) i těch specifických (pravidlo „VchodovaDlazdice“).
Dlazdice -->
split(x){ ~1 : Zed | 2 : split(y){ 1: Zed | 1.5: Okno | ~1: Zed } | ~1 : Zed }
VchodovaDlazdice -->
split(x){ ~1 : PlnaZed | 2 : split(y){ 2.5: Dvere | ~2: PlnaZed } | ~1 : PlnaZed }
Assets
Nakonec sepíšeme pravidla pro potřebné podkladové prvky („Okno“, „Dvere“, „Zed“, „PlnaZed“), jejich rozměry a pozice. Používáme zde operace t(x,y,z) pro posunutí prvku a i(objectname), pro vložení zvoleného assetu na patřičné místo.
Asset (podklad) je přídavný prvek sloužící pro vytváření detailnějších fasád budov. Tyto prvky jsou zpravidla vytvářený externě a načteny k modelované budově implicitním voláním. Jako asset lze použít i jeden z již vestavěných základních útvarů. Tento postup pro začátek použijeme i zde (náhrada složitých prvků základními geometrickými prvky). Přídavným prvkům se budeme zabývat ještě v lekci o modelování podle skutečné budovy.
Další použitou operací je s(x,y,z) pro nastavení rámce. U os x a y používáme relativní souřadnice, o kterých se psalo v jedné z předchozích lekcí.
Okno -->
s('1,'1,0.4) t(0,0,-0.45) i("builtin:cube")
Dvere -->
s('1,'1,0.1) t(0,0,-0.5) i("builtin:cube")
Zed -->
color(barva_zdi)
PlnaZed -->
color(barva_zdi)
s('1,'1,0.4) t(0,0,-0.4) i("builtin:cube:notex")
Takto vytvořený model by nám mohl stačit při modelování starších panelových domů. Pro širší použití CGA gramatiky je ale potřeba si popsat ještě vytváření nerovných střech.
Nejprve si vytvoříme pravidlo „Strecha“ a použijeme operaci „roof“ s klíčovým slovem „Hip“, určujícím typ střechy. Výšku nastavíme na 35, přesah přes hranu budovy 0.5. Odkážeme zde také podle pravidel na bližší specifikaci střechy, v našem případě to bude pravidlo „TypStrechy“. V něm si pouze určíme barvu, kterou definujeme na začátku souboru jako atribut „barva_strechy“.
Strecha -->
roofHip(35, 0.5) TypStrechy
TypStrechy -->
color(barva_strechy)
Po vygenerování dostáváme základní podobu budovy použitelnou pro modely měst a další zpracování. Využití texturování a importování přídavných prvků architektury bude ukázáno v kapitole modelování podle reálné budovy.
Zde je ukázka vrml modelu budovy, při použití sepsaných pravidel CGA gramatiky:
V další lekci se zaměříme na úroveň detailu (LOD).