Archyvas (pagal kategoriją) ‘Žaidimų fizika’
Žaidimų fizika – objekto pozicionavimas ant trimačio (3D) paviršiaus (angl. terrain)
Trimačiuose žaidimuose automobiliai, žmonės ar kiti objektai dažniausiai juda žemės paviršiumi. Nors tikrovėje tai atrodo paprasta ir natūralu trimatėje erdvėje šiems veiksmams modeliuoti reikalinga atlikti tam tikrus nesudėtingus geometrinius skaičiavimus. Matematiškai šnekant sprendžiamas objekto pozicionavimo ant paviršiaus uždavinys. Trimatėje erdvėje dažnai naudojami iš trikampių sudaryti paviršiai ir objektai į šiuos trikampius „remiasi“ atitinkamais atraminiais taškais (1 pav.). Šiems taškams dažniausiai reikia surasti y (aukščio) koordinatę, nes jų x ir z koordinatės paprastai būna žinomos.
1 pav. Objekto – paviršiaus atramos taškai
Kaip matome, kad galėtume apskaičiuoti objekto poziciją ant paviršiaus ir pasvyrimo kampą reikalinga rasti šiuos, su paviršiumi besiliečiančius, atramos taškus. Tai galime atlikti trimis paprastais žingsniais:
- Rasti trikampius į kuriuos patenka atramos taškai;
- Rastuose trikampiuose nustatyti ieškomų atramos taškų pozicijas;
- Pagal rastas pozicijas atlikti objekto pasukimus ir pozicionavimą.
1. Trikampio radimas
Kaip jau buvo minėta anksčiau paviršiai dažnai būna sudaryti iš trikampių. Priklausomai nuo modelio šių trikampių sandara (topologija) gali būti tvarkinga arba netvarkinga. Esant tvarkingai sandarai trikampių išsidėstymas primena stačiakampį tinklelį (2 pav.).
2 pav. Tvarkinga trikampių sandara ir ieškomas taškas
Tvarkingos sandaros atveju surasti trikampį į kurį patenka ieškomas taškas galima gana paprastai. Pirmu žingsniu reikia patikrinti ar taškas P’ tikrai patenka į tinklelį t. y. ar jis patenka į tinklelio pradžios koordinatėmis P(0,0) ir aukščiu v bei pločiu h nusakomais rėžiais:
Antru žingsniu reikalinga surasti tinklelio gardelę į kurią patenka taškas P’. Tam reikia taško P’ koordinates atimti iš tinklelio pradžios taško koordinačių P(0,0) ir padalinti atitinkamai iš gardelės aukščio ir pločio:
Gautųjų reikšmių sveikosios dalys nurodo gardelę kurią sudaro du trikampiai. 2 paveiksle tai atitinka trikampius sudarytus iš viršūnių v0, v1 , v2, ir v3.
Trečiuoju žingsniu randamas trikampis kuriame yra taškas P’. Jeigu tinklelio gardelės kvadratinės tai trikampį galima surasti paprasčiausiai lyginant taško vertikalią ir horizontalią dedamąsias gardelės pradžios taško v0 atžvilgiu:
– taškas priklauso trikampiui v0, v2, v3
– taškas priklauso trikampiui v0, v1, v2
Jei gardelė yra stačiakampis (nekvadratinė) tada trikampio į kurį patenka taškas radimui reikalinga lyginti jos aukščio ir pločio santykius:
– taškas priklauso trikampiui v0, v2, v3
- taškas priklauso trikampiui v0, v1, v2
Kai paviršiaus konstrukcija pasižymi netvarkinga sandara pirmasis metodas netinka. Tokiu atveju būtų galima tikrinti taško patekimą visiems trikampiams, tačiau toks sprendimas nėra optimalus todėl į pagalbą pasitelkiami taip vadinamieji erdvės dalinimo algoritmai (angl. space partitioning). Vienas jų – paprastas ir gana efektyvus – sudalinti paviršiaus užimamą erdvę į stačiakampį tinklelį ir to tinklelio gardelėms (angl. cells) priskirti į jas patenkančius trikampius (3 pav.).
3 pav. Netvarkinga trikampių sandara ir kvadratinis tinklelis
Kaip matome iš 3 paveikslo raudonas stačiakampis tinklelis perdengia kelis trikampius, todėl skirtingoms gardelėms gali būti priskiriami tie patys trikampiai. Pavyzdžiui gardelei (0,0) priskiriami A, B, C, D, E, F, G trikampiai, o gardelei (0, 1) priskiriami G, H, D, J trikampiai.
Tikrinant taško patekimą pirmiausiai surandama gardelė į kurią taškas patenka, o tada tikrinama kuriam iš gardelei priskirtų trikampių taškas priklauso. Vienas iš būdų nustatyti ar taškas priklauso trikampiui yra parametrinės plokštumos lygties sprendimas (4 pav.).
4 pav. Taško plokštumoje aprašymas u ir v parametrais
Kaip matome iš 4 paveikslo taško P poziciją plokštumoje galime nusakyti tokia formule:
Paprastumo dėlei išraiškas (B-A) ir (C-A) užrašome vektoriais rAB ir rAC, o A perkėlę į kitą lygties pusę gautą išraišką (P-A) užrašome kaip vektorių rAP. Tokiu būdu pertvarkę lygtį gauname:
Kadangi turime du nežinomuosius reikalingos dvi lygtys, kad galėtume juos rasti. Abiejoms lygties pusėms atlikę skaliarinę sandaugą su rAB ir rAC, gauname:
Pertvarkome (5):
Turime dvi lygtis ir du nežinomuosius todėl galime išsivesti u ir v:
Apskaičaivus u ir v reikšmes tikrinama ar tenkinamos sąlygos u > 0 ir v > 0 ir u+v < 1. Jei šios sąlygos tenkinamos taškas priklauso trikampiui.
2. Taškų pozicijos (aukščio) nustatymas
Nustačius faktą, kad taškas priklauso trikampiui reikalinga nustatyti ieškomo taško aukščio poziciją y (kadang x ir z pozicijos yra žinomos). Tam reikia nustatyti kurioje vietoje taškas guli trikampio plokštumoje. Šio uždavinio sprendimas remiasi tuo kad trikampio normalės (vektoriaus statmeno trikampio plokštumai) ir ant plokštumos gulinčio vektoriaus skaliarinė sandauga yra lygi 0 (5 pav.).
5 pav. Plokštuma ir taškas P ant jos
Kadangi ieškomo taško x ir z koordinatės žinomos tai iš 8 lygties galime išskaičiuoti P taško y reikšmę:
Iš 9 lygties išsivedę Py gauname:
3. Objekto pasukimas
Objekto pozicionavimui ant erdvinio paviršiaus dažniausiai naudojami keturi atramos taškai. Jie nebūtinai turi būti išdėstyti stačiakampiu. Automobilio modeliui, pavyzdžiui, dažnai naudojama schema pateikta 6a paveiksle. Kaip matome iš paveikslo objektą reikalinga sukti atitinkamai pagal vieną ir kitą ašį. Tam galima pritaikyti sinusų teoremą (6b pav.).
6 pav. Objekto pasukimas ir pozicionavimas
Iš sinusų teoremos išsivedus α gauname ieškomo objekto vienos iš ašių pasvyrimo kampo formulę:
Atitinkamai apskaičiuojama ir kita posvyrio objekto ašis.
3 pav. Netvarkinga trikampių sandara ir kvadratinis tinklelis
Kaip matome iš 3 paveikslo raudonas stačiakampis tinklelis perdengia kelis trikampius, todėl skirtingoms gardelėms gali būti priskiriami tie patys trikampiai. Pavyzdžiui gardelei (0,0) priskiriami A, B, C, D, E, F, G trikampiai, o gardelei (0, 1) priskiriami G, H, D, J trikampiai.
Tikrinant taško patekimą pirmiausiai surandama gardelė į kurią taškas patenka, o tada tikrinama kuriam iš gardelei priskirtų trikampių taškas priklauso. Vienas iš būdų nustatyti ar taškas priklauso trikampiui yra parametrinės plokštumos lygties sprendimas (4 pav.).
Sveiki visi! Tikimės, kad jau pasiilgote naujienų, todėl nieko nelaukdami pristatome jums antrąjį pirmojo Lietuvoje atviro animacijos projekto “2011″ trailerį (animatic, production trailer). Tuo pačiu norime pasveikinti visus dalyvavusius InfoShow 3D konferencijoje bei šios konferencijos organizatorius. Dėkui už klausimus, šiltą sutikimą ir palaikymą !
Projektas “2011″ – Production traileris








