Igrica, problem kolizije zbog diskretizacije vremena

Pozdrav, neznam jesam li izabrao najbolju riječ. Pod diskretizaciju mislim na svojstvo vremena da se ne odvija kontinuirano, nego se svaki frame iscrta nakon određenog intervala.

Naravno, nije problem kod crtanja, nego pozadinske matematike koja onda također ne može biti kontinuirana, nego se dešava u prekidima.

Konkretan problem mi je kod kolizije. Naime, u ovakvim uvjetima je nemoguće detektirati koliziju kad se stjenke objekata taman spoje…nego se mora desiti određeno (malo) preklapanje između dva objekta.

To sam prvo rješio tako da nakon detekcije kolizije, vratim objekt u koordinate gdje se sudar teoretski trebao desit. To sam nazvao “umjetna korekcija”.
Ta umjetna korekcija je dobro funkcionirala, dok nisam krenuo u smjeru da imam više objekata koji se sudaraju.
Što se sad dešava, ukoliko imam tri objekta na sceni: objekat1(o1), objekat2 (o2) i objekat3(o3), kreću se i međusobno nalaze ovako: o1>> o2<< o3<<<
Prvo treba doći do sudara o1 i o2, neposredno nakon toga sudar o2 i o3. No zbog diskretizacije vremena, desi se preklapanje o1 i o2. Nakon umjetne korekcije i zbog neposredne blizine, u istom fremu nastane preklapanje o2 i o3, i eto vraga s bugovima

U sljedećem postu ću objasniti koje prirode su bugovi, ali pitanje je već dovoljno formulirano. Kako se najbolje nositi s tim preklapanjima? U kojem smjeru razmišljati??

Bugovi nastaju iz razloga zbog pogrešne procjene kolizije, uzrokovano također diskretizacijom vremena. No umjetna korekcija drastično povečava šansu za pogreškom.

Naime, kod svake kolizije procjenjujem i smijer iz koje se kolizija desila.(gore, dolje, lijevo ili desno).

Prvo sam smjer utvrđivao tako da pogledam s koje strane je najmanje preklapanje. To nije dugo funkcioniralo bez buga. Glavni lik sa viskoka skoči na rub neke podloge. Zbog velike brzine padanja, propad bude veći nego odmak ruba, i kolizija detektira sudar s rubom umjesto s gornjom plohom.
Grešku sam eliminirao tako da promatram i razlike brzine objekata kod kolizije. Npr. ako je razlika horizontalne brzine 0 (v_h=0), nemoguć je sudar s lijeva ili desna. Ako je v_h>0, nemoguć je sudar s desna…itd u krug, pazeći na predznak brzina. Još sam dodao izračun delta t koji protekne od trenutka teoretski pravog sudara. Onaj t koji proteče za vrijeme preklapanja. Pomoću tog delta t i brzina objekata, mogu znati točno jel se preklapanje prije desilo s gornje ili desne strane.

To je funkcioniralo dobro dok umjetna korekcija nije izazvala koliziju. Ako umjetna korekcija izazove koliziju…znači da se objekt pojavio negdje (ne uzrokovano vlastitom brzinom), i kolizija može tad shvatiti da se desio sudar s gornje ili donje strane, umjesto recimo s lijeva.

Umjetna korekcija mi se čini nezaobilaznom, no kako izbjeći probleme koje uzrokuje?

Svaki prijedlog dobrodošao, unaprijed hvala!

A neki game engine, da si skratiš muke?
Npr: https://www.scirra.com/

2 Likes

Da, ali to je zadnji korak. Putem se ipak nauči puno vrijednih stvari.

Za sad sam našao svoj problem: http://www.wildbunny.co.uk/blog/2011/03/25/speculative-contacts-an-continuous-collision-engine-approach-part-1/

…čini se da je kompleksnije nego sam i mislio, treba to sad prožvakat…
Ako slučajno koja duša to također misli prožvakat, neka se javi…da možemo diskutirati o nejasnoćama :smile:


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Profit Monkey