[Godot Physics]: Correct typo in moment of inertia calculations.
The moment of inertia calculation for BoxShape is: ``` Vector3( (p_mass / 3.0) * (ly * ly + lz * lz), (p_mass / 3.0) * (lx * lx + lz * lz), (p_mass / 3.0) * (lx * lx + ly * ly)); ``` where the final line includes both the x and y extents. However, for CapsuleShape3D, CylinderShape3D, ConvexPolygonShape3D, ConcavePolygonShape3D, and HeightMapShape3D, the final line read `(p_mass / 3.0) * (extents.y * extents.y + extents.y * extents.y)`. I believe this is a mistake, considering the comment in each case mentions using an AABB approximation, which should follow the same approach as BoxShape. This change corrects the final line to include both the x and y components of the shape's extent.
This commit is contained in:
parent
0339200972
commit
9aadd0cde7
|
@ -627,7 +627,7 @@ Vector3 CapsuleShape3DSW::get_moment_of_inertia(real_t p_mass) const {
|
||||||
return Vector3(
|
return Vector3(
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.y * extents.y));
|
(p_mass / 3.0) * (extents.x * extents.x + extents.y * extents.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CapsuleShape3DSW::_setup(real_t p_height, real_t p_radius) {
|
void CapsuleShape3DSW::_setup(real_t p_height, real_t p_radius) {
|
||||||
|
@ -807,7 +807,7 @@ Vector3 CylinderShape3DSW::get_moment_of_inertia(real_t p_mass) const {
|
||||||
return Vector3(
|
return Vector3(
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.y * extents.y));
|
(p_mass / 3.0) * (extents.x * extents.x + extents.y * extents.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CylinderShape3DSW::_setup(real_t p_height, real_t p_radius) {
|
void CylinderShape3DSW::_setup(real_t p_height, real_t p_radius) {
|
||||||
|
@ -1064,7 +1064,7 @@ Vector3 ConvexPolygonShape3DSW::get_moment_of_inertia(real_t p_mass) const {
|
||||||
return Vector3(
|
return Vector3(
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.y * extents.y));
|
(p_mass / 3.0) * (extents.x * extents.x + extents.y * extents.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConvexPolygonShape3DSW::_setup(const Vector<Vector3> &p_vertices) {
|
void ConvexPolygonShape3DSW::_setup(const Vector<Vector3> &p_vertices) {
|
||||||
|
@ -1424,7 +1424,7 @@ Vector3 ConcavePolygonShape3DSW::get_moment_of_inertia(real_t p_mass) const {
|
||||||
return Vector3(
|
return Vector3(
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.y * extents.y));
|
(p_mass / 3.0) * (extents.x * extents.x + extents.y * extents.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct _VolumeSW_BVH_Element {
|
struct _VolumeSW_BVH_Element {
|
||||||
|
@ -1662,7 +1662,7 @@ Vector3 HeightMapShape3DSW::get_moment_of_inertia(real_t p_mass) const {
|
||||||
return Vector3(
|
return Vector3(
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.y * extents.y + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
(p_mass / 3.0) * (extents.x * extents.x + extents.z * extents.z),
|
||||||
(p_mass / 3.0) * (extents.y * extents.y + extents.y * extents.y));
|
(p_mass / 3.0) * (extents.x * extents.x + extents.y * extents.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeightMapShape3DSW::_setup(Vector<real_t> p_heights, int p_width, int p_depth, real_t p_cell_size) {
|
void HeightMapShape3DSW::_setup(Vector<real_t> p_heights, int p_width, int p_depth, real_t p_cell_size) {
|
||||||
|
|
Loading…
Reference in New Issue