mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-02-20 03:49:31 -06:00
* Add profile edit to start camera at a given scene graph node * Restructure some navigation code to allow computing camera pose from node * Delay computation of camera pose for node spec as well... And give NodeInfo a more extensive name (The objects may move during the frame, making the computed pose invalid) * Update to make scene graph node first option in editor * Add some description to each tab in the camera dialog * Add operator== for CameraGoToNode struct to make the unit tests compile * Add version handling for new profile version * Add option to specify an optional height * Update current version constant, for old test cases to go through successfully * Add some test files Note that apparently, the profile loading does not check the values of the individual fields, just existence, and type. So added two test cases that are not currently checked. --------- Co-authored-by: Alexander Bock <mail@alexanderbock.eu>
94 lines
4.3 KiB
C++
94 lines
4.3 KiB
C++
/*****************************************************************************************
|
|
* *
|
|
* OpenSpace *
|
|
* *
|
|
* Copyright (c) 2014-2023 *
|
|
* *
|
|
* 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 __OPENSPACE_CORE___WAYPOINT___H__
|
|
#define __OPENSPACE_CORE___WAYPOINT___H__
|
|
|
|
#include <openspace/camera/camerapose.h>
|
|
#include <ghoul/glm.h>
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
namespace openspace { class SceneGraphNode; }
|
|
|
|
namespace openspace::interaction {
|
|
|
|
struct NavigationState;
|
|
|
|
class Waypoint {
|
|
public:
|
|
Waypoint() = default;
|
|
Waypoint(const glm::dvec3& pos, const glm::dquat& rot, const std::string& ref);
|
|
explicit Waypoint(const NavigationState& ns);
|
|
|
|
CameraPose pose() const;
|
|
glm::dvec3 position() const;
|
|
glm::dquat rotation() const;
|
|
SceneGraphNode* node() const;
|
|
std::string nodeIdentifier() const;
|
|
double validBoundingSphere() const;
|
|
|
|
private:
|
|
CameraPose _pose;
|
|
std::string _nodeIdentifier;
|
|
// To be able to handle nodes with faulty bounding spheres
|
|
double _validBoundingSphere = 0.0;
|
|
};
|
|
|
|
/**
|
|
* Compute a waypoint from the current camera position.
|
|
*
|
|
* \return the computed WayPoint
|
|
*/
|
|
Waypoint waypointFromCamera();
|
|
|
|
struct NodeCameraStateSpec {
|
|
std::string identifier;
|
|
std::optional<glm::dvec3> position;
|
|
std::optional<double> height;
|
|
bool useTargetUpDirection = false;
|
|
};
|
|
|
|
// @TODO (2023-05-16, emmbr) Allow different light sources, not only the 'Sun'
|
|
/**
|
|
* Compute a waypoint from information about a scene graph node and a previous waypoint,
|
|
* where the camera will be facing the given node. If there is a 'Sun' node in the scene,
|
|
* it will possibly be used to compute a position on the lit side of the object.
|
|
*
|
|
* \param spec details about the node and state to create the waypoint from. Minimal
|
|
* information is the identifier of the node, but a position or height
|
|
* above the bounding sphere may also be given.
|
|
* \param startPoint an optional previous waypoint. If not specified, the current camera
|
|
* position will be used.
|
|
* \param userLinear if true, the new waypoint will be computed along a straight line
|
|
* from the start waypoint to the scene graph node or position.
|
|
* \return the computed WayPoint
|
|
*/
|
|
Waypoint computeWaypointFromNodeInfo(const NodeCameraStateSpec& spec,
|
|
std::optional<Waypoint> startPoint = std::nullopt, bool useLinear = false);
|
|
|
|
} // namespace openspace::interaction
|
|
|
|
#endif // __OPENSPACE_CORE___WAYPOINT___H__
|