mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-04-20 09:41:19 -05:00
Created class DistanceSwitch and added length() in double precision to PowerScaledCoordinate
This commit is contained in:
@@ -26,11 +26,13 @@ include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake)
|
||||
|
||||
set(HEADER_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/planet.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/distanceswitch.h
|
||||
)
|
||||
source_group("Header Files" FILES ${HEADER_FILES})
|
||||
|
||||
set(SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/planet.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/distanceswitch.cpp
|
||||
)
|
||||
source_group("Source Files" FILES ${SOURCE_FILES})
|
||||
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
|
||||
#include <modules/planetbrowsing/planetbrowsingmodule.h>
|
||||
|
||||
#include <modules/planetbrowsing/rendering/Planet.h>
|
||||
#include <modules/planetbrowsing/rendering/planet.h>
|
||||
#include <modules/planetbrowsing/rendering/distanceswitch.h>
|
||||
|
||||
#include <openspace/rendering/renderable.h>
|
||||
#include <openspace/util/factorymanager.h>
|
||||
@@ -44,6 +45,7 @@ void PlanetBrowsingModule::internalInitialize() {
|
||||
ghoul_assert(fRenderable, "Renderable factory was not created");
|
||||
|
||||
fRenderable->registerClass<Planet>("Planet");
|
||||
fRenderable->registerClass<DistanceSwitch>("DistanceSwitch");
|
||||
}
|
||||
|
||||
} // namespace openspace
|
||||
|
||||
84
modules/planetbrowsing/rendering/distanceswitch.cpp
Normal file
84
modules/planetbrowsing/rendering/distanceswitch.cpp
Normal file
@@ -0,0 +1,84 @@
|
||||
/*****************************************************************************************
|
||||
* *
|
||||
* OpenSpace *
|
||||
* *
|
||||
* Copyright (c) 2014-2016 *
|
||||
* *
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this *
|
||||
* software and associated documentation files (the "Software"), to deal in the Software *
|
||||
* without restriction, including without limitation the rights to use, copy, modify, *
|
||||
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to *
|
||||
* permit persons to whom the Software is furnished to do so, subject to the following *
|
||||
* conditions: *
|
||||
* *
|
||||
* The above copyright notice and this permission notice shall be included in all copies *
|
||||
* or substantial portions of the Software. *
|
||||
* *
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A *
|
||||
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT *
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF *
|
||||
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE *
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
// open space includes
|
||||
#include <modules/planetbrowsing/rendering/distanceswitch.h>
|
||||
|
||||
namespace {
|
||||
const std::string _loggerCat = "DistanceSwitch";
|
||||
}
|
||||
|
||||
namespace openspace {
|
||||
|
||||
DistanceSwitch::DistanceSwitch(){
|
||||
|
||||
}
|
||||
|
||||
DistanceSwitch::~DistanceSwitch() {
|
||||
|
||||
}
|
||||
|
||||
bool DistanceSwitch::initialize() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DistanceSwitch::deinitialize() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DistanceSwitch::isReady() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
void DistanceSwitch::render(const RenderData& data) {
|
||||
pss pssDistanceToCamera = (data.camera.position() - data.position).length();
|
||||
double distanceToCamera = pssDistanceToCamera.lengthd();
|
||||
|
||||
if (distanceToCamera > _maxDistances.back()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// linear search through nodes to find which Renderable to render
|
||||
for (int i = 0; i < _renderables.size(); ++i) {
|
||||
if (distanceToCamera < _maxDistances[i]) {
|
||||
_renderables[i]->render(data);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DistanceSwitch::update(const UpdateData& data) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DistanceSwitch::addSwitchValue(std::shared_ptr<Renderable> renderable, double maxDistance) {
|
||||
ghoul_assert(maxDistance > _maxDistances.back(), "Renderables must be inserted in ascending order wrt distance");
|
||||
|
||||
_renderables.push_back(renderable);
|
||||
_maxDistances.push_back(maxDistance);
|
||||
}
|
||||
|
||||
} // namespace openspace
|
||||
|
||||
75
modules/planetbrowsing/rendering/distanceswitch.h
Normal file
75
modules/planetbrowsing/rendering/distanceswitch.h
Normal file
@@ -0,0 +1,75 @@
|
||||
/*****************************************************************************************
|
||||
* *
|
||||
* OpenSpace *
|
||||
* *
|
||||
* Copyright (c) 2014-2016 *
|
||||
* *
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this *
|
||||
* software and associated documentation files (the "Software"), to deal in the Software *
|
||||
* without restriction, including without limitation the rights to use, copy, modify, *
|
||||
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to *
|
||||
* permit persons to whom the Software is furnished to do so, subject to the following *
|
||||
* conditions: *
|
||||
* *
|
||||
* The above copyright notice and this permission notice shall be included in all copies *
|
||||
* or substantial portions of the Software. *
|
||||
* *
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A *
|
||||
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT *
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF *
|
||||
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE *
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
#ifndef __DDLODSWITCH_H__
|
||||
#define __DDLODSWITCH_H__
|
||||
|
||||
// open space includes
|
||||
#include <openspace/rendering/renderable.h>
|
||||
#include <openspace/properties/stringproperty.h>
|
||||
#include <openspace/util/updatestructures.h>
|
||||
#include <openspace/util/powerscaledcoordinate.h>
|
||||
#include <openspace/util/powerscaledscalar.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace openspace {
|
||||
|
||||
|
||||
/**
|
||||
Selects a specific Renderable to be used for rendering, based on distance to the
|
||||
camera
|
||||
*/
|
||||
class DistanceSwitch : public Renderable {
|
||||
public:
|
||||
|
||||
DistanceSwitch();
|
||||
~DistanceSwitch();
|
||||
|
||||
bool initialize() override;
|
||||
bool deinitialize() override;
|
||||
bool isReady() const override;
|
||||
|
||||
/**
|
||||
Picks the first Renderable with the associated maxDistance greater than the
|
||||
current distance to the camera
|
||||
*/
|
||||
void render(const RenderData& data) override;
|
||||
void update(const UpdateData& data) override;
|
||||
|
||||
/**
|
||||
Adds a new renderable (first argument) which may be rendered only if the distance
|
||||
to the camera is less than maxDistance (second argument)
|
||||
*/
|
||||
void addSwitchValue(std::shared_ptr<Renderable> renderable, double maxDistance);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
std::vector<std::shared_ptr<Renderable>> _renderables;
|
||||
std::vector <double> _distanceThresholds;
|
||||
|
||||
};
|
||||
} // openspace
|
||||
#endif //__DDLODSWITCH_H__
|
||||
@@ -33,8 +33,7 @@ namespace {
|
||||
|
||||
namespace openspace {
|
||||
|
||||
Planet::Planet(const ghoul::Dictionary& dictionary)
|
||||
: Renderable(dictionary) {
|
||||
Planet::Planet(const ghoul::Dictionary& dictionary){
|
||||
|
||||
std::string name;
|
||||
bool success = dictionary.getValue(SceneGraphNode::KeyName, name);
|
||||
@@ -61,10 +60,6 @@ bool Planet::isReady() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
void Planet::render(const RenderData& data) {
|
||||
|
||||
}
|
||||
|
||||
void Planet::update(const UpdateData& data) {
|
||||
|
||||
}
|
||||
|
||||
@@ -28,12 +28,16 @@
|
||||
// open space includes
|
||||
#include <openspace/rendering/renderable.h>
|
||||
|
||||
#include <modules/planetbrowsing/rendering/distanceswitch.h>
|
||||
#include <modules/base/rendering/renderableplanet.h>
|
||||
|
||||
|
||||
//#include <openspace/properties/stringproperty.h>
|
||||
//#include <openspace/util/updatestructures.h>
|
||||
|
||||
namespace openspace {
|
||||
|
||||
class Planet : public Renderable {
|
||||
class Planet : public DistanceSwitch {
|
||||
public:
|
||||
Planet(const ghoul::Dictionary& dictionary);
|
||||
~Planet();
|
||||
@@ -42,7 +46,6 @@ public:
|
||||
bool deinitialize() override;
|
||||
bool isReady() const override;
|
||||
|
||||
void render(const RenderData& data) override;
|
||||
void update(const UpdateData& data) override;
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user