![]() |
Home · All Namespaces · All Classes · Functions · Coding Style · Scripting · Plugins · File Structure |
Provide the main interface to all operations of projecting coordinates from sky to screen. More...
#include <StelProjector.hpp>
Classes | |
struct | StelProjectorParams |
Contains all the param needed to initialize a StelProjector. More... | |
Public Types | |
enum | StelProjectorMaskType { MaskNone, MaskDisk } |
Public Member Functions | |
virtual | ~StelProjector () |
virtual QString | getNameI18 () const =0 |
virtual QString | getDescriptionI18 () const |
QString | getHtmlSummary () const |
virtual float | getMaxFov () const =0 |
virtual bool | forward (Vec3f &v) const =0 |
virtual bool | backward (Vec3d &v) const =0 |
virtual float | deltaZoom (float fov) const =0 |
bool | intersectViewportDiscontinuity (const Vec3d &p1, const Vec3d &p2) const |
bool | intersectViewportDiscontinuity (const SphericalCap &cap) const |
virtual float | fovToViewScalingFactor (float fov) const =0 |
virtual float | viewScalingFactorToFov (float vsf) const =0 |
bool | getFlagGravityLabels () const |
const Vec4i & | getViewport () const |
Vec2f | getViewportCenter () const |
int | getViewportPosX () const |
int | getViewportPosY () const |
int | getViewportWidth () const |
int | getViewportHeight () const |
SphericalRegionP | getViewportConvexPolygon (float marginX=0., float marginY=0.) const |
const SphericalCap & | getBoundingCap () const |
float | getPixelPerRadAtCenter () const |
float | getFov () const |
bool | needGlFrontFaceCW () const |
bool | checkInViewport (const Vec3d &pos) const |
bool | checkInViewport (const Vec3f &pos) const |
Vec3d | viewPortIntersect (const Vec3d &p1, const Vec3d &p2) const |
bool | project (const Vec3d &v, Vec3d &win) const |
bool | project (const Vec3f &v, Vec3f &win) const |
virtual void | project (int n, const Vec3d *in, Vec3f *out) |
virtual void | project (int n, const Vec3f *in, Vec3f *out) |
bool | projectInPlace (Vec3d &vd) const |
bool | projectInPlace (Vec3f &v) const |
bool | projectCheck (const Vec3d &v, Vec3d &win) const |
bool | projectCheck (const Vec3f &v, Vec3f &win) const |
bool | unProject (const Vec3d &win, Vec3d &v) const |
bool | unProject (double x, double y, Vec3d &v) const |
bool | projectLineCheck (const Vec3d &v1, Vec3d &win1, const Vec3d &v2, Vec3d &win2) const |
const Mat4d & | getModelViewMatrix () const |
Mat4f | getProjectionMatrix () const |
StelProjectorMaskType | getMaskType (void) const |
Static Public Member Functions | |
static const QString | maskTypeToString (StelProjectorMaskType type) |
static StelProjectorMaskType | stringToMaskType (const QString &s) |
Protected Member Functions | |
StelProjector (const Mat4d &modelViewMat) | |
virtual bool | hasDiscontinuity () const =0 |
virtual bool | intersectViewportDiscontinuityInternal (const Vec3d &p1, const Vec3d &p2) const =0 |
virtual bool | intersectViewportDiscontinuityInternal (const Vec3d &capN, double capD) const =0 |
virtual void | computeBoundingCap () |
Protected Attributes | |
Mat4d | modelViewMatrix |
Mat4f | modelViewMatrixf |
float | flipHorz |
float | flipVert |
float | pixelPerRad |
StelProjectorMaskType | maskType |
float | zNear |
float | oneOverZNearMinusZFar |
Vec4i | viewportXywh |
Vec2f | viewportCenter |
float | viewportFovDiameter |
bool | gravityLabels |
float | defautAngleForGravityText |
SphericalCap | boundingCap |
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, refer to the StelPainter class.
bool StelProjector::checkInViewport | ( | const Vec3d & | pos | ) | const [inline] |
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 [inline] |
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
virtual bool StelProjector::forward | ( | Vec3f & | v | ) | const [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 StelProjectorPerspective, StelProjectorEqualArea, StelProjectorStereographic, StelProjectorFisheye, StelProjectorHammer, StelProjectorCylinder, StelProjectorMercator, StelProjectorOrthographic, and StelProjector2d.
bool StelProjector::getFlagGravityLabels | ( | ) | const [inline] |
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.
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. |
bool StelProjector::intersectViewportDiscontinuity | ( | const Vec3d & | p1, | |
const Vec3d & | p2 | |||
) | const [inline] |
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).
virtual bool StelProjector::intersectViewportDiscontinuityInternal | ( | const Vec3d & | p1, | |
const Vec3d & | p2 | |||
) | const [protected, pure 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 StelProjectorPerspective, StelProjectorEqualArea, StelProjectorStereographic, StelProjectorFisheye, StelProjectorHammer, StelProjectorCylinder, StelProjectorMercator, StelProjectorOrthographic, and StelProjector2d.
static const QString StelProjector::maskTypeToString | ( | StelProjectorMaskType | type | ) | [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 [inline] |
Project the vector v from the current frame into the viewport.
vd | the vector in the current frame. |
bool StelProjector::projectInPlace | ( | Vec3f & | v | ) | const [inline] |
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 [inline] |
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. |
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. |