IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

A predsa sa točí!

Aký by to bol svet bez pohybu! Tak si teraz náš 3D svet trochu rozhýbeme. Budeme pokračovať v programe 3D z minulej lekcie. Najskôr ho upravíme a až potom až si vysvetlíme čo a ako sa v programe deje.

Do hlavnej slučky programu doplňte prvok rotácie podľa osi Y, ktorý nájdete v skupine grafika / 3D grafika / transformácie. Pri každom priechode slučkou prečítajte aktuálnu hodnotu prvku, pripočítajte k nej 0.05 a výsledok nastavte ako novú hodnotu prvku.

3D grafika

Ak spustíte program, uvidíte planétu Zem, ako sa otáča okolo svojej osi. A teraz sa pozrieme, čo program vlastne robí.

3D svet je v skutočnosti statický svet. Nič sa v ňom samo nehýbe, všetko sa nachádza presne v takom stave, do akého to uvedieme my. To platí aj o polohe a stave objektov. Ak chceme objekty rozpohybovať, musíme opakovane, v závislosti na čase, meniť ich polohu a stav. Čiže objekty animovať.

K rozhýbanie objektov potrebujeme mať súradný systém. Ten nám udáva polohu objektu v 3D svete vzhľadom k akémusi pomyselnému počiatku. Systém Petr používa implicitne tzv. Ľavoruký Karteziánsky súradnicový systém, používaný tiež v DirectX. Označenie Ľavoruký je preto, že ukazuje ak ukazovák ľavej ruky smerom prvej súradnice (X), sklopený prostredník smerom druhej súradnice (Y), potom zdvihnutý palec ukazuje smer tretej súradnice (Z). Alebo ak chcete, ešte iná mnemotechnická pomôcka: Ak postavíme sa tak, aby sme sa pozerali smerom prvej súradnice (X), hore aby mierila druhá súradnice (Y), potom ľavá ruka upažené do strany ukazuje smer tretej súradnice (Z).

3D grafika

Grafické rozhranie OpenGL naproti tomu používa pravoruký Karteziánsky súradnicový systém. Každý zo systémov má svoje opodstatnenie. Pravoruký systém je akademickým systémom a je chápaný tak, že ak máme na stole položený papier s osami X a Y, potom tretia os Z vystupuje nahor z papiera a znamená výšku. Je preto vhodný napr. V kartografii. Naproti tomu Ľavoruký systém môžeme chápať tak, že smeruje ak osa X vpravo a os Y hore, potom sa pozeráme smerom vpred, v smere kladnej osi Z. Súradnice Z predstavuje vzdialenosť od nás čiže hĺbku. Preto je Ľavoruký systém vhodnejšie pre použitie v počítačovej 3D grafike. V prípade potreby možno v Petrovi súradný systém zmeniť pomocou prvku typ projekcie.

Polohu objektu v 3D svete určujeme pomocou transformáciou. Transformácia sú operácie, ktoré vykonávame s objektom - posun, otočenie, zmena veľkosti. Každá z transformácií sa uskutočňuje v jednom zo smerov X, Y, Z. Transformácia sa dajú chápať ako poloha objektu - napr. Prvok posun v smere X je súradnice X objektu v 3D svete. Ak chceme posunúť objekt v smere X o vzdialenosť 0.1, zmeníme hodnotu tohto prvku o hodnotu 0.1.

Poradie transformácií nie je pritom určené tým, v akom poradí transformácie zadávame. Poradie transformácií je pevne dané a ich interpretácia je taká, že všetky transformácie sa vykonajú z nulového stavu objektu pri každom renderovanie snímky. V systéme Petr je poradie transformáciou nasledovné:

  1. zmena mierky v smeroch X, Y a Z
  2. rotácia podľa osi X (sklopenie objektu)
  3. rotácia podľa osi Y (nastavenie smeru)
  4. rotácia podľa osi Z (natočenia)
  5. posun v smeroch X, Y a Z

Najskôr sa nastaví veľkosť objektu - aby sme si mohli pripraviť objekt v potrebnej veľkosti. Potom sa objekt otáča okolo svojho stredu podľa zadaných rotáciou. Nakoniec sa objekt posunie na cieľovú absolútnu súradnici. Uvedené poradie rotáciou XYZ je implicitná a je možné ho zmeniť prvkom poradie rotáciou. U levorukého systému sa smer rotáciou robí podľa pravidla ľavej ruky - palec ukazuje smer osi, okolo ktorej sa rotácia vykonáva, a sklopené prsty ukazujú smer rotácie.

Ďalšou vlastnosťou transformáciou je, že objekty je možné spájať do väčších celkov. Potomkovia pripojenie k objektu dedí jeho transformácie, jednotlivé transformácie sa skladajú. Pripojený objekt mení napr. Svoju veľkosť spolu so zmenou veľkosti rodičovského objektu.

