Well, in the past few days I have scoured game development Q&A websites and tried over a dozen failed implementations. Getting the cube to rotate on one axis with SLERP was easy, but rotating on two axes was a headache! Fortunately, I've come up with an implementation that allows the cube to rotate with SLERP on two axes at 90 degree intervals using transformation matrices. I hope someone finds this post while frantically googling for rotations on two axes in Godot, so that it may help them with their headache.The following implementation assumes the camera is on/above the z axis and facing the positive z direction. I'm not sure if changing the camera's position will break anything, but just in case.[code]extends KinematicBody#boolean for whether the box is rotatingvar rotating = false#value for SLERPingvar value = 0#axisesvar x_axis = Vector3(1,0,0) #Initial x axisvar y_axis = Vector3(0,1,0) #Initial y axisvar z_axis = Vector3(0,0,1) #Initial z axis#The initial orientationvar matrixFrom#The final orientation after rotationvar matrixTo = Matrix3()#Quat for interpolating between rotationsvar thisRotation#Speed of rotationexport var speed = 2.5 #Identity matrixvar matrix = Matrix3()#Helper variable for storing an axisvar tempfunc ready(): set_process(true)func process(delta): if (rotating != true): if Input.is_action_pressed("ui_up"): matrixFrom = matrixTo matrixTo = matrixTo matrix.rotated(x_axis, PI/2) temp = y_axis y_axis = z_axis z_axis = -temp rotating = true elif Input.is_action_pressed("ui_down"): matrixFrom = matrixTo matrixTo = matrixTo matrix.rotated(x_axis, -PI/2) temp = y_axis y_axis = -z_axis z_axis = temp rotating = true elif Input.is_action_pressed("ui_right"): matrixFrom = matrixTo matrixTo = matrixTo matrix.rotated(y_axis, PI/2) temp = x_axis x_axis = -z_axis z_axis = temp rotating = true elif Input.is_action_pressed("ui_left"): matrixFrom = matrixTo matrixTo = matrixTo matrix.rotated(y_axis, -PI/2) temp = x_axis x_axis = z_axis z_axis = -temp rotating = true else: thisRotation = Quat(matrixFrom).slerp(matrixTo,value) value += delta * speed set_transform(Transform(Matrix3(thisRotation))) if value >= 1: value = 0 set_transform(Transform(matrixTo)) rotating = false[/code]