mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-02-18 10:59:18 -06:00
Use renderable target vectors to calculate translation
This commit is contained in:
@@ -57,6 +57,8 @@ public:
|
||||
|
||||
static documentation::Documentation Documentation();
|
||||
|
||||
glm::dvec3 rightVector();
|
||||
glm::dvec3 upVector();
|
||||
private:
|
||||
// Properties
|
||||
properties::FloatProperty _crossHairSize;
|
||||
@@ -67,6 +69,8 @@ private:
|
||||
double _borderRadius = 0.0;
|
||||
glm::ivec3 _borderColor = glm::ivec3(230);
|
||||
float _ratio = 1.f;
|
||||
glm::dvec3 _rightVector;
|
||||
glm::dvec3 _upVector;
|
||||
};
|
||||
} // namespace openspace
|
||||
|
||||
|
||||
@@ -151,6 +151,16 @@ glm::ivec3 RenderableSkyTarget::borderColor() const {
|
||||
return _borderColor;
|
||||
}
|
||||
|
||||
glm::dvec3 RenderableSkyTarget::rightVector() {
|
||||
double scaling = (_verticalFov / 70)* static_cast<double>(_size.value());
|
||||
return scaling * _rightVector;
|
||||
}
|
||||
|
||||
glm::dvec3 RenderableSkyTarget::upVector() {
|
||||
double scaling = (_verticalFov / 70) * static_cast<double>(_size.value());
|
||||
return scaling * _upVector;
|
||||
}
|
||||
|
||||
void RenderableSkyTarget::render(const RenderData& data, RendererTasks&) {
|
||||
ZoneScoped
|
||||
const bool showRectangle = _verticalFov > _showRectangleThreshold;
|
||||
@@ -175,14 +185,14 @@ void RenderableSkyTarget::render(const RenderData& data, RendererTasks&) {
|
||||
);
|
||||
|
||||
glm::dvec3 normal = glm::normalize(data.camera.positionVec3() - objectPositionWorld);
|
||||
glm::dvec3 newRight = glm::normalize(
|
||||
_rightVector = glm::normalize(
|
||||
glm::cross(data.camera.lookUpVectorWorldSpace(), normal)
|
||||
);
|
||||
glm::dvec3 newUp = glm::cross(normal, newRight);
|
||||
_upVector = glm::cross(normal, _rightVector);
|
||||
|
||||
glm::dmat4 cameraOrientedRotation = glm::dmat4(1.0);
|
||||
cameraOrientedRotation[0] = glm::dvec4(newRight, 0.0);
|
||||
cameraOrientedRotation[1] = glm::dvec4(newUp, 0.0);
|
||||
cameraOrientedRotation[0] = glm::dvec4(_rightVector, 0.0);
|
||||
cameraOrientedRotation[1] = glm::dvec4(_upVector, 0.0);
|
||||
cameraOrientedRotation[2] = glm::dvec4(normal, 0.0);
|
||||
|
||||
const glm::dmat4 rotationTransform = _billboard ?
|
||||
|
||||
@@ -81,30 +81,15 @@ void TargetBrowserPair::startFinetuningTarget() {
|
||||
// The fine tune of the target is a way to "drag and drop" the target with 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& translation)
|
||||
{
|
||||
glm::dvec3 startTarget = skybrowser::galacticToEquatorial(
|
||||
glm::normalize(_startTargetPosition)
|
||||
);
|
||||
glm::dvec2 multiplierRight = { -1.0, 1.0 };
|
||||
glm::dvec2 multiplierLeft = { 1.0, -1.0 };
|
||||
glm::dvec2 drag = glm::dvec2(translation);
|
||||
glm::dvec2 fovs = _browser->fieldsOfView();
|
||||
glm::dvec3 cartUpperRight = skybrowser::sphericalToCartesian(fovs * multiplierRight);
|
||||
glm::dvec3 cartLowerLeft = skybrowser::sphericalToCartesian(fovs * multiplierLeft);
|
||||
glm::dvec3 cartUpperLeft = skybrowser::sphericalToCartesian(fovs);
|
||||
glm::dvec3 upperRightCorner = startTarget - 0.5 * cartUpperRight;
|
||||
glm::dvec3 lowerLeftCorner = startTarget - 0.5 * cartLowerLeft;
|
||||
glm::dvec3 upperLeftCorner = startTarget - 0.5 * cartUpperLeft;
|
||||
void TargetBrowserPair::fineTuneTarget(const glm::vec2& translation) {
|
||||
glm::dvec2 percentage = glm::dvec2(translation);
|
||||
glm::dvec3 right = _targetRenderable->rightVector() * percentage.x;
|
||||
glm::dvec3 up = _targetRenderable->upVector() * percentage.y;
|
||||
|
||||
glm::dvec3 vecToRight = (upperRightCorner - upperLeftCorner) * drag.x;
|
||||
glm::dvec3 vecToDown = (lowerLeftCorner - upperLeftCorner) * drag.y;
|
||||
|
||||
|
||||
glm::dvec3 newCartesian = startTarget - (vecToRight + vecToDown);
|
||||
glm::dvec3 newCartesian = _startTargetPosition - (right - up);
|
||||
aimTargetGalactic(
|
||||
_targetNode->identifier(),
|
||||
skybrowser::equatorialToGalactic(newCartesian)
|
||||
newCartesian
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user