Warsztat.GD

Programowanie => Matematyka i fizyka => Wątek zaczęty przez: Irbis w Luty 10, 2019, 22:27:16

Tytuł: bullet raycast vehicle - system współrzędnych pojazdu
Wiadomość wysłana przez: Irbis w 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:

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:

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



Tytuł: Odp: bullet raycast vehicle - system współrzędnych pojazdu
Wiadomość wysłana przez: zephyr w 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ł