Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | WilliamShenzzz |
Code
public static void RotateAround(this Node3D node, Vector3 point, Vector3 axis, float angle) {
var centerInLocalSpace = node.ToLocal(point);
var localPosition = node.GlobalTransform.Origin - centerInLocalSpace;
var rotationQuat = new Quaternion(axis, angle);
var rotationMatrix = new Basis(rotationQuat);
localPosition = rotationMatrix * localPosition;
var globalPosition = node.ToGlobal(localPosition + centerInLocalSpace);
var rotation = rotationMatrix * node.GlobalTransform.Basis;
node.GlobalTransform = new Transform3D(rotation, globalPosition);
}