Java → Processing → Processing 3D s → Sunčev sistem u 3D – hijerarhijske transformacije
Sunčev sistem u 3D Processing-u – hijerarhijske transformacije
U ovoj lekciji prelazimo na napredniji koncept 3D grafike – hijerarhijske transformacije. To znači da objekti mogu da budu “roditelji” i “deca”, pa njihovo kretanje zavisi od strukture sistema.
Na praktičnom primeru Sunčevog sistema videćemo kako se planeta može kretati oko Sunca, a mesec oko planete, koristeći samo transformacije i matricni sistem.
- kako funkcionišu hijerarhijske transformacije
- kako se prave orbite planeta
- kako se koristi rotate + translate za kretanje
- kako se kreiraju 3D scene sa teksturama
- kako se kombinuju kamera i osvetljenje
Koncept – Sunčev sistem kao hijerarhija
U 3D grafici svaki objekat može imati “dete” koje nasleđuje njegovu transformaciju. U ovom primeru:
- Sunce → centar sistema
- Zemlja → rotira oko Sunca
- Mesec → rotira oko Zemlje
Kada se Sunce ne pomera, ali se Zemlja rotira oko njega, to je rezultat kombinacije
rotate() i translate() transformacija.
Interaktivna 3D animacija
Sledeća animacija prikazuje Sunčev sistem u realnom vremenu. Planete se kreću po orbitalnim putanjama i rotiraju oko svoje ose.
3D Sunčev sistem – p5.js simulacija
Ako animacija ne radi, osvežite stranicu (refresh).
Kako funkcioniše kretanje planeta?
Svaka planeta ima dva kretanja:
- orbitalno kretanje – oko Sunca
- rotacija oko ose – sopstvena rotacija
Ova dva kretanja se kombinuju pomoću uglova koji se stalno povećavaju u draw() funkciji.
- angle += speedRotation → orbita
- angleOwn += speedOwnRotation → rotacija
Važan koncept – hijerarhijske transformacije
Zemlja se ne pomera “nezavisno”, već u odnosu na Sunce. To se postiže tako što se transformacije “nasleđuju” kroz sistem objekata.
Sunce → Zemlja → Mesec
Svaki sledeći objekat koristi koordinatni sistem prethodnog.
Ako se objekti ponašaju “čudno” ili nestaju iz scene, najčešći uzrok je pogrešan redosled transformacija ili nedostatak push()/pop() blokova.
Kontrola kamere
Kamera se može pomerati pomoću tastature:
- ← → pomeranje po X osi
- ↑ ↓ zoom (Z osa)
- Q / W pomeranje po Y osi
Šta smo naučili?
- Kako funkcionišu orbite u 3D prostoru
- Kako se koristi hijerarhija objekata
- Kako se kombinuju transformacije (translate, rotate)
- Kako se pravi realna simulacija Sunčevog sistema
U narednoj lekciji prelazimo na napredne 3D koncepte: kamera u pokretu, interakcija sa mišem i generisanje kompleksnih scena.
KRETANJE 3D OBJEKATA U PROCESSING-U
Da bi smo kreirali 3D objekte u processing-u možemo to uraditi na nekoliko načina:- koristiti ugrađene metode processing-a za crtanje osnovnih 3d oblika:
- Koristiti klasu PShape
- Samostalno kreirati oblik koristeći: beginShape().....endShape()
Crtanje osnovnih 3D oblika pomoću Processingovih metoda
Na ovaj način možemo kreirati osnovne oblike: lopta, kocka:Metode koje se koriste:
Animacija 3D: Kretanje zemlje oko sunca - processing
Animacija kretanja Zemlje oko Sunca je prikazana ispod. Pri tome Zemlja vrši dve rotacije:- rotacija Zemlje oko Sunca
- rotacija Zemlje oko svoje ose
Animacija3D: Rotacija Zemlje oko Sunca
Animacija ne radi? Učitajte stranicu ponovo(refresh)
← scroll horizontal →
Kretanje Zemlje oko Sunca animacija 3d - kod u processing-u
U sledećem članku je opisano kako se kreira ova animacija upotrebom javascript biblioteke p5.js: kosi-hitac.onrender.com/sunce_zemlja_mesec_animacijaU animaciji rotacije Zemlje oko Sunca koristi se klasa PShape, kao što se može videti u kodu na slici 1. Da bi se kreirala tekstura slike, potrebno je ubaciti slike koje ćemo koristiti za teksturu zemlje i sunca i to u data folder, koji se nalazi u korenom folderu aplikacije. Unutar glavnog scatch-a definišu se objekti klase PImage, sunceIm i zemljaIm, koji će predstavljati slike za kreiranje teksture. Zatim se deklarišu konstante, koje redom predstavljaju poluprečnike Zemlje, Sunca i 2 poluose elipse, koja predstavlja putanju Zemlje oko Sunca. Takođe se definišu i promenljive koje se koriste za definisanje položaja kamere u x, y i z pravcu i uglovi rotacijefiZ - ugao rotacije Zemlje oko svoje ose
fiS - ugao rotacije Zemlje oko Sunca
wiz- ugaona brzina rotacije Zemlje oko svoje ose
wis - ugaona brzina rotacije Zemlje oko Sunca
Brzina rotacije Zemlje je proizvoljna i ne odgovara stvarnim vrednostima, već je modifikovana da bi kretanje zemlje moglo da se uoči.
Unutar setup metode se kreiraju objekti Zemlje i Sunca, slike Zemlje i Sunca.
Tekstura se na objekat postavlja sa setTexture(slika) metodom, gde se slika prosleđuje metodi kao parametar.
Kamera se zatim postavi na koordinate camX, camY i camZ, a fokus kamere je u centru koordinatnog sistema. Sa poslednja 3 parametra se definiše koja se koordinatna osa nalazi na vrhu prikaza i to je u ovom slučaju z osa.
Za lepši prikaz koristi se usmerena svetlost directionalLight(), približno bele boje i koja je usmerena između pravca x i z ose i to u negativnom smeru.
Pre nego što se iscrta objekat koji predstavlja planetu Zemlju, koordinatni sistem se rotira oko Y ose za ugao fis, koji zapravo predstavlja ugao rotacije Zemlje oko Sunca.
Na kraju draw() metode se uglovi rotacije fis i fiz povećaju za vrednosti ugaonih brzina, Zemlje oko Sunca i Zemlje oko svoje ose.
Prethodno
|< Uvod u 3D processing
