private void RotateAroundTransform(DragData drag) { // In order to add two quaternion rotations correctly you multiply them. // To subtract you need to multiply by the inverse. Quaternion rotationDelta = ( Snap.LocalRotationOfWorldRotation(mesh.transform, drag.transform.rotation) * Quaternion.Inverse(Snap.LocalRotationOfWorldRotation(mesh.transform, drag.startTransformRotation)) ); Quaternion snappedRotationDelta = Snap.RotationDelta(rotationDelta); transform.position = Snap.RotateAroundPivot(mesh.transform, transform.position, drag.transform.position, snappedRotationDelta); }
public void UpdatePositions(Transform controller, int controllerIndex) { Vector3 controllerPosition = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, controller.position) : controller.position; Quaternion snappedControllerRotation = Snap.RotationDelta(controller.rotation); Vector3 up = CalculateNormal(center, controllerPosition, controllerPosition + snappedControllerRotation * Vector3.right); int numberOfSides = NumSidesByTwoVectors(controller.up, up); if (numberOfSides != lastNumberOfSides) { DestroyAndRecreateVertices(numberOfSides, controllerPosition, up); } else { MoveVertices(numberOfSides, controllerPosition, up); } lastNumberOfSides = numberOfSides; }