Implement fine tuning of target in world space coordinates

This commit is contained in:
Ylva Selling
2022-03-16 12:06:15 -04:00
parent bf5069fbf6
commit 99bfd1cf57
5 changed files with 30 additions and 9 deletions
@@ -56,7 +56,8 @@ public:
// Mouse interaction
bool checkMouseIntersection(const glm::vec2& mousePosition);
glm::vec2 selectedScreenSpacePosition() const;
void fineTuneTarget(const glm::vec2& start, const glm::vec2& translation);
void fineTuneTarget(const glm::dvec3& startWorld, const glm::vec2& startMouse,
const glm::vec2& translation);
void translateSelected(const glm::vec2& start, const glm::vec2& translation);
void synchronizeAim();
@@ -94,7 +95,7 @@ public:
std::string selectedId();
glm::vec2 size() const;
RenderableSkyTarget* target() const;
SceneGraphNode* targetNode() const;
ScreenSpaceSkyBrowser* browser() const;
const std::deque<int>& selectedImages() const;
+6 -2
View File
@@ -312,7 +312,11 @@ SkyBrowserModule::SkyBrowserModule()
_mouseOnPair->translateSelected(_startDragPosition, translation);
break;
case MouseInteraction::FineTune:
_mouseOnPair->fineTuneTarget(_startDragPosition, translation);
_mouseOnPair->fineTuneTarget(
_startTargetPosition,
_startDragPosition,
translation
);
break;
default:
setSelectedObject();
@@ -534,7 +538,7 @@ void SkyBrowserModule::handleMouseClick(const MouseButton& button) {
// Change view (by moving target) within browser if right mouse
// click on browser
_startMousePosition = _mousePosition;
//_startDragPosition = _mouseOnPair->target()->screenSpacePosition();
_startTargetPosition = _mouseOnPair->targetNode()->worldPosition();
_interactionMode = MouseInteraction::FineTune;
}
}
+1
View File
@@ -131,6 +131,7 @@ private:
glm::vec2 _mousePosition; // Current mouse position in screen space coordinates
glm::vec2 _startMousePosition;
glm::vec2 _startDragPosition;
glm::dvec3 _startTargetPosition;
// Animation of rotation of camera to look at coordinate galactic coordinates
glm::dvec3 _startAnimation;
@@ -208,6 +208,10 @@ void ScreenSpaceSkyBrowser::render() {
localRotationMatrix() *
scaleMatrix()
);
// scale and translation probably
//if(global::windowDelegate->isMaster() && property)
}
void ScreenSpaceSkyBrowser::update() {
+16 -5
View File
@@ -123,12 +123,23 @@ glm::vec2 TargetBrowserPair::selectedScreenSpacePosition() const {
// The fine tune of the target is a way to "drag and drop" the target with right click
// drag on the sky browser window. This is to be able to drag the target around when it
// has a very small field of view
void TargetBrowserPair::fineTuneTarget(const glm::vec2& start,
const glm::vec2& translation)
void TargetBrowserPair::fineTuneTarget(const glm::dvec3& startWorldPosition,
const glm::vec2& startMouse,
const glm::vec2& translation)
{
glm::vec2 fineTune = _browser->fineTuneVector(translation);
glm::vec2 endMouse = startMouse + fineTune;
// Translation world
glm::dvec3 startWorld = skybrowser::localCameraToGalactic(
glm::vec3(startMouse, skybrowser::ScreenSpaceZ)
);
glm::dvec3 endWorld = skybrowser::localCameraToGalactic(
glm::vec3(endMouse, skybrowser::ScreenSpaceZ)
);
glm::dvec3 translationWorld = endWorld - startWorld;
aimTargetGalactic(startWorldPosition + translationWorld);
}
void TargetBrowserPair::translateSelected(const glm::vec2& start,
@@ -361,8 +372,8 @@ bool TargetBrowserPair::isUsingRadiusAzimuthElevation() const {
return _browser->isUsingRaeCoords();
}
RenderableSkyTarget* TargetBrowserPair::target() const {
return _targetRenderable;
SceneGraphNode* TargetBrowserPair::targetNode() const {
return _targetNode;
}
ScreenSpaceSkyBrowser* TargetBrowserPair::browser() const {