Skip to content

Commit

Permalink
Fix create physical bone when up vector is collinear to child rest or…
Browse files Browse the repository at this point in the history
…igin
  • Loading branch information
Blackiris committed Jan 6, 2022
1 parent df491d2 commit 234637a
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion editor/plugins/skeleton_3d_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -416,8 +416,14 @@ PhysicalBone3D *Skeleton3DEditor::create_physical_bone(int bone_id, int bone_chi
capsule_transform.basis = Basis(Vector3(1, 0, 0), Vector3(0, 0, 1), Vector3(0, -1, 0));
bone_shape->set_transform(capsule_transform);

/// Get an up vector not collinear with child rest origin
Vector3 up = Vector3(0, 1, 0);
if (up.cross(child_rest.origin).is_equal_approx(Vector3())) {
up = Vector3(0, 0, 1);
}

Transform3D body_transform;
body_transform.basis = Basis::looking_at(child_rest.origin);
body_transform.basis = Basis::looking_at(child_rest.origin, up);
body_transform.origin = body_transform.basis.xform(Vector3(0, 0, -half_height));

Transform3D joint_transform;
Expand Down

0 comments on commit 234637a

Please sign in to comment.