Warsztat.GD
Programowanie => Matematyka i fizyka => Wątek zaczęty 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:
- 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ć.
-
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ł