Kalábovi

Kalábovic wikina

Uživatelské nástroje

Nástroje pro tento web


pitel:isz:3d

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

pitel:isz:3d [03. 07. 2012, 13.53:46] (aktuální)
Řádek 1: Řádek 1:
 +====== Transformace,​ reprezentace a zobrazení 3D objektů ======
 +Geometrické transformace jsou jedny z nejčetnějších operací v současné počítačové grafice. Můžeme je chápat jako změnu pozice vrcholů v aktuálním souřadnicovém systému nebo jako změnu souřadnicového systému.
 +===== Homogenní souřadnice =====
 +[[wp>​Homogeneous coordinates]]
  
 +Jsou zavedeny kvůli jednotné manipulaci se všemi transformačními maticemi, protože v případě karteziánských souřadnic by jsme u posunutí použili sčítání a u ostatních operací zas násobení. Takhle všude použijeme násobení matic, tj. jednotný způsob (ulehčí implementaci).
 +
 +**Definice: ** Homogenní souřadnice bodu v 3D s karteziánskymi souřadnicemi [x,y,z] je uspořádána čtveřice [X,Y,Z,w] pro kterou platí x=X/w, y=Y/w, z=Z/w. Bod je svými homogenními souřadnicemi určen jednoznačně. Souřadnici w nazýváme váhou bodu. Hodnota této váhy je w=1 v případě lineárních transformací.
 +
 +<note important>​Důležitý termín je **[[wp>​Euclidean vector|vektor]]**. Vektor je veličina, která má kromě velikosti i směr. Jinými slovy, je to skalár který má i směr.</​note>​
 +
 +===== Transformace =====
 +http://​wally.cs.iupui.edu/​n351/​3D/​matrix.html
 +
 +Používá se [[wp>​Matrix multiplication|násobení matic]]. Bod, který chceme transformovat,​ má matici //P(x, y, z, w)//, kde //x//, //y//, //z// jsou jeho souřadnice,​ //w// je 1 pokud je to bod, 0 pokud je to vektor.
 +
 +Tansformační matice je pak matice 4 × 4:\\
 +<​m>​delim{[}{matrix{4}{4}{a_11 a_12 a_13 0 a_21 a_22 a_23 0 a_31 a_32 a_33 0 a_41 a_42 a_43 1}}{]}</​m>​
 +
 +Transformace je pak tedy: //P' = P ×  M//\\
 +<​m>​delim{[}{matrix{1}{4}{{x prime} {y prime} {z prime} 1}}{]} = delim{[}{matrix{1}{4}{x y z 1}}{]} * delim{[}{matrix{4}{4}{a_11 a_12 a_13 0 a_21 a_22 a_23 0 a_31 a_32 a_33 0 a_41 a_42 a_43 1}}{]}</​m>​
 +
 +Transformace je pak možné i skládat, provádí se to násobením transformačních matic mezi sebou. A protože jde o násobení matic, záleží na pořadí.
 +
 +==== Posunutí ====
 +<​m>​delim{[}{matrix{4}{4}{1 0 0 0 0 1 0 0 0 0 1 0 d_x d_y d_z 1}}{]}</​m>​
 +
 +Pro posun v opačném směru budou koeficienty //d// záporné.
 +
 +==== Změna velikosti ====
 +<​m>​delim{[}{matrix{4}{4}{S_x 0 0 0 0 S_y 0 0 0 0 S_z 0 0 0 0 1}}{]}</​m>​
 +
 +Pro zmenšení místo //S// použít 1///S//.
 +
 +==== Rotace ====
 +<​m>​R_x = delim{[}{matrix{4}{4}{1 0 0 0 0 {cos alpha} {sin alpha} 0 0 {-sin alpha} {cos alpha} 0 0 0 0 1}}{]}</​m>​
 +
 +<​m>​R_y = delim{[}{matrix{4}{4}{{cos alpha} 0 {sin alpha} 0 0 1 0 0 {-sin alpha} 0 {cos alpha} 0 0 0 0 1}}{]}</​m>​
 +
 +<​m>​R_z = delim{[}{matrix{4}{4}{{cos alpha} {sin alpha} 0 0 {-sin alpha} {cos alpha} 0 0 0 0 1 0 0 0 0 1}}{]}</​m>​
 +
 +==== Zkosení ====
 +<​m>​Sh_YZ = delim{[}{matrix{4}{4}{1 Sh_y Sh_z 0 0 1 0 0 0 0 1 0 0 0 0 1}}{]}</​m>​
 +
 +<​m>​Sh_XZ = delim{[}{matrix{4}{4}{1 0 0 0 Sh_x 1 Sh_z 0 0 0 1 0 0 0 0 1}}{]}</​m>​
 +
 +<​m>​Sh_XY = delim{[}{matrix{4}{4}{1 0 0 0 0 1 0 0 Sh_x Sh_y 1 0 0 0 0 1}}{]}</​m>​
 +
 +===== Reprezentace =====
 +Požadavky na modely:
 +  * Obecnost (popis co nejrozsáhlejší třídy objektů)
 +  * Úplnost (úpně popisuje daný objekt)
 +  * Jednoznačnost (lze vyhodnotit pouze jedním způsobem)
 +  * Unikátnost,​ jedinečnost (jednomu tělesu odpovídá jeden model)
 +  * Přesnost (popisu objektu)
 +  * Regulérnost (nemožnost vytvořit nereálnou reprezentaci)
 +  * Konzistence vůči vybraným operacím tělesa stejné třídy
 +  * Kompaktnost (malá paměťová náročnost)
 +  * Možnost efektivního zpracování
 +
 +  * Manifold objekty -- vyrobitelné((Každá hrana spojuje právě dvě plochy)); nonmanifold -- nevyrobitelné
 +  * Eulerove rovnice -- kontrola topologie objektu
 +  * Eulerove operátory -- realizace změn topologie objektu
 +==== Metody reprezentace ====
 +=== Konstruktivní geometrie (CSG) ===
 +[[wp>​Constructive solid geometry]]
 +
 +Objekt je popsán stromem složeným z 3D primitiv, transformací a booleovských operací (uzly stromu).
 +
 +=== Šablonování ===
 +Transformace (posun) 2D profilu po přímce, křivce nebo s měnícím se objemem (potahování) nebo rotace.
 +
 +=== Dekompoziční modely ===
 +{{ http://​www.effectware.com/​download/​images/​efx_voxel2.jpg|Voxelová konvička}}
 +[[wp>​Voxel]]
 +
 +Diskrétní popis objektu dekompozicí jím obsaženého objemu na elementární objemové jednotky -- krychle (voxel = pixel v 3D). Uložení dat -- oktalový strom, 3D pole diskrétních hodnot nebo subvoxely. Vykreslení -- algoritmus [[wp>​Marching cubes]]. Na obrázku je porovnání voxelové a polygonální konvičky (tady voxely nejsou vyhlazené přes cubes).
 +
 +=== B-rep = Boundary representation ===
 +[[wp>​Polygon mesh]]
 +
 +Objekt je popsán hranicemi. ​
 +  * Drátový (nejsem si jistá jak je to česky) model - popis pomocí vrcholů a hran
 +  * Polygonální model -- popis pomocí vrcholů, hran a stěn. Pro popis v PC -- okřídlená hrana (3 lineární senzamy -- vrcholů, hran, stěn)
 +  * Hraniční spline model -- popis pomocí vrcholů, hran a stěn (spline plochy)
 +
 +=== 3D plochy ===
 +Plocha je definována bázovým polynomem a sítí bodů (matice).
 +  * Bikubické plochy -- interpolační,​ analogie Fergusonových křivek, matice 4×4 řídících bodů, spojitost plátů
 +  * Beziérové plochy -- aproximační,​ analogie Beziérových křivek, matice 4×4 řídících bodů, spojitost plátů
 +  * NURBS plochy -- aproximační,​ analogie NURBS křivek, matice 4×4 řídících bodů
 +
 +=== Implicitní plochy ===
 +[[wp>​Metaballs]]
 +
 +Modelování pomocí kostry kolem které je potenciální pole - určuje povrch objektu.
 +===== Zobrazení =====
 +==== Ray tracing ====
 +[[wp>Ray tracing (graphics)]]
 +
 +Z mřížky jsou vystřelovány paprsky do scény, kde se různě odráží a pohlcují. Přitom se sleduje jejich barva.
 +
 +{{ http://​upload.wikimedia.org/​wikipedia/​commons/​thumb/​8/​83/​Ray_trace_diagram.svg/​500px-Ray_trace_diagram.svg.png }}
 +
 +==== Photon mapping ====
 +[[wp>​Photon mapping]]
 +
 +Pokročilá metoda, a výpočetně velice náročná, proto se většinou sama o sobě nepoužívá,​ ale slouží jen jako pomůcka pro [[wp>​Global illumination|globální iluminaci]] a [[wp>​ambient occlusion]].
 +
 +Funguje to tak, že do scény jsou ze světel vystřeleny fotony. Pokud foton narazí na polygon, v závislosti na materiálu se od něj buď část jeho energie pohltí (čímž na něm udělá "​flek"​ podle jeho intenzity) a odrazí se od něj dál do scény, nebo jím projde (např. sklo). Čím více odrazů fotonu povolíme, tím déle výpočet trvá, ale tím je přesnější. Z výše uvedeného plyne, že fotony se málo kdy dostanou do ostrých rohů, čímž se sama vyřešila AO, a pokud nebudeme energii fotonu brát jen jako jednorozměrné číslo, ale třeba jako RGB hodnoty, vyřeší se tím i GI. Výsledkem metody je pak fotonová mapa, což si lze představit jako flekatou texturu.
 +
 +{{ http://​jgt.akpeters.com/​papers/​Christensen99/​Fig1b.jpg |Fotonová mapa}}
 +
 +==== Z-buffer ====
 +[[wp>​Z-buffering]]
 +
 +Ukládá informace o hloubce objektů ve scéně. Není to přímo vykreslovací metoda, ale spíš způsob řešení viditelnosti.
 +
 +{{ http://​upload.wikimedia.org/​wikipedia/​commons/​thumb/​4/​4e/​Z_buffer.svg/​500px-Z_buffer.svg.png }}
 +
 +===== Shrnutí =====
 +  * transformace:​ změna souřadnic bodů v systému ve smyslu posunu, otočení, změny velikosti nebo třeba zešikmení
 +  * homogenní souřadnice:​ abychom mohli všechny transformace dělat pomocí násobení matic, přidáváme k xyz ještě váhu (w), platí, že x = X/w
 +  * násobení matic: záleží na pořadí, počítá se zprava!
 +  * znát ty tranformační matice, ale asi o tom přímo nemluvit
 +  * reprezentace:​ požadavky na modely jsou dost nechutné:(
 +  * CSG: strom, listy jsou primitiva, uzly pak booleovské operace, paměťově výhodné
 +  * šablonování:​ ideálně nakreslit profil pinčla a vysvětlit, že 3D model uděláme orotováním kolem osy
 +  * dekompoziční modely: voxely, uloženy ve stromové struktuře, marching cubes (neumět, jen zmínit), použitelné třeba na medicínská data
 +  * 3D plochy: polygonální model, wireframe, 3D plochy (podobně jako křivky ve 2D)
 +  * implicitní plochy: kostra s potenciálním povrchem, metaballs
 +  * zobrazení: ray casting nebo z-buffer pro řešení viditelnosti,​ ray tracing pro zobrazení (náročné),​ photon mapping pro získávání světelných map, radiosita: nejhezčí, nejnáročnější (plošky mohou vyzařovat světlo)
 +  * osvětlovací model: je dobré vědět, že existuje nějaký Phongův, který je leet
/var/www/wiki/data/pages/pitel/isz/3d.txt · Poslední úprava: 03. 07. 2012, 13.53:46 (upraveno mimo DokuWiki)