diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 3c5fdb243f..ed7450e3f6 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -175,8 +175,6 @@ void MyAvatar::simulate(float deltaTime, Transmitter* transmitter) { // Compute instantaneous acceleration float forwardAcceleration = glm::length(glm::dot(getBodyFrontDirection(), getVelocity() - oldVelocity)) / deltaTime; - const float ACCELERATION_PITCH_DECAY = 0.4f; - const float ACCELERATION_PULL_THRESHOLD = 0.2f; const float OCULUS_ACCELERATION_PULL_THRESHOLD = 1.0f; const int OCULUS_YAW_OFFSET_THRESHOLD = 10; @@ -475,14 +473,19 @@ void MyAvatar::loadData(QSettings* settings) { } void MyAvatar::orbit(const glm::vec3& position, int deltaX, int deltaY) { - glm::vec3 vector = getPosition() - position; + // first orbit horizontally glm::quat orientation = getOrientation(); - glm::vec3 up = orientation * IDENTITY_UP; const float ANGULAR_SCALE = 0.5f; - glm::quat rotation = glm::angleAxis(deltaX * -ANGULAR_SCALE, up); - const float LINEAR_SCALE = 0.01f; - setPosition(position + rotation * vector + up * (deltaY * LINEAR_SCALE * _scale)); - setOrientation(rotation * orientation); + glm::quat rotation = glm::angleAxis(deltaX * -ANGULAR_SCALE, orientation * IDENTITY_UP); + setPosition(position + rotation * (getPosition() - position)); + orientation = rotation * orientation; + setOrientation(orientation); + + // then vertically + float oldMousePitch = _head.getMousePitch(); + _head.setMousePitch(oldMousePitch + deltaY * ANGULAR_SCALE); + rotation = glm::angleAxis(_head.getMousePitch() - oldMousePitch, orientation * IDENTITY_RIGHT); + setPosition(position + rotation * (getPosition() - position)); } float MyAvatar::getAbsoluteHeadYaw() const {