diff --git a/modules/globebrowsing/rendering/clipmapglobe.cpp b/modules/globebrowsing/rendering/clipmapglobe.cpp index ebcedeec5a..02ba1964de 100644 --- a/modules/globebrowsing/rendering/clipmapglobe.cpp +++ b/modules/globebrowsing/rendering/clipmapglobe.cpp @@ -24,6 +24,8 @@ #include +#include + // open space includes #include #include @@ -87,6 +89,8 @@ namespace openspace { void ClipMapGlobe::render(const RenderData& data) { + // Set patch to follow camera + _patch.setPositionLatLon(converter::cartesianToLatLon(data.camera.position().dvec3())); // render _patch.render(data); } diff --git a/modules/globebrowsing/rendering/globemesh.cpp b/modules/globebrowsing/rendering/globemesh.cpp index 3362d62bf1..5d7af17b10 100644 --- a/modules/globebrowsing/rendering/globemesh.cpp +++ b/modules/globebrowsing/rendering/globemesh.cpp @@ -133,20 +133,6 @@ namespace openspace { glm::dmat4 cameraTransform = data.camera.viewMatrix(); // TODO : NEEDS TO BE DOUBLE PRECISION glm::dmat4 cameraProjectionTransform = data.camera.viewProjectionMatrix(); // TODO : NEEDS TO BE DOUBLE PRECISION - LDEBUG("cameraTransform = ( " << std::endl << cameraTransform[0][0] << " , " << cameraTransform[1][0] << " , " << cameraTransform[2][0] << std::endl << - cameraTransform[0][1] << " , " << cameraTransform[1][1] << " , " << cameraTransform[2][1] << std::endl << - cameraTransform[0][2] << " , " << cameraTransform[1][2] << " , " << cameraTransform[2][2] << std::endl << " ) "); - - LDEBUG("transform = ( " << std::endl << transform[0][0] << " , " << transform[1][0] << " , " << transform[2][0] << std::endl << - transform[0][1] << " , " << transform[1][1] << " , " << transform[2][1] << std::endl << - transform[0][2] << " , " << transform[1][2] << " , " << transform[2][2] << std::endl << " ) "); - - LDEBUG("cameraProjectionTransform = ( " << std::endl << cameraProjectionTransform[0][0] << " , " << cameraProjectionTransform[1][0] << " , " << cameraProjectionTransform[2][0] << std::endl << - cameraProjectionTransform[0][1] << " , " << cameraProjectionTransform[1][1] << " , " << cameraProjectionTransform[2][1] << std::endl << - cameraProjectionTransform[0][2] << " , " << cameraProjectionTransform[1][2] << " , " << cameraProjectionTransform[2][2] << std::endl << " ) "); - - - glDisable(GL_CULL_FACE); //glCullFace(GL_BACK); diff --git a/modules/globebrowsing/rendering/latlonpatch.cpp b/modules/globebrowsing/rendering/latlonpatch.cpp index c7784c4b1b..3fea6a51d2 100644 --- a/modules/globebrowsing/rendering/latlonpatch.cpp +++ b/modules/globebrowsing/rendering/latlonpatch.cpp @@ -56,7 +56,7 @@ namespace openspace { : _grid( xRes, yRes, - Geometry::Positions::Yes, + Geometry::Positions::No, Geometry::TextureCoordinates::Yes, Geometry::Normals::No) , _programObject(nullptr) @@ -108,7 +108,7 @@ namespace openspace { _programObject->activate(); // TODO : Not sure if double precision will be needed for all these calculations - // Using doubles in case. + // Using doubles in case but might slow things down. // TODO : Need to get the radius of the globe double r = 6e6; @@ -149,7 +149,9 @@ namespace openspace { glm::dvec3 camDir = glm::normalize(position - camPos); glm::dvec3 camUp = glm::dvec3(0,1,0);// data.camera.lookUpVector(); // Get camera transform matrix (double precision) - glm::dmat4 viewTransform = glm::lookAt(camPos, camPos + camDir, camUp); + glm::dmat4 viewTransform = glm::inverse(glm::translate(glm::dmat4(1.0), camPos)); + //glm::dmat4 viewTransform = glm::lookAt(camPos, camPos + camDir, camUp); + viewTransform = glm::dmat4( data.camera.viewRotationMatrix()) * viewTransform; // Transform control points to camera space p00 = glm::dvec3(viewTransform * glm::dvec4(p00, 1.0)); p10 = glm::dvec3(viewTransform * glm::dvec4(p10, 1.0)); diff --git a/modules/globebrowsing/util/converter.cpp b/modules/globebrowsing/util/converter.cpp index 7364d8ae5e..e56f7b4291 100644 --- a/modules/globebrowsing/util/converter.cpp +++ b/modules/globebrowsing/util/converter.cpp @@ -41,5 +41,12 @@ namespace converter { glm::sin(latitude)); } + glm::dvec2 cartesianToLatLon(glm::dvec3 position) { + double r = glm::length(position); + double lat = glm::asin(position.z / r); + double lon = atan2(position.y, position.x); + return glm::vec2(lat, lon); + } + } // namespace converter } // namespace openspace diff --git a/modules/globebrowsing/util/converter.h b/modules/globebrowsing/util/converter.h index 02549f6da5..bedc7f1f45 100644 --- a/modules/globebrowsing/util/converter.h +++ b/modules/globebrowsing/util/converter.h @@ -48,6 +48,7 @@ namespace openspace { namespace converter { glm::dvec3 latLonToCartesian(double latitude, double longitude, double radius); + glm::dvec2 cartesianToLatLon(glm::dvec3 position); } // namespace converter } // namespace openspace