Obrót bili/kulki

0

Witam, otóż piszę sobie mini-grę zwaną bilardem i mam jeden, jedyny - uciążliwy problem. Wszystko już mam porobione, odbijanie kulek wydaje się być realistyczne - oczywiście polegając na matematyce, trygonometrii. Ok, ale żeby jeszcze bardziej podnieść realistyczność gry bila musi kręcić się wokół własnej osi i tu jest problem. Nie mam pojęcia jak wykonać obrót kulki wokół własnej osi na współrzędnych XY znając kierunek jej przesuwania się w daną stronę (angle). Miałem z dwie koncepcje, lecz w praktyce wyszło to tak, że kulka dostawała herezji :/ Chętnie posłucham waszych koncepcji na wykonanie tenże właśnie obrotu kulki wokół własnej osi i przypominam, ma to odbywać się współrzędnymi XY.

0

Jak kule nie kręcz i tak na płaskim monitorze będzie wyglądała jak kolo. Co innego gdy na kuli są numerki.

0

To są kule 3d

0

Zakładasz ruch z maksymalnym tarciem? Ogólnie to bym w procedurze przesuwu uwzględniał tylko pozycję środka kulki, a wygląd rotacji zrobił na odpowiednim przygotowywaniu jakiegoś sprite'a, modelu itd. W przypadku 2d bym przygotował tablice sprite'ów we wszystkie strony i odpowiednio z rotacji wyliczył który w tym momencie należy wyświetlić. W 3d po prostu wyliczasz rotację modelu.

Jeżeli z kolei chodzi ci o podkręcanie itp. po prostu wprowadziłbym jakiś określony współczynnik tarcia między suknem, a bilą i przechowywałbym rotację bili, z kątem względem powiedzmy osi X i wartością prędkości kątowej. Potem w każdym ticku należy odpowiednio modyfikować tę rotację, prędkość oraz położenie. Następnie metodą prób i błędów znaleźć współczynnik tarcia, który będzie "fajny".

Rotacja jest złożeniem rotacji w jednym kierunku (o wielkości cos a * rot) i w drugim (sin a * rot). Dzięki temu możesz to łatwo złożyć, pamiętając o tym, że rotacja ma być względem środka.

PS2 rot=v/(pid), lub rotx=vx/(pid) i roty=vy/(pi*d)

0

"rotx=vx/(pid) i roty=vy/(pid)"

Mam pytanie, w twoim wzorze co oznacza symbol v? Z tego co widzę te wzory nie stosują trygonometrii (być może się mylę) i dzięki nim mogę obliczyć rotację względem osi X i Y (na ukos) wykonując te polecenia JEDNOCZEŚNIE na kuli? Dla testów prędkość rotacji kuli XY zrobię stałą. Być może coś nie zrozumiałem z twojego postu, a dla pewności dam prosty przykład na pixelach. Chcąc określić jakąś długość przekątnej na monitorze wykorzystuje sin i cos, dzięki którym po ówczesnym podaniu rotacji daje ukośny wynik. Rysunek z kropek ;D :

Y ^
|
.
.
.
.
.
. x ->

0

vx - prędkość w kierunku X, vy - prędkość w kierunku Y. Z podzielenia tych prędkości przez obwód otrzymujesz prędkości kątowe: rotx, czyli obrót wokół osi Y i roty, czyli obrót wokół osi X (tak wiem, źle oznaczyłem). Dostajesz wynik w rad/tick, dla irrlichta musisz później jeszcze zamienić na stopnie.
Oczywiście wszędzie zakładam toczenie.
Może prędkości trzeba będzie wziąć z minusem, nie chcę mi się myśleć w którą stronę będzie obracał.
Oraz oczywiście trzeba podzielić tylko przez średnicę, bez pi.

0

Ok zaraz wypróbuję.

0

Zaraz, zaraz. Coś mi tu nie pasuje. Kula pod tym wzorem nadal tworzy 'zawijasy'. Ja chciałbym na początek wykonać to bez prędkości, to znacz nie. Tak z prędkością, lecz ze stałą wartością - dla testów (tak aby nie byla zalezna od kierunku). Mi zależy na tym, aby po podaniu kierunku toczenia się kuli toczył się właśnie w tą stronę. Np.

Rotacje kuli:

X:10, Y:5

I po podaniu rotacji (angle) np. 30(stopni) kieruje się lewą stronę bez względu na prędkość.

0

Trochę o tym poczytałem i okazało się, że byłem kompletnie w błędzie. Wydaje mi się teraz, że najprościej będzie przechowywać dotychczasowy obrót w kwaternionie, jego pomnożenie przez kwaternion wynikający z prędkości kątowej jako wynik da obrót względem początku. Jeżeli programujesz to przy użyciu odpowiedniego silnika to odpowiednie funkcje już powinny tam być (pewnie są też w czystym opengl).

1 użytkowników online, w tym zalogowanych: 0, gości: 1