The ellipsoid of a globe is used to determine how to move the camera in a new interaction mode.

This commit is contained in:
Kalle Bladin
2016-05-26 18:56:36 -04:00
parent 9d1aeaa58b
commit e0814a23dd
6 changed files with 133 additions and 10 deletions
@@ -33,6 +33,8 @@
#include <openspace/util/mouse.h>
#include <openspace/util/keys.h>
#include <modules/globebrowsing/globes/renderableglobe.h>
#include <mutex>
namespace openspace {
@@ -188,7 +190,7 @@ public:
~InteractionMode();
// Mutators
void setFocusNode(SceneGraphNode* focusNode);
virtual void setFocusNode(SceneGraphNode* focusNode);
void setCamera(Camera* camera);
// Accessors
@@ -255,7 +257,7 @@ public:
~OrbitalInteractionMode();
virtual void update(double deltaTime);
private:
protected:
void updateMouseStatesFromInput(double deltaTime);
void updateCameraStateFromMouseStates();
@@ -270,6 +272,22 @@ private:
glm::dquat _globalCameraRotation;
};
class GlobeBrowsingInteractionMode : public OrbitalInteractionMode
{
public:
GlobeBrowsingInteractionMode(
std::shared_ptr<InputState> inputState,
double sensitivity,
double velocityScaleFactor);
~GlobeBrowsingInteractionMode();
virtual void setFocusNode(SceneGraphNode* focusNode);
virtual void update(double deltaTime);
private:
void updateCameraStateFromMouseStates();
RenderableGlobe* _globe;
};
class InteractionHandler : public properties::PropertyOwner
{