Fix bug with field of view by changing all FOVs to VFOV instead of HFOV

This commit is contained in:
Ylva Selling
2021-04-21 10:59:41 +02:00
parent 05a8580edc
commit cbe038e7d4
4 changed files with 24 additions and 19 deletions

View File

@@ -28,7 +28,7 @@ namespace openspace {
void sendMouseEvent(CefStructBase<CefMouseEventTraits> event, int x, int y) const;
void WWTfollowCamera();
float fieldOfView() const;
void setFieldOfView(float fov);
void setVerticalFieldOfView(float fov);
void scrollZoom(float scroll);
ScreenSpaceSkyTarget* getSkyTarget();
@@ -49,7 +49,7 @@ namespace openspace {
glm::ivec3 getColor();
// Flag for dimensions
bool _browserDimIsDirty;
properties::FloatProperty _fieldOfView;
properties::FloatProperty _vfieldOfView;
properties::StringProperty _skyTargetID;
private:
glm::vec2 _startDimensionsSize;

View File

@@ -56,7 +56,7 @@ namespace openspace::skybrowser::luascriptfunctions {
browser->getSkyTarget()->lookAtGalacticCoord(imageCoordsGalactic);
// In WWT, the definition of ZoomLevel is: VFOV = ZoomLevel / 6
browser->setFieldOfView(resultImage.zoomLevel / 6);
browser->setVerticalFieldOfView(resultImage.zoomLevel / 6);
}
browser->sendMessageToWWT(browser->createMessageForSettingForegroundOpacityWWT(100));
return 1;
@@ -64,8 +64,8 @@ namespace openspace::skybrowser::luascriptfunctions {
int followCamera(lua_State* L) {
// Load images from url
ghoul::lua::checkArgumentsAndThrow(L, 2, "lua::followCamera");
ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::followCamera");
LINFO("Loading images from url");
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
std::string root = "https://raw.githubusercontent.com/WorldWideTelescope/wwt-web-client/master/assets/webclient-explore-root.wtml";

View File

@@ -65,7 +65,7 @@ namespace openspace {
ScreenSpaceSkyBrowser::ScreenSpaceSkyBrowser(const ghoul::Dictionary& dictionary)
: ScreenSpaceBrowser(dictionary)
, _browserDimensions(BrowserDimensionInfo, _dimensions, glm::ivec2(0.f), glm::ivec2(300.f))
, _fieldOfView(ZoomInfo, 50.f, 0.1f, 70.f)
, _vfieldOfView(ZoomInfo, 50.f, 0.1f, 70.f)
, _skyTargetID(TargetIDInfo)
, _camIsSyncedWWT(true)
, _skyTarget(nullptr)
@@ -85,8 +85,8 @@ namespace openspace {
});
addProperty(_browserDimensions);
_fieldOfView = p.zoom.value_or(_fieldOfView);
addProperty(_fieldOfView);
_vfieldOfView = p.zoom.value_or(_vfieldOfView);
addProperty(_vfieldOfView);
_skyTargetID = p.targetID.value_or(_skyTargetID);
addProperty(_skyTargetID);
@@ -95,9 +95,9 @@ namespace openspace {
setConnectedTarget();
});
_fieldOfView.onChange([&]() {
_vfieldOfView.onChange([&]() {
if (_skyTarget) {
_skyTarget->updateFOV(_fieldOfView);
_skyTarget->updateFOV(_vfieldOfView);
}
});
@@ -154,18 +154,18 @@ namespace openspace {
}
float ScreenSpaceSkyBrowser::fieldOfView() const {
return _fieldOfView;
return _vfieldOfView;
}
void ScreenSpaceSkyBrowser::setFieldOfView(float fov) {
_fieldOfView = fov;
void ScreenSpaceSkyBrowser::setVerticalFieldOfView(float fov) {
_vfieldOfView = fov;
}
void ScreenSpaceSkyBrowser::scrollZoom(float scroll) {
float zoomFactor = log(_fieldOfView + 1.1f);
float zoomFactor = log(_vfieldOfView + 1.1f);
float zoom = scroll > 0.0 ? -zoomFactor : zoomFactor;
_fieldOfView = std::clamp(_fieldOfView + zoom, 0.001f, 70.0f);
_vfieldOfView = std::clamp(_vfieldOfView + zoom, 0.001f, 70.0f);
}
void ScreenSpaceSkyBrowser::executeJavascript(std::string& script) const {
@@ -196,6 +196,7 @@ namespace openspace {
ghoul::Dictionary ScreenSpaceSkyBrowser::createMessageForMovingWWTCamera(const glm::dvec2 celestCoords, const float fov, const bool moveInstantly) const {
using namespace std::string_literals;
ghoul::Dictionary msg;
msg.setValue("event", "center_on_coordinates"s);
msg.setValue("ra", static_cast<double>(celestCoords[0]));
msg.setValue("dec", static_cast<double>(celestCoords[1]));
@@ -264,7 +265,7 @@ namespace openspace {
while (_camIsSyncedWWT) {
glm::vec2 celestCoordsTarget = _skyTarget ? _skyTarget->getCelestialCoords() : glm::vec2(0.f);
ghoul::Dictionary message = createMessageForMovingWWTCamera(celestCoordsTarget, _fieldOfView);
ghoul::Dictionary message = createMessageForMovingWWTCamera(celestCoordsTarget, _vfieldOfView);
// Sleep so we don't bombard WWT with too many messages
std::this_thread::sleep_for(std::chrono::milliseconds(50));

View File

@@ -325,10 +325,14 @@ namespace openspace {
return glm::dvec2(glm::degrees(ra), glm::degrees(dec));
}
void ScreenSpaceSkyTarget::updateFOV(float browserFOV) {
void ScreenSpaceSkyTarget::updateFOV(float VFOV) {
float horizFOV = global::windowDelegate->getHorizFieldOfView();
_scale = std::max((browserFOV/horizFOV),(_showCrosshairThreshold.value()/horizFOV));
_fieldOfView = browserFOV;
glm::ivec2 windowRatio = global::windowDelegate->currentWindowSize();
float verticFOV = horizFOV * (static_cast<float>(windowRatio.y) / static_cast<float>(windowRatio.x));
_scale = std::max((VFOV / verticFOV),(_showCrosshairThreshold.value()/ verticFOV));
_fieldOfView = VFOV;
}
}