![]() |
Stellarium 0.12.4
|
Provide the main interface to all operations of projecting coordinates from sky to screen. More...
#include <StelProjector.hpp>
Classes | |
class | GLSLProjector |
Base class for classes implementing vertex projection in GLSL. More... | |
class | Mat4dTransform |
class | ModelViewTranform |
struct | StelProjectorParams |
Contains all the param needed to initialize a StelProjector. More... | |
Public Types | |
enum | StelProjectorMaskType { MaskNone, MaskDisk } |
Define viewport mask types. More... | |
typedef QSharedPointer < ModelViewTranform > | ModelViewTranformP |
Shared pointer on a ModelViewTranform instance (implement reference counting) More... | |
Public Member Functions | |
virtual | ~StelProjector () |
Destructor. More... | |
virtual QString | getNameI18 () const =0 |
Get a human-readable name for this projection type. More... | |
virtual QString | getDescriptionI18 () const |
Get a human-readable short description for this projection type. More... | |
QString | getHtmlSummary () const |
Get a HTML version of the short description for this projection type. More... | |
virtual float | getMaxFov () const =0 |
Get the maximum FOV apperture in degree. More... | |
virtual bool | forward (Vec3f &v) const =0 |
Apply the transformation in the forward direction in place. More... | |
virtual bool | backward (Vec3d &v) const =0 |
Apply the transformation in the backward projection in place. More... | |
virtual float | deltaZoom (float fov) const =0 |
Return the small zoom increment to use at the given FOV for nice movements. More... | |
bool | intersectViewportDiscontinuity (const Vec3d &p1, const Vec3d &p2) const |
Determine whether a great circle connection p1 and p2 intersects with a projection discontinuity. More... | |
bool | intersectViewportDiscontinuity (const SphericalCap &cap) const |
virtual float | fovToViewScalingFactor (float fov) const =0 |
Convert a Field Of View radius value in radians in ViewScalingFactor (used internally) More... | |
virtual float | viewScalingFactorToFov (float vsf) const =0 |
Convert a ViewScalingFactor value (used internally) in Field Of View radius in radians. More... | |
bool | getFlagGravityLabels () const |
Get the current state of the flag which decides whether to arrage labels so that they are aligned with the bottom of a 2d screen, or a 3d dome. More... | |
const Vec4i & | getViewport () const |
Get the lower left corner of the viewport and the width, height. More... | |
Vec2f | getViewportCenter () const |
Get the center of the viewport relative to the lower left corner of the screen. More... | |
int | getViewportPosX () const |
Get the horizontal viewport offset in pixels. More... | |
int | getViewportPosY () const |
Get the vertical viewport offset in pixels. More... | |
int | getViewportWidth () const |
Get the viewport width in pixels. More... | |
int | getViewportHeight () const |
Get the viewport height in pixels. More... | |
SphericalRegionP | getViewportConvexPolygon (float marginX=0., float marginY=0.) const |
Return a convex polygon on the sphere which includes the viewport in the current frame. More... | |
const SphericalCap & | getBoundingCap () const |
Return a SphericalCap containing the whole viewport. More... | |
float | getPixelPerRadAtCenter () const |
Get size of a radian in pixels at the center of the viewport disk. More... | |
float | getFov () const |
Get the current FOV diameter in degrees. More... | |
bool | flipFrontBackFace () const |
Get whether front faces need to be oriented in the clockwise direction. More... | |
bool | checkInViewport (const Vec3d &pos) const |
Check to see if a 2d position is inside the viewport. More... | |
bool | checkInViewport (const Vec3f &pos) const |
Check to see if a 2d position is inside the viewport. More... | |
Vec3d | viewPortIntersect (const Vec3d &p1, const Vec3d &p2) const |
Return the position where the 2 2D point p1 and p2 cross the viewport edge P1 must be inside the viewport and P2 outside (check with checkInViewport() before calling this method) More... | |
bool | project (const Vec3d &v, Vec3d &win) const |
Project the vector v from the current frame into the viewport. More... | |
bool | project (const Vec3f &v, Vec3f &win) const |
Project the vector v from the current frame into the viewport. More... | |
virtual void | project (int n, const Vec3d *in, Vec3f *out) |
virtual void | project (int n, const Vec3f *in, Vec3f *out) |
virtual GLSLProjector * | getGLSLProjector () |
Return the GLSLProjector to provide GLSL projection functionality. More... | |
bool | projectInPlace (Vec3d &vd) const |
Project the vector v from the current frame into the viewport. More... | |
bool | projectInPlace (Vec3f &v) const |
Project the vector v from the current frame into the viewport. More... | |
bool | projectCheck (const Vec3d &v, Vec3d &win) const |
Project the vector v from the current frame into the viewport. More... | |
bool | projectCheck (const Vec3f &v, Vec3f &win) const |
Project the vector v from the current frame into the viewport. More... | |
bool | unProject (const Vec3d &win, Vec3d &v) const |
Project the vector v from the viewport frame into the current frame. More... | |
bool | unProject (double x, double y, Vec3d &v) const |
bool | projectLineCheck (const Vec3d &v1, Vec3d &win1, const Vec3d &v2, Vec3d &win2) const |
Project the vectors v1 and v2 from the current frame into the viewport. More... | |
ModelViewTranformP | getModelViewTransform () const |
Get the current model view matrix. More... | |
Mat4f | getProjectionMatrix () const |
Get the current projection matrix. More... | |
StelProjectorMaskType | getMaskType (void) const |
Get the current type of the mask if any. More... | |
Vec4i | getViewportXywh () const |
Get viewport extents. More... | |
bool | useGravityLabels () const |
Should label text align with the horizon? More... | |
float | getDefaultAngleForGravityText () const |
Return the rotation angle to apply to gravity text (only if gravityLabels is false) . More... | |
Vec2f | getViewportCenterAbsolute () const |
Get center of the viewport on the screen in pixels. More... | |
float | getViewportFovDiameter () |
Get diameter of the FOV disk in pixels. More... | |
Static Public Member Functions | |
static const QString | maskTypeToString (StelProjectorMaskType type) |
Get a string description of a StelProjectorMaskType. More... | |
static StelProjectorMaskType | stringToMaskType (const QString &s) |
Get a StelProjectorMaskType from a string description. More... | |
Protected Member Functions | |
StelProjector (ModelViewTranformP amodelViewTransform) | |
Private constructor. Only StelCore can create instances of StelProjector. More... | |
virtual bool | hasDiscontinuity () const =0 |
Return whether the projection presents discontinuities. Used for optimization. More... | |
virtual bool | intersectViewportDiscontinuityInternal (const Vec3d &p1, const Vec3d &p2) const =0 |
Determine whether a great circle connection p1 and p2 intersects with a projection discontinuity. More... | |
virtual bool | intersectViewportDiscontinuityInternal (const Vec3d &capN, double capD) const =0 |
Determine whether a cap intersects with a projection discontinuity. More... | |
virtual void | computeBoundingCap () |
Initialize the bounding cap. More... | |
Protected Attributes | |
ModelViewTranformP | modelViewTransform |
float | flipHorz |
float | flipVert |
float | pixelPerRad |
StelProjectorMaskType | maskType |
float | zNear |
float | oneOverZNearMinusZFar |
Vec4i | viewportXywh |
Vec2f | viewportCenter |
float | viewportFovDiameter |
bool | gravityLabels |
float | defautAngleForGravityText |
SphericalCap | boundingCap |
bool | disableShaderProjection |
If true, shader projection is disabled. More... | |
Provide the main interface to all operations of projecting coordinates from sky to screen.
The StelProjector also defines the viewport size and position. All methods from this class are threadsafe. The usual usage is to create local instances of StelProjectorP using the getProjection() method from StelCore where needed. For performing drawing using a particular projection, see StelRenderer and its backends.
Definition at line 38 of file StelProjector.hpp.
Shared pointer on a ModelViewTranform instance (implement reference counting)
Definition at line 79 of file StelProjector.hpp.
Define viewport mask types.
Enumerator | |
---|---|
MaskNone |
Regular - no mask. |
MaskDisk |
For disk viewport mode (circular mask to seem like bins/telescope) |
Definition at line 175 of file StelProjector.hpp.
|
inlinevirtual |
Destructor.
Definition at line 198 of file StelProjector.hpp.
|
inlineprotected |
Private constructor. Only StelCore can create instances of StelProjector.
Definition at line 408 of file StelProjector.hpp.
|
pure virtual |
Apply the transformation in the backward projection in place.
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
bool StelProjector::checkInViewport | ( | const Vec3d & | pos | ) | const |
Check to see if a 2d position is inside the viewport.
TODO Optimize by storing viewportXywh[1] + viewportXywh[3] and viewportXywh[0] + viewportXywh[2] already computed
bool StelProjector::checkInViewport | ( | const Vec3f & | pos | ) | const |
Check to see if a 2d position is inside the viewport.
TODO Optimize by storing viewportXywh[1] + viewportXywh[3] and viewportXywh[0] + viewportXywh[2] already computed
|
protectedvirtual |
Initialize the bounding cap.
Reimplemented in StelProjector2d.
|
pure virtual |
Return the small zoom increment to use at the given FOV for nice movements.
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
|
inline |
Get whether front faces need to be oriented in the clockwise direction.
Definition at line 270 of file StelProjector.hpp.
|
pure virtual |
Apply the transformation in the forward direction in place.
After transformation v[2] will always contain the length of the original v: sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]) regardless of the projection type. This makes it possible to implement depth buffer testing in a way independent of the projection type. I would like to return the squared length instead of the length because of performance reasons. But then far away objects are not textured any more, perhaps because of a depth buffer overflow although the depth test is disabled?
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
|
pure virtual |
Convert a Field Of View radius value in radians in ViewScalingFactor (used internally)
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
const SphericalCap& StelProjector::getBoundingCap | ( | ) | const |
Return a SphericalCap containing the whole viewport.
|
inline |
Return the rotation angle to apply to gravity text (only if gravityLabels is false) .
Definition at line 389 of file StelProjector.hpp.
|
inlinevirtual |
Get a human-readable short description for this projection type.
Reimplemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
Definition at line 205 of file StelProjector.hpp.
bool StelProjector::getFlagGravityLabels | ( | ) | const |
Get the current state of the flag which decides whether to arrage labels so that they are aligned with the bottom of a 2d screen, or a 3d dome.
float StelProjector::getFov | ( | ) | const |
Get the current FOV diameter in degrees.
|
inlinevirtual |
Return the GLSLProjector to provide GLSL projection functionality.
This can return NULL if the StelProjector implementation does not support GLSL projection.
Reimplemented in StelProjectorStereographic.
Definition at line 310 of file StelProjector.hpp.
QString StelProjector::getHtmlSummary | ( | ) | const |
Get a HTML version of the short description for this projection type.
StelProjectorMaskType StelProjector::getMaskType | ( | void | ) | const |
Get the current type of the mask if any.
|
pure virtual |
Get the maximum FOV apperture in degree.
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
ModelViewTranformP StelProjector::getModelViewTransform | ( | ) | const |
Get the current model view matrix.
|
pure virtual |
Get a human-readable name for this projection type.
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
float StelProjector::getPixelPerRadAtCenter | ( | ) | const |
Get size of a radian in pixels at the center of the viewport disk.
|
inline |
Get the current projection matrix.
Definition at line 357 of file StelProjector.hpp.
const Vec4i& StelProjector::getViewport | ( | ) | const |
Get the lower left corner of the viewport and the width, height.
Vec2f StelProjector::getViewportCenter | ( | ) | const |
Get the center of the viewport relative to the lower left corner of the screen.
|
inline |
Get center of the viewport on the screen in pixels.
Definition at line 395 of file StelProjector.hpp.
SphericalRegionP StelProjector::getViewportConvexPolygon | ( | float | marginX = 0. , |
float | marginY = 0. |
||
) | const |
Return a convex polygon on the sphere which includes the viewport in the current frame.
marginX | an extra margin in pixel which extends the polygon size in the X direction. |
marginY | an extra margin in pixel which extends the polygon size in the Y direction. |
|
inline |
Get diameter of the FOV disk in pixels.
Definition at line 401 of file StelProjector.hpp.
int StelProjector::getViewportHeight | ( | ) | const |
Get the viewport height in pixels.
int StelProjector::getViewportPosX | ( | ) | const |
Get the horizontal viewport offset in pixels.
int StelProjector::getViewportPosY | ( | ) | const |
Get the vertical viewport offset in pixels.
int StelProjector::getViewportWidth | ( | ) | const |
Get the viewport width in pixels.
|
inline |
Get viewport extents.
Definition at line 377 of file StelProjector.hpp.
|
protectedpure virtual |
Return whether the projection presents discontinuities. Used for optimization.
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
Determine whether a great circle connection p1 and p2 intersects with a projection discontinuity.
For many projections without discontinuity, this should return always false, but for other like cylindrical projection it will return true if the line cuts the wrap-around line (i.e. at lon=180 if the observer look at lon=0).
|
protectedpure virtual |
Determine whether a great circle connection p1 and p2 intersects with a projection discontinuity.
For many projections without discontinuity, this should return always false, but for other like cylindrical projection it will return true if the line cuts the wrap-around line (i.e. at lon=180 if the observer look at lon=0).
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
|
protectedpure virtual |
Determine whether a cap intersects with a projection discontinuity.
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
|
static |
Get a string description of a StelProjectorMaskType.
Project the vector v from the current frame into the viewport.
v | the vector in the current frame. |
win | the projected vector in the viewport 2D frame. |
Project the vector v from the current frame into the viewport.
v | the vector in the current frame. |
win | the projected vector in the viewport 2D frame. |
Project the vector v from the current frame into the viewport.
v | the direction vector in the current frame. Does not need to be normalized. |
win | the projected vector in the viewport 2D frame. win[0] and win[1] are in screen pixels, win[2] is unused. |
Project the vector v from the current frame into the viewport.
v | the direction vector in the current frame. Does not need to be normalized. |
win | the projected vector in the viewport 2D frame. win[0] and win[1] are in screen pixels, win[2] is unused. |
bool StelProjector::projectInPlace | ( | Vec3d & | vd | ) | const |
Project the vector v from the current frame into the viewport.
vd | the vector in the current frame. |
bool StelProjector::projectInPlace | ( | Vec3f & | v | ) | const |
Project the vector v from the current frame into the viewport.
v | the vector in the current frame. |
bool StelProjector::projectLineCheck | ( | const Vec3d & | v1, |
Vec3d & | win1, | ||
const Vec3d & | v2, | ||
Vec3d & | win2 | ||
) | const |
Project the vectors v1 and v2 from the current frame into the viewport.
v1 | the first vector in the current frame. |
v2 | the second vector in the current frame. |
win1 | the first projected vector in the viewport 2D frame. |
win2 | the second projected vector in the viewport 2D frame. |
|
static |
Get a StelProjectorMaskType from a string description.
Project the vector v from the viewport frame into the current frame.
win | the vector in the viewport 2D frame. win[0] and win[1] are in screen pixels, win[2] is unused. |
v | the unprojected direction vector in the current frame. |
|
inline |
Should label text align with the horizon?
Definition at line 383 of file StelProjector.hpp.
Return the position where the 2 2D point p1 and p2 cross the viewport edge P1 must be inside the viewport and P2 outside (check with checkInViewport() before calling this method)
|
pure virtual |
Convert a ViewScalingFactor value (used internally) in Field Of View radius in radians.
Implemented in StelProjector2d, StelProjectorOrthographic, StelProjectorMercator, StelProjectorCylinder, StelProjectorHammer, StelProjectorFisheye, StelProjectorStereographic, StelProjectorEqualArea, and StelProjectorPerspective.
|
protected |
If true, shader projection is disabled.
Set when an attempt to set up shader projection fails.
Definition at line 442 of file StelProjector.hpp.