Trochę złożonego i długiego pytania, które, przyznaję, jeszcze nie bardzo dobrze rozumiem, więc postaram się wyjaśnić jak najlepiej.
Krótka wersja: Czy istnieje ogólna formuła c ++ / physx do obliczania tensorów bezwładności na podstawie kształtu obiektu?
Wersja długa: dla naszej fizyki musimy określić tensory bezwładności x, yiz. Obecnie sposób, w jaki to robimy, jest po prostu stosunkiem masy. Więc jeśli obiekt jest długi na osi X i cienki na Y i Z, a masa wynosi 10000, ustawimy Z i Y na 7000, a X na 3000. (To nie jest dokładne, ale tylko dać pomysł)
Działa to stosunkowo dobrze, ale naszym największym problemem jest to, że gdzieś występuje niestabilność połączenia, musimy zgadywać na tensorach, dopóki nie ustalimy, co działa najlepiej. Może to być bardzo czasochłonne, jeśli mamy bardzo dużą symulację fizyki, a jedno z ponad 20 stawów powoduje utratę stabilności przez pozostałe.
Pracuję nad funkcją, która weźmie obwiednię obiektu i, mam nadzieję, obliczy stosunkowo dokładne tensory. Wziąłem trochę matematyki z http://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensors i stworzyłem funkcję, która w zasadzie działa następująco dla podobnych rotacji poniżej.
Lub jeśli obrót jest na końcu, tak:
Wydaje mi się, że daje to wyniki podobne do tego, w jaki sposób to robiliśmy, ale nie chcę przełączać się w ten sposób, nie upewniając się, że będzie on działał do ogólnego użytku. Poniżej znajduje się kod mojej funkcji oparty na pierwszym obrazie z sześcianem i środkową osią obrotu.
NxVec3 CalculateInertiaTensor( VisBoundingBox_cl boundingBox, float m )
{
float width = boundingBox.GetSizeX();
float height = boundingBox.GetSizeZ();
float depth = boundingBox.GetSizeY();
float xTensor = 0.083f * m*(height*height + depth*depth);
float yTensor = 0.083f * m*(width*width + depth*depth);
float zTensor = 0.083f * m*(width*width + height*height);
return NxVec3(xTensor, yTensor, zTensor);
}
Nie mogę zagwarantować, że jest to właściwy sposób (ponieważ najdokładniejszym sposobem jest użycie rzeczywistego kształtu zamiast ramki ograniczającej) i nie znam zbyt dobrze tensorów bezwładności i matematyki, ale wydaje się, że zwracają liczby dość podobny do tego, którego używaliśmy. Czy ktoś tu wie, czy istnieje lepszy sposób na zrobienie tego?