220 likes | 359 Views
Sectionarea obiectelor 3D. Cernea Alina – 343 C4 Radulescu Lucian – 343 C4. Ideea implementarii :. Reprezentarea kiwiului ca un skydome dublu. Reprezentarea miezului ca un “triangle fan” (triunghiuri asezate ca feliile de pizza). Probleme si solutii:. 1. Textura 2. Cursivitatea texturii
E N D
Sectionarea obiectelor 3D Cernea Alina – 343 C4 Radulescu Lucian – 343 C4
Ideea implementarii : • Reprezentarea kiwiului ca un skydome dublu. • Reprezentarea miezului ca un “triangle fan” (triunghiuri asezate ca feliile de pizza).
Probleme si solutii: • 1. Textura • 2. Cursivitatea texturii • 3. Legatura intre clase (corp fruct si miez) • 4. Ajustarea taieturilor
TexturaProbleme • Nu se potrivea textura pentru miez. • Nu am gasit textura pentru coaja.
Textura [1]Solutii • Pentru miez, doar am ajustat dimensiunile imaginii texturate. • Pentru coaja, am decupat din doua imagini bucati de coaja. Aceste decupaje le-am suprapus cu un anumit grad de transparenta (40%). • Am scalat imaginea obtinuta si am facut un pattern pentru o imagine mai mare. ( I )
Textura [2]Solutii • Am repetat pasul anterior de 2 ori. ( II & III ) • Am editat in Gimp imaginea, am adaugat nuante de culoare (verde / maro). ( IV ) • Am aplicat textura pe model pentru a obtine rezultatul final ( un kiwi ). ( V )
I II III IV V
2. Cursivitatea texturiiProblema • Textura nu era cursiva. • Se puteau vedea liniile de taiere dintre diferitele bucati ale fructului.
2. Cursivitatea texturiiSolutia • O varianta a fost desenarea celei de-a doua jumatati a fructului in sens invers. • Am folosit functia glScalef(1,1,-1) pentru a rasturna apoi cea de-a doua jumatate. • Astfel linia de taietura a devenit invizibila.
3. Legatura intre clase Problema • Fructul este creat dintr-un obiect de tipul HalfKiwiSkin si mai multe obiecte de tipul Miez • Aceste obiecte trebuiesc mentinute in legatura permanenta, astfel incat orice modificare a corpului kiwiului sa lanseze modificarile corespunzatoare ale miezului.
3. Legatura intre clase Solutia • Clasa HalfKiwiSkin are o colectie de obiecte de tipul Miez, pe care le initializeaza in constructor. • Astfel, in desenarea obiectului putem apela functiile de transformare proprii ale clasei Miez. • Desenarea obiectelor Miez se face insa in main, dupa desenarea corpului fructului.
4. Ajustarea taieturilor [2] Problema • Initial varfurile ce conturau taietura nu reprezentau un cerc perfect. • Problemele se rasfrangeau si asupra pozitionarii miezului.
4. Ajustarea taieturilor Solutia • Recalcularea indicelui corespunzator varfului care inchidea perfect o banda din dom.
Cum se poate dezvolta proiectul ? • Fiecare felie sau bucata din kiwi poate sa fie construita ca un obiect independent fata de celelalte. • Putem sectiona kiwi-ul si longitudinal (chiar in acelasi timp cu o sectiune transversala ); pentru aceasta implementare insa este bine sa folosim alta imagine de textura.
Cateva detalii [1]de implementare • Am utilizat clasele HalfKiwiSkin si Miez. • Fiecare clasa implementeaza metodele de setare a pozitiei si de desenare.
Cateva detalii [2] de implementare • In constructorul clasei HalfKiwiSkin se calculeaza efectiv varfurile si sliceurile jumatatii de kiwi. • In constructorul clasei Miez se seteaza raza si numarul de varfuri iar constructia efectiva si texturarea sunt implementate in metoda de desenare a clasei.
Cateva detalii [3]de implementare • In Main.cpp se afla toate functiile care uploadeaza texturile. Tot aici se initializeaza instantele clasei HalfKiwiSkin. • Ca punct de plecare pentru intregul proiect am utilizat scheletul laboratorului 4.