Autor Wątek: Animowanie rzutów kostką  (Przeczytany 2869 razy)

Offline mb

  • Użytkownik

# Październik 05, 2008, 22:56:26
Witam
Próbuję stworzyć animację rzutu kostkami do gry. W grze będzie rzucać się 2 kostkami. Udało mi się zrobić kolizje pomiędzy tymi kostkami (przy zderzeniu odbijają się od siebie), jednakże nie  bardzo wiem w jaki sposób sprawić, aby zakończenie ruchu było realistyczne.
Kolizje kostek zaimplementowałem przyjmując, że tak naprawdę są to kule (liczyłem tylko odległości środków kostek od siebie).
Kostki jednak są sześcienne i tutaj powstaje problem. Przy upadku na płaszczyznę, powinny obracać się względem różnych osi (w zależności od tego na którą krawędź upadną).

Chciałbym ten problem uogólnić, czyli zapytać jak animować niesferyczne obiekty (zawierające kanty), a także jak uwzględniać obrót przy ruchu (jak obiekty podkręcone poruszają się inaczej).

Dziękuję z góry za nakierowanie na jakieś tutoriale lub opisanie rozwiązania (lub chociaż wskazówek).

Starałem się szukać na google rozwiązań, ale pod frazami jakie wpisywałem, nie znalazłem nic istotnego.





Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kos

  • Użytkownik
    • kos.gd

# Październik 05, 2008, 23:10:02
Problem wydaje mi się złożony. Jeśli chcesz realistyczną animację, wg mnie nie da się tego naprawdę dobrze zrobić bez symulacji fizycznej tych kostek (keyword: bryła sztywna). Możesz napisać taką symulację samemu (miłej zabawy ;)) lub użyć jakiegoś silniczka fizycznego (ot choćby Open Dynamics Engine).

Offline Kurruk

  • Użytkownik

# Październik 05, 2008, 23:13:31
Z fizyka sie nie bawilem, ale powinienes poszukac o kolizjach z "bounding box".
Ogolnie technika ubierania obiektow ktore uczestnicza w kolizjach jest zwane tworzeniem bounding volume. Powinienes o tym poszukac, jako zacheta:
WikiPedia

Offline voytech

  • Użytkownik

# Październik 06, 2008, 20:44:42
Tak jak inni wspomnieli, najlepiej będzie zastosować jakąś bibliotekę do obliczeń fizyki.

Jest też inny sposób.

Możesz na przykład stworzyć w Blenderze dwie kostki i stół, a następnie w BGE (Blender Game Engine) zrobić prostą symulacje rzutu z wykorzystaniem jego silnika do obliczeń fizyki. Następnie ustawić "Record Game Phisics to IPO" i ten ruch "nagrać". Stworzenie takiej animacji zajęło mi może z 5 minut i jest to bardzo proste.

Przy pomocy skryptu takie ścieżki ruchu można łatwo odczytać i zapisać do pliku, który potem można wczytać do swojego programu i odtworzyć. Na każdą kostkę przypada sześć ścieżek, położenie w każdej klatce (x,y,z) oraz obrót (ax,ay,az). Wystarczy więc nagrać kilka rodzajów rzutu z różną siłą pod różnym kątem i losowo odtwarzać we własnym programie.

Co prawda jest to taka "oszukańcza" symulacja fizyki we własnym programie, ale bardzo łatwa do wykonania :).

yfan

  • Gość
# Październik 06, 2008, 21:13:03
Luknij na Irrlicht 3D Engine / Newton Physics Demo ;)

W opisie masz:
Source code included. ;)

yfan

  • Gość
# Październik 06, 2008, 21:44:04
Ale po co fizyka?
Miałem przez 5 lat na kompie granie w kości i tam było rozwiązane to w ten sposób, że każda kostka szła pod innym kontem. Dopiero po zatrzymaniu była widoczna liczba oczek. Animka była w ten sposób skonstruowana, że nie było widać podczas rotacji kości, jakie są tam ilości.
Nazywało się to to Ancient Yacht.

Offline Esidar

  • Użytkownik

# Październik 06, 2008, 22:30:51
Ale po co fizyka?

Havok - rozbudowany system do losowania wyrzuconych oczek ;)

Offline mb

  • Użytkownik

# Październik 06, 2008, 23:23:55
Dzięki chłopaki.
Nie wiem czemu, mam takie przekonanie, że najpierw trzeba zrobić coś ręcznie (nauczyć się jak coś działa), a później przerzucać się na silniki. Takie podstawy chciałbym znać :)

Obczajam Physx'a Nvidii, ale na pewno Wasze linki też dokładnie przejrzę.

Wydaje mi się, że rozwiązaniem problemu jest popatrzenie dokładnie na środek ciężkości danej bryły i kolizje krawędzi kostki.

Pozdrawiam serdecznie

yfan

  • Gość
# Październik 06, 2008, 23:59:21
PhysX jest w dużej mierze oparty o rozwinięcie tego http://www.teknikus.dk/tj/gdc2001.htm, co stanowi najprostsze wprowadzenie w programowanie fizyki. Kostkę będziesz reprezentował jako osiem punktów, które ograniczasz tak, by trzymały od siebie odległości i ulegały grawitacji. Tyle uzyskujesz naprawdę chwilą roboty, na podstawie artykułu. Kolizje to już bardziej skomplikowana sprawa, artykuł nie daje bezpośrednich rozwiązań, ale SAT (google it!) chyba również działa w trójwymiarze.

Offline mb

  • Użytkownik

# Październik 07, 2008, 19:20:20
Dzięki yfan, już to druknąłem i zaczynam analizować :)

yfan

  • Gość
# Październik 07, 2008, 19:30:36
:)

Jakbyś czegoś nie rozumiał, to zgłoś się do mnie. Artykuł polecam każdemu, bo poradzi sobie z nim nawet programistyczny newbie - sam jestem przykładem, bo od zabawy w takie właśnie systemy cząsteczkowe zaczynałem programowanie w c++ (wcześniej mając tylko stareńkie zetknięcia z turbo basic'em).