Jestem na moim końcu rozumu tutaj! Pracuję nad redukcją opóźnień w mojej strzelance pierwszej osoby, a teraz jest tylko kwestia dodania ekstrapolacji. Mogę ekstrapolować pozycję; uzyskiwanie ostatnich dwóch pozycji i prędkości z nich, a następnie dodawanie prędkości do istniejącej pozycji (* czas delta). Jednak nie mogę zrobić tego samego dla rotacji. Domyślnie kątami są Euler, ale mogę (i robię) przekonwertować je na kwaterach, ponieważ mogą one cierpieć na blokadę zawieszenia. Jak mogę ekstrapolować nową orientację z 2 poprzednich orientacji? Mam czas między pakietami, 2 pakiety i aktualną orientację.Jak mogę ekstrapolować nowy obrót kwaternionowy z dwóch poprzednich pakietów?
Odpowiedz
Jeśli reprezentujesz dwie orientacje jako wektory, wektor ich iloczynu daje oś obrotu, a produkt z kropką wektorową może zostać użyty do znalezienia kąta obrotu.
Następnie można obliczyć prędkość kątową w taki sam sposób, jak obliczono prędkość skalarną i użyć jej do obliczenia ekstrapolowanego obrotu wokół osi określonej wcześniej.
znalazłem dobrej odpowiedzi tutaj: http://answers.unity3d.com/questions/168779/extrapolating-quaternion-rotation.html
I dostosowany kod do moich potrzeb i działa całkiem dobrze!
Dla dwóch kwater qa, qb da to interpolację i ekstrapolację przy użyciu tej samej formuły. t to ilość interpolacji/ekstrapolacji, t 0,1 = 0,1 drogi od qa-> qb, t = -1 -> ekstrapolacja całego kroku od qa-> qb wstecz, itp. Użyłem funkcji pisanych własnoręcznie, aby umożliwić zastosowanie kwaterniony/axisAngle z OpenCV cv :: Mat ale prawdopodobnie wybrać Eigen na tym, że zamiast
Quat qc = QuaternionMultiply(qb, QuaternionInverse(qa)); // rot is the rotation from qa to qb
AxisAngle axisAngleC = QuaternionToAxisAngle(qc); // find axis-angle representation
double ang = axisAngleC.angle; //axis will remain the same, changes apply to the angle
if (ang > M_PI) ang -= 2.0*M_PI; // assume rotation to take the shortest path
ang = fmod(ang * t,2.0*M_PI); // multiply angle by the interpolation/extrapolation factor and remove multiples of 2PI
axisAngleC.angle = ang;
return QuaternionMultiply(AxisAngleToQuaternion(axisAngleC),qa); // combine with first rotation
Witam, przykro ressurect taką starą nić. Walczę z tym samym problemem (Uzyskanie prędkości kątowej z Eigen :: Quaterniond i dodanie jej z currentQuat + VelocityQuat * time). Czy używałeś tego z C++/Eigen? Co to jest 'fmod' w powyższym? Dziękuję Ci! – anti
Cześć, tak, użyłem tego pod C++, ale nie z Eigen (użyłem moich własnych klas w dniach). @fmod: http://www.cplusplus.com/reference/cmath/fmod –
- 1. Konwertuj kwaternionowy obrót do macierzy obrotu?
- 2. Jak mogę ekstrapolować dalej wzdłuż drogi?
- 3. Aparat kwaternionowy. Jak sprawić, aby obracał się prawidłowo?
- 4. matplotlib.pyplot nie zapomni poprzednich działek - jak mogę przepłukać/odświeżyć?
- 5. Jak uzyskać obrót stopnia z getBoundingClientRect?
- 6. znaleźć zapisy z poprzednich x dni?
- 7. Android ExifInterface saveAttributes() bez nadpisywania poprzednich danych?
- 8. Jak mogę zaktualizować PyCharm z mojego lokalnego repozytorium pakietów?
- 9. Jak wykonać ☆ obrót wokół środka?
- 10. Uzyskaj tylko obrót z CGAffineTransform
- 11. Jak mogę dynamicznie wstawiać nowy szablon do DOM z Ember?
- 12. Jak odinstalować InstallShield w poprzednich wersjach?
- 13. Jak korzystać z "wewnętrznych" pakietów?
- 14. Noś informacje o poprzednich obliczeniach
- 15. Wykryj obrót ekranu głównego Androida
- 16. Jak korzystać z pakietów npm z ReasonML?
- 17. C# Obrót obrazu
- 18. Android: pobierz obrót EXIF z URI
- 19. UIScrollView z UIImageView wyśrodkowany obrót po powiększeniu?
- 20. libgdx particleEffect obrót
- 21. Jak mogę sumować wartości z dwóch słowników w C#?
- 22. Symfony2: Jak rozwiązać konflikt wymagań dwóch pakietów podczas korzystania z kompozytora?
- 23. Obrót UIWebView na iPadzie
- 24. Czy mogę utworzyć moduł lokalny z menedżerem pakietów Swift?
- 25. Jak wyodrębnić położenie, obrót i skalę z macierzy SVG
- 26. iphone obrót UIImageView
- 27. Jak zainstalować wiele pakietów?
- 28. Obrót PDF w UIWebView z Swift
- 29. Jak wykonać bezpośredni Oblimin Obrót w MATLAB
- 30. Jak przekonwertować obrót kwaterniona na ruch kierownicy?
Dziękuję bardzo –