Przesuwanie obiektu wzdłuż krzywej podczas obracania

11

Chciałbym przesunąć obiekt wzdłuż krzywej . W poszczególnych punktach krzywej chcę, aby obiekt zmienił prędkość i obrócił się wzdłuż swojej osi.

Wyobraź sobie samolot lecący do celu. Ma swoją ścieżkę, którą musi podążać, a także dostosowuje prędkość i orientację do końca (nagłówek, pith, nachylenie).

Czy mogę prosić o informacje dotyczące uruchamiania na następujące tematy:

  • Jakiego rodzaju krzywych użyć do płynnej interpolacji obiektu
  • Jakie formuły zastosować do niezawodnej interpolacji, w których mógłbym kontrolować prędkość poruszającego się wyrzutu, a przejście między węzłami krzywej byłoby płynne
  • Jakie informacje należy wyeksportować z aplikacji do tworzenia 3D
  • Czy powinienem do tego używać quaternions slerp () ?

Jeśli wiesz o książce, która skutecznie omawia ten temat , to najbardziej by się podobało. Dziękuję Ci.

Bunkai.Satori
źródło

Odpowiedzi:

7

W przypadku krzywej ruchu sugerowałbym użycie krzywych Hermite. Po prostu podajesz punkt początkowy / prędkość i punkt końcowy / prędkość, a to tworzy ładną i gładką krzywą między tymi dwoma. Użyj punktu końcowego / prędkości pierwszej pary punktów jako punktu początkowego / prędkości następnej pary punktów, a otrzymasz ładną długą i krętą krzywą, która jest płynna.

Idealnie spełnia to wymaganie dotyczące zarządzania prędkością: podajesz listę punktów w czasie z wybranymi prędkościami i daje płynnie interpolowane wartości pozycji i prędkości. Jeśli chcesz to zrobić, wszystko, co musisz wyodrębnić z aplikacji do tworzenia 3D, to punkty i prędkości na pożądanej ścieżce. Możesz je również wygenerować w czasie wykonywania, być może na podstawie danych wprowadzonych przez użytkownika.

Aby dostosować orientację, masz wiele opcji. Jeśli samolot zawsze będzie wskazywał dokąd leci (co ma sens), możesz użyć interpolowanego wektora prędkości z krzywej Hermite'a, aby ustalić, w którą stronę powinien skierować twój statek. Jeśli znasz wektor w górę (porusza się w płaszczyźnie lub wiesz, który kierunek powinien być w górę), możesz obliczyć trzecią oś przez krzyż (przód, góra) i tam masz swoją orientację.

Jeśli chcesz w jakiś sposób „chybotać” orientację, tak aby płaszczyzna czasami odchylała się od kierunku przedniego na ścieżce, możesz użyć kierunku przedniego jako pożądanego kierunku i sukcesywnie wykonywać jednoetapowe przesunięcie między bieżącą i pożądaną orientacją.

Jeśli chcesz mieć niestandardowe orientacje, które nie mają nic wspólnego ze ścieżką, możesz oczywiście podać listę czwartorzędowych orientacji. Wtedy twoje punkty stają się (punkt, prędkość, czwartorzęd). Następnie możesz użyć suwaka między dwoma kolejnymi czwartorzędami, aby ustawić swoje orientacje po drodze. Nie zapominaj, że slerp jest metodą interpolacji liniowej . Jednak zwykle powinno być dobrze. Jeśli stwierdzisz, że obroty nie są wystarczająco płynne w szwach, możesz spróbować interpolować listę czwartorzędów za pomocą krzywej Beziera, jak wyjaśniono tutaj w rozdziale 7.

Oto kod źródłowy, który może pomóc Ci zacząć. Posiada szereg technik płynnej interpolacji dla listy czwartorzędów (skład, bezier itp.).

Daj mi znać, jeśli masz jakieś pytania!

Gazihan Alankus
źródło
+1 - Dzięki, twoja odpowiedź w zasadzie obejmuje wszystko. Odpowiada na każde pytanie, które zadałem, a także udostępniasz dalsze materiały do ​​nauki. Teraz mam dość materiału na początek. Dlatego nie widzę powodu, aby nie oznaczać tego jako odpowiedzi zaakceptowanej .
Bunkai.Satori
@ Bunkai.Satori dziękuję, cieszę się, że mogłem pomóc :) Bardzo chciałbym zobaczyć, co stworzysz na końcu.
Gazihan Alankus