Set center of mass relative to origin OR get default CoM
In my game, players construct ships from triangular surfaces, which are then converted to a mesh for physics and rendering. Surfaces can be different substances (such as wood or steel) and vary in thickness, which means the center of mass needs to be calculated dynamically based on the player's design. The problem is, I can get where the center of mass should be relative to the origin, but using UActorComponent::SetCenterOfMass() only sets the offset relative to some default center of mass calculated based on the mesh vertices. In order for the calculation to work, I need to do one of the following:
Anyone know of a way to do one or both of these things?
Here's an image to visualize the problem. This box is symmetrical, but one side is made from wood and the other from steel, so the CoM should not be perfectly in the center but closer to the steel side. The editor cursor shows the mesh's origin. The green sphere is the default CoM, calculated automatically by the engine. You can see that it's at the geometric center of the mesh. The red sphere is where the CoM should be, based on the fact that steel is several times heavier than wood.
EDIT: Upon further experimentation I can confirm the default center of mass is not any of the following:
So, whatever calculation is used to guess the CoM is either more complicated than these, or it's using data I don't have access to.
Follow this question
Once you sign in you will be able to subscribe for any updates here