Számítógépes Grafika Klár Gergely tremere@elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2010/2011. tavaszi félév
Tartalom Virtuális világ tárolása 1 Virtuális világ tárolása 2 3 4
Virtuális világ tárolása - kérdések Hol táruljuk az adatokat? Mem. vagy HDD? Mire optimalizálunk? Rajzolás vagy szerkesztés? Milyen koordináta-rendszerben tároljuk őket? Világ vagy modell kr?
Virtuális világ tárolása - kérdések Hol táruljuk az adatokat? Mem. vagy HDD? Mire optimalizálunk? Rajzolás vagy szerkesztés? Milyen koordináta-rendszerben tároljuk őket? Világ vagy modell kr?
Virtuális világ tárolása - kérdések Hol táruljuk az adatokat? Mem. vagy HDD? Mire optimalizálunk? Rajzolás vagy szerkesztés? Milyen koordináta-rendszerben tároljuk őket? Világ vagy modell kr?
Tartalom Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet 1 Virtuális világ tárolása 2 Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet 3 4
Geometria brute force tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Legyenek a primitíveink poligonok. Legyünk lusták, és minden poligont tartsuk nyílván az összes csúcsával. Poligonokkal kapcsolatos feladatok: tárolás transzformálás szomszédsági lekérdezések
Geometria brute force tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Legyenek a primitíveink poligonok. Legyünk lusták, és minden poligont tartsuk nyílván az összes csúcsával. Poligonokkal kapcsolatos feladatok: tárolás transzformálás szomszédsági lekérdezések
Geometria brute force tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Legyenek a primitíveink poligonok. Legyünk lusták, és minden poligont tartsuk nyílván az összes csúcsával. Poligonokkal kapcsolatos feladatok: tárolás transzformálás szomszédsági lekérdezések
Geometria brute force tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet s t r u c t t r i a n g l e { f l o a t x1, y1, z1 ; f l o a t x2, y2, z2 ; f l o a t x3, y3, z3 ; } ;
A brute force tárolás elemzése Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Tárolás: ha vannak poligonoknak közös csúcsai, akkor ezeket többször tároljuk feleslegesen Ñ nem túl jó. Transzformálás: a közös csúcsokra annyiszor fogjuk el végezni a transzformációkat, ahányszor szerepelnek Ñ nem hatékony. Lekérdezések: fogalmunk sincs, ki kinek a szomszédja, csak az összes csúcs bejárásával tudunk eredményre jutni Ñ katasztrófa. Egyetlen előnye, hogy ennél egyszerűbben már nem is lehetne tárolni.
A brute force tárolás elemzése Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Tárolás: ha vannak poligonoknak közös csúcsai, akkor ezeket többször tároljuk feleslegesen Ñ nem túl jó. Transzformálás: a közös csúcsokra annyiszor fogjuk el végezni a transzformációkat, ahányszor szerepelnek Ñ nem hatékony. Lekérdezések: fogalmunk sincs, ki kinek a szomszédja, csak az összes csúcs bejárásával tudunk eredményre jutni Ñ katasztrófa. Egyetlen előnye, hogy ennél egyszerűbben már nem is lehetne tárolni.
A brute force tárolás elemzése Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Tárolás: ha vannak poligonoknak közös csúcsai, akkor ezeket többször tároljuk feleslegesen Ñ nem túl jó. Transzformálás: a közös csúcsokra annyiszor fogjuk el végezni a transzformációkat, ahányszor szerepelnek Ñ nem hatékony. Lekérdezések: fogalmunk sincs, ki kinek a szomszédja, csak az összes csúcs bejárásával tudunk eredményre jutni Ñ katasztrófa. Egyetlen előnye, hogy ennél egyszerűbben már nem is lehetne tárolni.
A brute force tárolás elemzése Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Tárolás: ha vannak poligonoknak közös csúcsai, akkor ezeket többször tároljuk feleslegesen Ñ nem túl jó. Transzformálás: a közös csúcsokra annyiszor fogjuk el végezni a transzformációkat, ahányszor szerepelnek Ñ nem hatékony. Lekérdezések: fogalmunk sincs, ki kinek a szomszédja, csak az összes csúcs bejárásával tudunk eredményre jutni Ñ katasztrófa. Egyetlen előnye, hogy ennél egyszerűbben már nem is lehetne tárolni.
Index buffer-ek Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Alapötlet: tároljunk minden csúcsot egyszer, egy nagy közös tömbben! A poligonok csak hivatkozzanak a csúcsok tömbjének elemeire. Ez az index buffer. Minden GPU támogatja.
Index buffer-ek Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Alapötlet: tároljunk minden csúcsot egyszer, egy nagy közös tömbben! A poligonok csak hivatkozzanak a csúcsok tömbjének elemeire. Ez az index buffer. Minden GPU támogatja.
Index buffer-ek Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Alapötlet: tároljunk minden csúcsot egyszer, egy nagy közös tömbben! A poligonok csak hivatkozzanak a csúcsok tömbjének elemeire. Ez az index buffer. Minden GPU támogatja.
Index buffer-ek Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Alapötlet: tároljunk minden csúcsot egyszer, egy nagy közös tömbben! A poligonok csak hivatkozzanak a csúcsok tömbjének elemeire. Ez az index buffer. Minden GPU támogatja.
Index buffer-ek Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet s t r u c t t r i a n g l e { unsigned i n t a, b, c ; } ; s t r u c t vec3 { f l o a t x, y, z ; } ; std : : vector <vec3> i n d e x B u f f e r ;
Példa Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Vegyünk egy N N db négyzetből álló rácsot! Mérete index buffer nélkül: 4 csúcs/négyzet, N N négyzet: 4N 2. Mérete index buffer-rel: összesen pn 1q pn 1q csúcs: pn 1q 2 N 2 2N 1. 4N 2 vs. N 2 2N 1 4N 2 N 2 2N 1 0 3N 2 2N 1 N 1, ha N P Z
Példa Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Vegyünk egy N N db négyzetből álló rácsot! Mérete index buffer nélkül: 4 csúcs/négyzet, N N négyzet: 4N 2. Mérete index buffer-rel: összesen pn 1q pn 1q csúcs: pn 1q 2 N 2 2N 1. 4N 2 vs. N 2 2N 1 4N 2 N 2 2N 1 0 3N 2 2N 1 N 1, ha N P Z
Példa Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Vegyünk egy N N db négyzetből álló rácsot! Mérete index buffer nélkül: 4 csúcs/négyzet, N N négyzet: 4N 2. Mérete index buffer-rel: összesen pn 1q pn 1q csúcs: pn 1q 2 N 2 2N 1. 4N 2 vs. N 2 2N 1 4N 2 N 2 2N 1 0 3N 2 2N 1 N 1, ha N P Z
Példa Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Vegyünk egy N N db négyzetből álló rácsot! Mérete index buffer nélkül: 4 csúcs/négyzet, N N négyzet: 4N 2. Mérete index buffer-rel: összesen pn 1q pn 1q csúcs: pn 1q 2 N 2 2N 1. 4N 2 vs. N 2 2N 1 4N 2 N 2 2N 1 0 3N 2 2N 1 N 1, ha N P Z
Példa folyt. Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Ha több mint egyetlen négyzetünk van, már megéri. Pl. ha N 10 Mérete index buffer nélkül: 400 csúcsot tárolunk és transzformálunk Mérete index buffer-rel: 121 csúcsot tárolunk és transzformálunk
Példa folyt. Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Ha több mint egyetlen négyzetünk van, már megéri. Pl. ha N 10 Mérete index buffer nélkül: 400 csúcsot tárolunk és transzformálunk Mérete index buffer-rel: 121 csúcsot tárolunk és transzformálunk
Index buffer-ek GPU-n Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Minden videókártya, amit még nem gyűjtenek a múzeumok támogatja az index buffer-eket. A csúcspontok tömbje (vertex buffer) nem csak pozicókat tartalmaz, hanem normálvektorokat, textúra-koordinátákat, és még sok mást. Egy hivatkozás a vertex buffer-ra mindezekre együtt hivatkozik.
Index buffer-ek GPU-n Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Minden videókártya, amit még nem gyűjtenek a múzeumok támogatja az index buffer-eket. A csúcspontok tömbje (vertex buffer) nem csak pozicókat tartalmaz, hanem normálvektorokat, textúra-koordinátákat, és még sok mást. Egy hivatkozás a vertex buffer-ra mindezekre együtt hivatkozik.
Index buffer-ek GPU-n Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Minden videókártya, amit még nem gyűjtenek a múzeumok támogatja az index buffer-eket. A csúcspontok tömbje (vertex buffer) nem csak pozicókat tartalmaz, hanem normálvektorokat, textúra-koordinátákat, és még sok mást. Egy hivatkozás a vertex buffer-ra mindezekre együtt hivatkozik.
Kocka probléma Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Ha egy kockát rakunk össze háromszögekből, akkor egy sarokban lévő csúcs min. három, max. hat háromszögnek a csúcsa. Index buffer-rel elég lenne 8 csúcsot nyílvántartani. Mi lesz a normálisokkal? Hogy éles sarkai legyenek a kockának a normálisoknak merőlegesnek kell lennie a lapokra! Oldalanként külön meg kell adni a csúcsokat: összesen 3 8 csúcs kerül az vertex buffer-ba.
Kocka probléma Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Ha egy kockát rakunk össze háromszögekből, akkor egy sarokban lévő csúcs min. három, max. hat háromszögnek a csúcsa. Index buffer-rel elég lenne 8 csúcsot nyílvántartani. Mi lesz a normálisokkal? Hogy éles sarkai legyenek a kockának a normálisoknak merőlegesnek kell lennie a lapokra! Oldalanként külön meg kell adni a csúcsokat: összesen 3 8 csúcs kerül az vertex buffer-ba.
Kocka probléma Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Ha egy kockát rakunk össze háromszögekből, akkor egy sarokban lévő csúcs min. három, max. hat háromszögnek a csúcsa. Index buffer-rel elég lenne 8 csúcsot nyílvántartani. Mi lesz a normálisokkal? Hogy éles sarkai legyenek a kockának a normálisoknak merőlegesnek kell lennie a lapokra! Oldalanként külön meg kell adni a csúcsokat: összesen 3 8 csúcs kerül az vertex buffer-ba.
Kocka probléma Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Ha egy kockát rakunk össze háromszögekből, akkor egy sarokban lévő csúcs min. három, max. hat háromszögnek a csúcsa. Index buffer-rel elég lenne 8 csúcsot nyílvántartani. Mi lesz a normálisokkal? Hogy éles sarkai legyenek a kockának a normálisoknak merőlegesnek kell lennie a lapokra! Oldalanként külön meg kell adni a csúcsokat: összesen 3 8 csúcs kerül az vertex buffer-ba.
Kocka probléma Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet
Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Az Index buffer-es tárolás elemzése Tárolás: ált. hatékony. Transzformálás: hatékony. Lekérdezések: közös csúcsokat már tudunk, de igazából még mindig fogalmunk sincs.
Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Az Index buffer-es tárolás elemzése Tárolás: ált. hatékony. Transzformálás: hatékony. Lekérdezések: közös csúcsokat már tudunk, de igazából még mindig fogalmunk sincs.
Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Az Index buffer-es tárolás elemzése Tárolás: ált. hatékony. Transzformálás: hatékony. Lekérdezések: közös csúcsokat már tudunk, de igazából még mindig fogalmunk sincs.
Szomszédsági viszonyok Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Néha kellenek a szomszédok, pl. felület-feolsztásoknál. Ismertek a csúcsok ñ számítható mi, minek a szomszédja. Egy csúcsban tetszőleges számú poligon találkozhat ñ dinamikus adatszerkezet kéne. Jobb megoldás: Szárnyas-él (winged-edge) adatszerkezet!
Szomszédsági viszonyok Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Néha kellenek a szomszédok, pl. felület-feolsztásoknál. Ismertek a csúcsok ñ számítható mi, minek a szomszédja. Egy csúcsban tetszőleges számú poligon találkozhat ñ dinamikus adatszerkezet kéne. Jobb megoldás: Szárnyas-él (winged-edge) adatszerkezet!
Szomszédsági viszonyok Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Néha kellenek a szomszédok, pl. felület-feolsztásoknál. Ismertek a csúcsok ñ számítható mi, minek a szomszédja. Egy csúcsban tetszőleges számú poligon találkozhat ñ dinamikus adatszerkezet kéne. Jobb megoldás: Szárnyas-él (winged-edge) adatszerkezet!
Szomszédsági viszonyok Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Néha kellenek a szomszédok, pl. felület-feolsztásoknál. Ismertek a csúcsok ñ számítható mi, minek a szomszédja. Egy csúcsban tetszőleges számú poligon találkozhat ñ dinamikus adatszerkezet kéne. Jobb megoldás: Szárnyas-él (winged-edge) adatszerkezet!
Szárnyas-él adatszerkezet Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Határfelület leíró (B-rep) szerkezet. Az élek szempontjából tároljuk a felületet. Minden élhez fix számú adat tartozik. Segítségével gyorsan körbe lehet járni egy poligon éleit, közben megkapva minden szomszédot.
Szárnyas-él adatszerkezet Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Határfelület leíró (B-rep) szerkezet. Az élek szempontjából tároljuk a felületet. Minden élhez fix számú adat tartozik. Segítségével gyorsan körbe lehet járni egy poligon éleit, közben megkapva minden szomszédot.
Szárnyas-él adatszerkezet Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Határfelület leíró (B-rep) szerkezet. Az élek szempontjából tároljuk a felületet. Minden élhez fix számú adat tartozik. Segítségével gyorsan körbe lehet járni egy poligon éleit, közben megkapva minden szomszédot.
Szárnyas-él adatszerkezet Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Határfelület leíró (B-rep) szerkezet. Az élek szempontjából tároljuk a felületet. Minden élhez fix számú adat tartozik. Segítségével gyorsan körbe lehet járni egy poligon éleit, közben megkapva minden szomszédot.
Egyetlen él adatai Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet csúcs lap balra jobbra él start vég bal jobb előző köv. előző köv. a B A 0 1 c b d e
Egyéb táblázatok Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Csúcsok táblája csúcs ID csúcsból induló él Lapok táblája lap ID lap egy éle
Példa: tetraéder Virtuális világ tárolása Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet Shirley, Fundamentals of Computer Graphics
Pl.: Összes szomszéd egy lapra Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet def allneighbours ( face, edges, v e r t i c e s, faces ) : startedge = faces [ face ] edge = startedge i f edges [ startedge ]. f a c e L e f t == face : while edges [ edge ]. succleft!= startedge : p r i n t edges [ edge ]. faceright edge = edges [ edge ]. succleft else : while edges [ edge ]. succright!= startedge : p r i n t edges [ edge ]. f a c e L e f t edge = edges [ edge ]. succright
Pl.: Összes lap egy csúcsból Brute force tárolás Index buffer-ek Szárnyas-él adatszerkezet def allfaces ( vertex, edges, v e r t i c e s, faces ) : startedge = v e r t i c e s [ v e r t e x ] edge = startedge done = False while not done : i f edges [ edge ]. v e r t S t a r t == v e rtex : p r i n t edges [ edge ]. f a c e L e f t edge = edges [ edge ]. p r e dleft else : p r i n t edges [ edge ]. faceright edge = edges [ edge ]. predright
Tartalom Virtuális világ tárolása Színtérgráf OGRE 1 Virtuális világ tárolása 2 3 Színtérgráf OGRE 4
Színtérgráf OGRE Világ, benne Objektumok, ami Primitívekből állnak, amiket Pontok határoznak meg.
Színtérgráf OGRE Világ, benne Objektumok, ami Primitívekből állnak, amiket Pontok határoznak meg.
Színtérgráf OGRE Világ, benne Objektumok, ami Primitívekből állnak, amiket Pontok határoznak meg.
Színtérgráf OGRE Világ, benne Objektumok, ami Primitívekből állnak, amiket Pontok határoznak meg.
Színtérgráf OGRE!
Színtérgráf OGRE Minden szint a hozzátartozó tulajdonságokat tartja nyílván. Objektum név, modellezési transzformáció, befoglaló doboz, stb. Primitív primitívre jellemző tulajdonságok Pont koordináták
Színtérgráf OGRE Minden szint a hozzátartozó tulajdonságokat tartja nyílván. Objektum név, modellezési transzformáció, befoglaló doboz, stb. Primitív primitívre jellemző tulajdonságok Pont koordináták
Színtérgráf OGRE Minden szint a hozzátartozó tulajdonságokat tartja nyílván. Objektum név, modellezési transzformáció, befoglaló doboz, stb. Primitív primitívre jellemző tulajdonságok Pont koordináták
Színtérgráf OGRE Minden szint a hozzátartozó tulajdonságokat tartja nyílván. Objektum név, modellezési transzformáció, befoglaló doboz, stb. Primitív primitívre jellemző tulajdonságok Pont koordináták
Színtérgráf motiváció 1. Színtérgráf OGRE Ahol én vagyok ott van a karom is. (Jobb esetben...) Ha mozgatom a karom, elmozdulnak (világtérben) az ujjaim is. Tudom úgy mozgatni az ujjaimat, hogy közben se a karom, se én nem mozdulok el.
Színtérgráf motiváció 1. Színtérgráf OGRE Ahol én vagyok ott van a karom is. (Jobb esetben...) Ha mozgatom a karom, elmozdulnak (világtérben) az ujjaim is. Tudom úgy mozgatni az ujjaimat, hogy közben se a karom, se én nem mozdulok el.
Színtérgráf motiváció 1. Színtérgráf OGRE Ahol én vagyok ott van a karom is. (Jobb esetben...) Ha mozgatom a karom, elmozdulnak (világtérben) az ujjaim is. Tudom úgy mozgatni az ujjaimat, hogy közben se a karom, se én nem mozdulok el.
Színtérgráf OGRE
Színtérgráf motiváció 2. Színtérgráf OGRE Ha mozog egy bicikli, mozognak vele a kerekei meg a kormánya is. A kormányt lehet külön forgatni, és forgatja az első kereket. A két kerék tud forogni a tengelye körül, anélkül hogy a biciklit forgatni kéne.
Színtérgráf motiváció 2. Színtérgráf OGRE Ha mozog egy bicikli, mozognak vele a kerekei meg a kormánya is. A kormányt lehet külön forgatni, és forgatja az első kereket. A két kerék tud forogni a tengelye körül, anélkül hogy a biciklit forgatni kéne.
Színtérgráf motiváció 2. Színtérgráf OGRE Ha mozog egy bicikli, mozognak vele a kerekei meg a kormánya is. A kormányt lehet külön forgatni, és forgatja az első kereket. A két kerék tud forogni a tengelye körül, anélkül hogy a biciklit forgatni kéne.
Színtérgráf OGRE
Színtérgráf Virtuális világ tárolása Színtérgráf OGRE Irányított, körmentes gráf (DAG). A színtér ( világ) összes elemét tartalmazza. Az egyes elemek alá-/fölérendeltségi viszonyaik szerint kapcsolódnak egymáshoz. Szülő vagy ős: ahonnan kiindul az él Gyerek: ahova mutat az él A szülő tulajdonságai öröklődnek a gyerekre, amiket a gyerek pontosíthat (pl. transzformációk), vagy felülírhat (pl. színek)
Színtérgráf Virtuális világ tárolása Színtérgráf OGRE Irányított, körmentes gráf (DAG). A színtér ( világ) összes elemét tartalmazza. Az egyes elemek alá-/fölérendeltségi viszonyaik szerint kapcsolódnak egymáshoz. Szülő vagy ős: ahonnan kiindul az él Gyerek: ahova mutat az él A szülő tulajdonságai öröklődnek a gyerekre, amiket a gyerek pontosíthat (pl. transzformációk), vagy felülírhat (pl. színek)
Színtérgráf Virtuális világ tárolása Színtérgráf OGRE Irányított, körmentes gráf (DAG). A színtér ( világ) összes elemét tartalmazza. Az egyes elemek alá-/fölérendeltségi viszonyaik szerint kapcsolódnak egymáshoz. Szülő vagy ős: ahonnan kiindul az él Gyerek: ahova mutat az él A szülő tulajdonságai öröklődnek a gyerekre, amiket a gyerek pontosíthat (pl. transzformációk), vagy felülírhat (pl. színek)
Színtérgráf Virtuális világ tárolása Színtérgráf OGRE Irányított, körmentes gráf (DAG). A színtér ( világ) összes elemét tartalmazza. Az egyes elemek alá-/fölérendeltségi viszonyaik szerint kapcsolódnak egymáshoz. Szülő vagy ős: ahonnan kiindul az él Gyerek: ahova mutat az él A szülő tulajdonságai öröklődnek a gyerekre, amiket a gyerek pontosíthat (pl. transzformációk), vagy felülírhat (pl. színek)
Színtérgráf Virtuális világ tárolása Színtérgráf OGRE Irányított, körmentes gráf (DAG). A színtér ( világ) összes elemét tartalmazza. Az egyes elemek alá-/fölérendeltségi viszonyaik szerint kapcsolódnak egymáshoz. Szülő vagy ős: ahonnan kiindul az él Gyerek: ahova mutat az él A szülő tulajdonságai öröklődnek a gyerekre, amiket a gyerek pontosíthat (pl. transzformációk), vagy felülírhat (pl. színek)
Színtérgráf Virtuális világ tárolása Színtérgráf OGRE Irányított, körmentes gráf (DAG). A színtér ( világ) összes elemét tartalmazza. Az egyes elemek alá-/fölérendeltségi viszonyaik szerint kapcsolódnak egymáshoz. Szülő vagy ős: ahonnan kiindul az él Gyerek: ahova mutat az él A szülő tulajdonságai öröklődnek a gyerekre, amiket a gyerek pontosíthat (pl. transzformációk), vagy felülírhat (pl. színek)
Csomópontok Virtuális világ tárolása Színtérgráf OGRE A gráf egy csomópontja (csúcsa, node-ja) lehet geometria, transzformáció, anyagjellemzők, fényforrás, kamera.
Színtérgráf OGRE
Csomópontok tulajdonságai Színtérgráf OGRE Geometria A rendszer által támogatott tetszőleges modell leírás. Pl. Mesh. A gráfban levélként szerepel. Transzformáció Gyak. 4 4-es transzformációs mátrix. Az új transzformációs csomópont nem felülírja a megelőzőket, hanem azokkal együtt hat.
Csomópontok tulajdonságai Színtérgráf OGRE Geometria A rendszer által támogatott tetszőleges modell leírás. Pl. Mesh. A gráfban levélként szerepel. Transzformáció Gyak. 4 4-es transzformációs mátrix. Az új transzformációs csomópont nem felülírja a megelőzőket, hanem azokkal együtt hat.
Csomópontok tulajdonságai Színtérgráf OGRE Anyagjellemzők Színek, optikai tulajdonságok, textúrák, stb. Nyitott kérdés: hogyan ábrázoljuk, ha egy modellünk több textúrát is használ? Fényforrás Kamera Poziciója, iránya, típusa, színe, stb. Levele a gráfnak. Pozíciója, nézeti iránya, látószöge, stb. Levele a gráfnak.
Csomópontok tulajdonságai Színtérgráf OGRE Anyagjellemzők Színek, optikai tulajdonságok, textúrák, stb. Nyitott kérdés: hogyan ábrázoljuk, ha egy modellünk több textúrát is használ? Fényforrás Kamera Poziciója, iránya, típusa, színe, stb. Levele a gráfnak. Pozíciója, nézeti iránya, látószöge, stb. Levele a gráfnak.
Csomópontok tulajdonságai Színtérgráf OGRE Anyagjellemzők Színek, optikai tulajdonságok, textúrák, stb. Nyitott kérdés: hogyan ábrázoljuk, ha egy modellünk több textúrát is használ? Fényforrás Kamera Poziciója, iránya, típusa, színe, stb. Levele a gráfnak. Pozíciója, nézeti iránya, látószöge, stb. Levele a gráfnak.
Színtérgráf a gyakorlatban Színtérgráf OGRE Minden komolyabb 3D alakalmazás használ valamilyen szintérgráfot. Példák: Maya, Java3D OpenSceneGraph OGRE
Színtérgráf OGRE-ben Színtérgráf OGRE Ogre::SceneNode: általános osztály, amihez az aktuális elemeket hozzá lehet csatolni az Ogre::MovableObject osztályon keresztül. Tulajdonságai: Bounding box pozíció és összesített pozíció orientációra hasonlóan méretezés tetszőleges felhasználói adat
Ogre::MovableObject Színtérgráf OGRE
Ogre::MovableObject Színtérgráf OGRE Tulajdonságok: Saját bounding box Rejtett vagy sem? Vethet árnyékot? Milyen fények tartoznak hozzá? Transformációkat nem tartalmaz!
Ogre::Entity Virtuális világ tárolása Színtérgráf OGRE Egy kirajzolható objektum! Se nem maga az objektum geometriája, se nem az anyagjellemzői. Ezeket külön objektumok tárolják, ez az osztály csak hivatkozik rájuk. Geometria: Ogre::Mesh Anyagjellemzők: Ogre::Material
Színtérgráf OGRE-ben Színtérgráf OGRE...és még sok más objektum. Tanulság: Rengeteg specializált osztály, mindegyik csak a maga feladatával foglalkozik. Amit több helyen is fel lehet használni (Mesh, Material), azt nem kell feleslegesen többször létrehozni. Ahol közös tulajdonságok vannak, azok magasabb szinten vannak összefogva.
Színtérgráf összefoglaló Színtérgráf OGRE Valamilyen színtérgráfot érdemes implementálni. Szétválasztja az elhelyezést, a formát és a megjelenést. Lehetővé teszi az egymáshoz képesti relatív elhelyezést. DE, szem előtt kell tartani, hogy milyen szintig érdemes elbonyolítani.
Tartalom Virtuális világ tárolása 1 Virtuális világ tárolása 2 3 4
CSG modell Virtuális világ tárolása Constructive solid geometry: konstruktív tömör test geometria A modellünket = primitívek + műveletek Primitívek: téglatestek, hasábok, hengerek, gúlák, kúpok, gömbök. Műveletek: boolean műveletek, unió, különbség, metszet.
CSG modell Virtuális világ tárolása Constructive solid geometry: konstruktív tömör test geometria A modellünket = primitívek + műveletek Primitívek: téglatestek, hasábok, hengerek, gúlák, kúpok, gömbök. Műveletek: boolean műveletek, unió, különbség, metszet.
CSG modell Virtuális világ tárolása Constructive solid geometry: konstruktív tömör test geometria A modellünket = primitívek + műveletek Primitívek: téglatestek, hasábok, hengerek, gúlák, kúpok, gömbök. Műveletek: boolean műveletek, unió, különbség, metszet.
CSG modell Virtuális világ tárolása Constructive solid geometry: konstruktív tömör test geometria A modellünket = primitívek + műveletek Primitívek: téglatestek, hasábok, hengerek, gúlák, kúpok, gömbök. Műveletek: boolean műveletek, unió, különbség, metszet.
Különbség Metszet Unió Captain Sprite, en.wikipedia Captain Sprite, en.wikipedia Captain Sprite, en.wikipedia
CSG fa Virtuális világ tárolása A műveletek eredményein újabb művelet hajtható vége. object = primitive object = object operation object Bináris fával jól leírható! Belső csúcsok: műveletek Levelek: primitívek Gyökér: végleges objektum
CSG fa Virtuális világ tárolása A műveletek eredményein újabb művelet hajtható vége. object = primitive object = object operation object Bináris fával jól leírható! Belső csúcsok: műveletek Levelek: primitívek Gyökér: végleges objektum
CSG fa Virtuális világ tárolása A műveletek eredményein újabb művelet hajtható vége. object = primitive object = object operation object Bináris fával jól leírható! Belső csúcsok: műveletek Levelek: primitívek Gyökér: végleges objektum
CSG fa Virtuális világ tárolása A műveletek eredményein újabb művelet hajtható vége. object = primitive object = object operation object Bináris fával jól leírható! Belső csúcsok: műveletek Levelek: primitívek Gyökér: végleges objektum
CSG fa Virtuális világ tárolása A műveletek eredményein újabb művelet hajtható vége. object = primitive object = object operation object Bináris fával jól leírható! Belső csúcsok: műveletek Levelek: primitívek Gyökér: végleges objektum
CSG fa Virtuális világ tárolása A műveletek eredményein újabb művelet hajtható vége. object = primitive object = object operation object Bináris fával jól leírható! Belső csúcsok: műveletek Levelek: primitívek Gyökér: végleges objektum
CSG fa Virtuális világ tárolása Zottie, wikipedia
CSG modellek megjelenítése Inkrementális képszintézis: tesszelálni kell. Sugárkövetés: speciális sugár/model metszéspont számítás Ñ CSG-fa bejárása.
CSG modellek megjelenítése Inkrementális képszintézis: tesszelálni kell. Sugárkövetés: speciális sugár/model metszéspont számítás Ñ CSG-fa bejárása.
CSG modellek metszése Levél: triv., metszéspontok: p t 1 v és p t 2 v A sugár pp t 1 v, p t 2 vq szakaszon a primitív belsejében halad. Összes levélből: t 1... t n, elég ezeket vizsgálnunk. Szakasz-listákat fogunk nyílvántartani.
CSG modellek metszése Levél: triv., metszéspontok: p t 1 v és p t 2 v A sugár pp t 1 v, p t 2 vq szakaszon a primitív belsejében halad. Összes levélből: t 1... t n, elég ezeket vizsgálnunk. Szakasz-listákat fogunk nyílvántartani.
CSG modellek metszése Levél: triv., metszéspontok: p t 1 v és p t 2 v A sugár pp t 1 v, p t 2 vq szakaszon a primitív belsejében halad. Összes levélből: t 1... t n, elég ezeket vizsgálnunk. Szakasz-listákat fogunk nyílvántartani.
CSG modellek metszése Levél: triv., metszéspontok: p t 1 v és p t 2 v A sugár pp t 1 v, p t 2 vq szakaszon a primitív belsejében halad. Összes levélből: t 1... t n, elég ezeket vizsgálnunk. Szakasz-listákat fogunk nyílvántartani.
CSG modellek metszése Belső csúcsok: a gyerekektől származó szakasz-listákra is végrehajtjuk a műveletet Y Összeérő szakaszokat egyesítjük, különben hozzávesszük a listához. X Kiszámítjuk a szakaszok metszeteit. z Kivonjunk a szakaszokat egymásból. Gyökérben: a legkisebb pozitív t értékű pont lesz a szemhez legközelebbi metszés. Ha a metszések száma páros: kívül vagyunk az objektumon, ha páratlan, akkor a belsejében.
CSG modellek metszése Belső csúcsok: a gyerekektől származó szakasz-listákra is végrehajtjuk a műveletet Y Összeérő szakaszokat egyesítjük, különben hozzávesszük a listához. X Kiszámítjuk a szakaszok metszeteit. z Kivonjunk a szakaszokat egymásból. Gyökérben: a legkisebb pozitív t értékű pont lesz a szemhez legközelebbi metszés. Ha a metszések száma páros: kívül vagyunk az objektumon, ha páratlan, akkor a belsejében.
CSG modellek metszése Belső csúcsok: a gyerekektől származó szakasz-listákra is végrehajtjuk a műveletet Y Összeérő szakaszokat egyesítjük, különben hozzávesszük a listához. X Kiszámítjuk a szakaszok metszeteit. z Kivonjunk a szakaszokat egymásból. Gyökérben: a legkisebb pozitív t értékű pont lesz a szemhez legközelebbi metszés. Ha a metszések száma páros: kívül vagyunk az objektumon, ha páratlan, akkor a belsejében.
CSG modellek metszése Belső csúcsok: a gyerekektől származó szakasz-listákra is végrehajtjuk a műveletet Y Összeérő szakaszokat egyesítjük, különben hozzávesszük a listához. X Kiszámítjuk a szakaszok metszeteit. z Kivonjunk a szakaszokat egymásból. Gyökérben: a legkisebb pozitív t értékű pont lesz a szemhez legközelebbi metszés. Ha a metszések száma páros: kívül vagyunk az objektumon, ha páratlan, akkor a belsejében.
CSG modellek metszése Belső csúcsok: a gyerekektől származó szakasz-listákra is végrehajtjuk a műveletet Y Összeérő szakaszokat egyesítjük, különben hozzávesszük a listához. X Kiszámítjuk a szakaszok metszeteit. z Kivonjunk a szakaszokat egymásból. Gyökérben: a legkisebb pozitív t értékű pont lesz a szemhez legközelebbi metszés. Ha a metszések száma páros: kívül vagyunk az objektumon, ha páratlan, akkor a belsejében.