mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-28 23:19:35 -06:00
Interaction Updates (#353)
* Interaction speed is not dependent on framerate * Split up interaction code in files and perform smooth interpolation when changing focus * Abstract interaction code in to functions. * Interpolation time is dependent on angle to focus node. * Use correct delta time when interpolating * Fix bug regarding decomposition of camera rotation. * Make orbital interaction mode behave as globe browsing and no longer use interactiondepth below ellipsoid. * Do not always rotate with object. Depending on distance * Remove interaction depth below ellipsoid. Now able to interact without renderable * Remove specification of interactionDepthBelowEllipsoid and cameraMinHeight * Remove GlobeBrowsingInteractionMode * Rename OrbitalInteractionMode to OrbitalNavigator and no longer extend interactionmode. * Move properties from interaction handler to orbital navigator * Use smooth step for follow rotation interpolator * Rename KeyframeInteractionMode to KeyframeNavigator * Rename files * Clean up. * Separate mousestate from orbitalnavigator * Clean up * Split keybindingmanager from interactionhandler interactionhandler * Rename interactionhandler to navigationhandler * Rename files * Clean up * Take back usage of gotochunk and gotogeo * Rename lua library navigation * Move functionality from navigationhandler to keyframenavigator * Update scripts for navigation * Comment code * Clean up * Solve but that caused NaN values for camera position when being in center of globe and setting focus to the globe. * Update jenkins file to remove build folder before building. * Fix error in jenkins script * Update jenkins file * Update jenkins file * Revert jenkins file * I hope this makes Jenkins happy. * Line endings God damnit * Line endings * Clean up * Fix compilation issue * Take back default scene. * Fix indentation * Move functions goToGeo and goToChunk to GlobeBrowsingModule. * Include algorithm for std::find * Remove auto and other clean up
This commit is contained in:
@@ -66,8 +66,8 @@
|
||||
#include <openspace/openspace.h>
|
||||
#include <openspace/engine/openspaceengine.h>
|
||||
#include <openspace/engine/wrapper/windowwrapper.h>
|
||||
#include <openspace/interaction/interactionhandler.h>
|
||||
#include <openspace/interaction/interactionmode.h>
|
||||
#include <openspace/interaction/navigationhandler.h>
|
||||
#include <openspace/interaction/keyframenavigator.h>
|
||||
#include <openspace/scene/scenegraphnode.h>
|
||||
#include <openspace/scripting/script_helper.h>
|
||||
#include <openspace/util/time.h>
|
||||
@@ -580,14 +580,16 @@ void ParallelConnection::dataMessageReceived(const std::vector<char>& messageCon
|
||||
datamessagestructures::CameraKeyframe kf(buffer);
|
||||
kf._timestamp = calculateBufferedKeyframeTime(kf._timestamp);
|
||||
|
||||
OsEng.interactionHandler().removeKeyframesAfter(kf._timestamp);
|
||||
interaction::KeyframeInteractionMode::CameraPose pose;
|
||||
OsEng.navigationHandler().keyframeNavigator().removeKeyframesAfter(
|
||||
kf._timestamp);
|
||||
interaction::KeyframeNavigator::CameraPose pose;
|
||||
pose.focusNode = kf._focusNode;
|
||||
pose.position = kf._position;
|
||||
pose.rotation = kf._rotation;
|
||||
pose.followFocusNodeRotation = kf._followNodeRotation;
|
||||
|
||||
OsEng.interactionHandler().addKeyframe(kf._timestamp, pose);
|
||||
OsEng.navigationHandler().keyframeNavigator().addKeyframe(
|
||||
kf._timestamp, pose);
|
||||
break;
|
||||
}
|
||||
case datamessagestructures::Type::TimeData: {
|
||||
@@ -755,7 +757,7 @@ void ParallelConnection::connectionStatusMessageReceived(const std::vector<char>
|
||||
|
||||
setStatus(status);
|
||||
|
||||
OsEng.interactionHandler().clearKeyframes();
|
||||
OsEng.navigationHandler().keyframeNavigator().clearKeyframes();
|
||||
OsEng.timeManager().clearKeyframes();
|
||||
|
||||
}
|
||||
@@ -1012,7 +1014,7 @@ void ParallelConnection::sendScript(std::string script) {
|
||||
}
|
||||
|
||||
void ParallelConnection::resetTimeOffset() {
|
||||
OsEng.interactionHandler().clearKeyframes();
|
||||
OsEng.navigationHandler().keyframeNavigator().clearKeyframes();
|
||||
OsEng.timeManager().clearKeyframes();
|
||||
std::lock_guard<std::mutex> latencyLock(_latencyMutex);
|
||||
_latencyDiffs.clear();
|
||||
@@ -1082,21 +1084,21 @@ const std::string& ParallelConnection::hostName() {
|
||||
}
|
||||
|
||||
void ParallelConnection::sendCameraKeyframe() {
|
||||
SceneGraphNode* focusNode = OsEng.interactionHandler().focusNode();
|
||||
SceneGraphNode* focusNode = OsEng.navigationHandler().focusNode();
|
||||
if (!focusNode) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a keyframe with current position and orientation of camera
|
||||
datamessagestructures::CameraKeyframe kf;
|
||||
kf._position = OsEng.interactionHandler().focusNodeToCameraVector();
|
||||
kf._position = OsEng.navigationHandler().focusNodeToCameraVector();
|
||||
|
||||
kf._followNodeRotation = OsEng.interactionHandler().interactionMode()->followingNodeRotation();
|
||||
kf._followNodeRotation = OsEng.navigationHandler().orbitalNavigator().followingNodeRotation();
|
||||
if (kf._followNodeRotation) {
|
||||
kf._position = glm::inverse(focusNode->worldRotationMatrix()) * kf._position;
|
||||
kf._rotation = OsEng.interactionHandler().focusNodeToCameraRotation();
|
||||
kf._rotation = OsEng.navigationHandler().focusNodeToCameraRotation();
|
||||
} else {
|
||||
kf._rotation = OsEng.interactionHandler().camera()->rotationQuaternion();
|
||||
kf._rotation = OsEng.navigationHandler().camera()->rotationQuaternion();
|
||||
}
|
||||
|
||||
kf._focusNode = focusNode->name();
|
||||
|
||||
Reference in New Issue
Block a user