Autor Wątek: bullet raycast vehicle - system współrzędnych pojazdu  (Przeczytany 106420 razy)

Offline Irbis

  • Użytkownik

# Luty 10, 2019, 22:27:16
Ogólnie Bullet ma taki sam układ współrzędnych globalnych (world space) jak OpenGL. Implementuję obsługę btRaycastVehicle i zauważyłem, że typ btRaycastVehicle ma następującą funkcję:

virtual void btRaycastVehicle::setCoordinateSystem(int rightIndex, int upIndex, int forwardIndex);

Jak ta funkcja działa ?

Domyślnie obiekt btRaycastVehicle ma następujące parametry:
  • forward vector: [0, 1, 0]
  • forward axis: 1
  • right axis: 0
  • up axis: 2

Czy to oznacza, że oś y i jest zamieniona z osią z w stosunku do globalnego układku współrzędnych Bulleta i OpenGL ?

Po zawołaniu funkcji:
raycastVehicle.setCoordinateSystem(0,1,2);

pojazd zwraca następujące parametry:
  • forward vector: [0, 0, 1]
  • forward axis: 2
  • right axis: 0
  • up axis: 1

co jest bardziej sensowne. Nie rozumiem dlaczego domyślne wartości układu współrzędnych pojazdu są inne i jak to interpretować.



« Ostatnia zmiana: Luty 10, 2019, 22:32:17 wysłana przez Irbis »

Offline Mr. Spam

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

Offline zephyr

  • Użytkownik

# Luty 08, 2021, 18:56:05
Jest kilka konwencji na ośki.
X praktycznie zawsze w prawo.
Czy Z ma być w górę czy Y. UE i Unity maja chyba odwrotnie konwencje.
Więc najwyraźniej dodali API żeby sobie to konfigurować jak komu wygodniej.

Ale po co dali to API na poziomie poszczególnych obiektów i pozwolili na popsute parametry typu przemapowane wszystkich osiek na ten sam wymiar to nie wiem.

Pewnie jak zwykle programista nie zrozumiał, dodał feature którego nikt nie chce bo można, i potem sensu to nie ma, ciężko optymalizować, a nie można wywalić, bo ktoś gdzieś użył. (A wewnętrznie pewnie i tak robi permutację osiek na granicy API, bo wewnętrznie takie konwersje zabiłyby wydajność )
Ja jakbym to API projektował to byłoby tylko
Engine.SetUpAxisConvention( UpIsY /* or UpIsZ */);
Globalnie na poziomie całego systemu.

Chyba ze jest jakiś use case którego nie widzę.
Hmm typu przepięcie pojazdu żeby niektóre latały po podłodze, a inne po ścianach?

https://github.com/bulletphysics/bullet3/blame/master/src/BulletDynamics/Vehicle/btRaycastVehicle.h
:/ widzę że jest od 2006 myślałem ze może opis commita który to dodawał by coś wyjaśnił
« Ostatnia zmiana: Luty 08, 2021, 19:13:32 wysłana przez zephyr »