Một câu hỏi phức tạp và dài dòng mà tôi sẽ thừa nhận, tôi chưa hiểu rõ lắm nên tôi sẽ cố gắng giải thích tốt nhất có thể.
Phiên bản ngắn: Có một công thức c ++ / Physx chung ngoài kia để tính toán các thang đo quán tính dựa trên hình dạng đối tượng không?
Phiên bản dài: Đối với vật lý của chúng tôi, chúng tôi cần chỉ định các thang đo quán tính x, y và z. Hiện tại cách chúng tôi làm là khá nhiều chỉ là một tỷ lệ dựa trên khối lượng. Vì vậy, nếu một đối tượng dài trên trục X và mỏng trên Y và Z và khối lượng là 10000, chúng ta sẽ đặt Z và Y thành 7000 và X thành 3000. (Điều này không chính xác, nhưng chỉ để đưa ra ý tưởng)
Điều này hoạt động tương đối tốt nhưng vấn đề lớn nhất của chúng tôi là khi có sự bất ổn chung ở đâu đó, chúng tôi phải tiếp tục đoán ở trạng thái căng cho đến khi chúng tôi tìm ra cái gì hoạt động tốt nhất. Điều này có thể trở nên rất tốn thời gian nếu chúng ta có một mô phỏng vật lý rất lớn và một trong số hơn 20 khớp đang khiến tất cả các khớp khác mất đi sự ổn định.
Những gì tôi đang làm là một hàm sẽ lấy hộp giới hạn của một đối tượng và hy vọng tính toán các tenxơ tương đối chính xác. Tôi đã lấy một số phép toán từ http://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensors và thực hiện một hàm về cơ bản hoạt động như sau cho các phép quay tương tự bên dưới.
Hoặc nếu vòng quay kết thúc, như thế này:
Vì vậy, điều này dường như mang lại cho tôi kết quả tương tự như cách chúng tôi đã làm, nhưng tôi không muốn chuyển sang cách này mà không đảm bảo rằng nó sẽ hoạt động cho sử dụng chung. Dưới đây là mã cho chức năng của tôi dựa trên hình ảnh đầu tiên với trục hình khối và trục giữa.
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);
}
Tôi không thể đảm bảo rằng đây là cách đúng đắn để làm điều đó (vì cách chính xác nhất là sử dụng hình dạng thực tế thay vì hộp giới hạn) và tôi không quen lắm với các thang đo quán tính và toán học nhưng nó dường như trả về các con số khá giống với những gì chúng tôi đã sử dụng. Bất cứ ai ở đây tình cờ biết nếu có một cách tốt hơn để làm điều này?