Vyskúšame si to. Pridáme k našej Zemi ešte geostacionárnej satelitný družicu, ktorá bude obiehať Zem nad jej povrchom. A ako je známe, geostacionárne družice sa pohybuje nad rovníkom tak, akoby sa držala stále nad jedným miestom zemského povrchu.

Pre udržanie prehľadu premenujte prvok ID na ID Zeme a textúru Zeme na textúra Zeme. Príkazy pre vytvorenie Krajina presuňte do samostatnej skupiny vytvorenia Zeme. Pripravte si ďalší prvok, s názvom ID družice. Družicu vytvoríte PRED vytvorením Zeme, v skupine vytvorenie družice. Použite na to prvok kužeľ, ten by nám mohol dobre poslúžiť ako model družice. Mierka družice v smere X nastavte napr. Na 0.05. Bude to síce nejgigantičtější družice na svete, ale radi by sme v okne niečo videli. Namiesto nastavovanie mierky v ostatných smeroch použite hodnotu prvku mierky v smere X - ľahšie sa potom mení merítko pre všetky smery naraz. Kužeľ sa vytvorí otočený špičkou nahor, preto ho otočíme podľa osi Z o 90 stupňov doprava. Tým ho sklopíme tak, že špička bude teraz ukazovať smerom doľava. Nakoniec posunieme satelit o 0.55 smerom k nám (teda záporne v smere Z), inak by zostal v strede Zeme. Teraz ešte družicu pripojíme k Zemi pomocou prvku pripojenia., Ktorý uvedieme na konci skupiny pre vytvorenie Zeme. Tým sme družicu k Zemi prilepili. Preto sme ju vytvárali pred vytváraním Zeme, aby sme už poznali jej ID a mohli ju pripojiť.

3D grafika

Keď program spustíte, mala by sa nad povrchom Zeme objaviť maličká družice, ktorá sa otáča spolu so Zemou.

3D grafika

K Zemi samozrejme neoddeliteľne patria Mesiac. Textúru nájdete na konci lekcie, pridajte ju do programu pod názvom textúra Mesiaca.

3D grafika

Pripravte číselnú premennú ID Mesiaca. Za príkazy pre vytvorenie Krajina pripravte ďalšiu skupinu, označenú vytvorenie Mesiaca. Najskôr nastavte zložitosť objektu na 8, vytvorte objekt Mesiaca pomocou gule (výsledný ID sa uloží do premennej ID Mesiaca), nastavte objektu textúru Mesiaca, mierka objektu zmeňte na 0.2, objekt posuňte o 0.7 v smere k nám (tj. -0.7 v smere Z ).

Keď teraz program spustíte, objaví sa pred Zemou Mesiac. Samozrejme sa nehýbe. Keby sme ho pripojili k Zemi, otáčal by sa spolu so Zemou podobne ako družice, čo nechceme. Chceme, aby sa pohyboval pomalšie. Vzhľadom k danému poradí transformáciou nemôžeme objekt Mesiaca posunúť zo stredu a až potom celú sústavu otočiť. Preto použijeme pomocný objekt, skupinu, ktorú nájdete v grafika / 3D grafika / vytvoriť. Pozor, nezameniť s rovnomenným prvkom skupina, používaným k zhromaždeniu viacerých programových prvkov. Objekt skupina je tiež plnohodnotný 3D objekt, neobsahuje však žiadny viditeľný prvok. Slúži iba na spájanie viacerých objektov do jednej skupiny a na vykonávanie doplnkových transformáciou.

Pripravte si ďalšie číselnú premennú, ID skupiny Mesiaca. Na koniec skupiny príkazov pre vytvorenie Mesiaca pridajte príkaz pre vytvorenie objektu skupiny Mesiaca. K objektu skupiny Mesiaca pripojte objekt Mesiaca.

3D grafika

Pri spustení programu nie je zrejmá žiadna zmena, samozrejme. Teraz Mesiac rozhýbe a to tak, že celú skupinou budeme otáčať podobne ako Zemou. Chceme manipulovať s iným objektom než bola Zem a to znamená, že musíme už programe hovoriť, s ktorým objektom budeme otáčať. Slúži na to prvok aktívny objekt. Pomocou tohto prvku vyberieme najskôr na začiatku programové slučky ID Krajina, jedným príkazom zaistíme otáčanie Zeme, potom vyberieme ako aktívny objekt ID skupiny Mesiaca a potom ďalším príkazom zaistíme obiehania Mesiaca okolo Zeme. Zvolíme ale nižšiu rýchlosť ako akou sa otáča Zermat, dajme tomu 0.01.

3D grafika

A už zostáva len spustiť. Vidíte, ako sa Mesiac pomaly a majestátne tmoliť okolo Zeme a vzhliada na ňu stále rovnakú strane rezu tvárou. Galileo by z nás mal radosť!

3D grafika

 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 266x (303.16 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Petr Lite (sú obsiahnuté v EXE súbore, ktorý možno v programe priamo otvoriť)

 

Všetky články v sekcii
3D grafika
Článok pre vás napísal Panda38
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programátor C++, WinAPI, ASM.
Aktivity