Stellarium 0.15.2
|
Provides functions for performing openGL drawing operations. More...
#include <StelPainter.hpp>
Public Types | |
enum | SphericalPolygonDrawMode { SphericalPolygonDrawModeFill =0, SphericalPolygonDrawModeBoundary =1, SphericalPolygonDrawModeTextureFill =2, SphericalPolygonDrawModeTextureFillColormodulated =3 } |
Define the drawing mode when drawing polygons. More... | |
enum | DrawingMode { Points = 0x0000, Lines = 0x0001, LineLoop = 0x0002, LineStrip = 0x0003, Triangles = 0x0004, TriangleStrip = 0x0005, TriangleFan = 0x0006 } |
Define the drawing mode when drawing vertex. More... | |
Public Member Functions | |
StelPainter (const StelProjectorP &prj) | |
QOpenGLFunctions * | glFuncs () |
Returns a QOpenGLFunctions object suitable for drawing directly with OpenGL while this StelPainter is active. More... | |
const StelProjectorP & | getProjector () const |
Return the instance of projector associated to this painter. More... | |
void | setProjector (const StelProjectorP &p) |
void | drawViewportShape (void) |
Fill with black around the viewport. More... | |
void | drawText (float x, float y, const QString &str, float angleDeg=0.f, float xshift=0.f, float yshift=0.f, bool noGravity=true) |
Draw the string at the given position and angle with the given font. More... | |
void | drawText (const Vec3d &v, const QString &str, float angleDeg=0.f, float xshift=0.f, float yshift=0.f, bool noGravity=true) |
void | drawSphericalRegion (const SphericalRegion *region, SphericalPolygonDrawMode drawMode=SphericalPolygonDrawModeFill, const SphericalCap *clippingCap=NULL, bool doSubDivise=true, double maxSqDistortion=5.) |
Draw the given SphericalRegion. More... | |
void | drawGreatCircleArcs (const StelVertexArray &va, const SphericalCap *clippingCap=NULL) |
void | drawSphericalTriangles (const StelVertexArray &va, bool textured, bool colored, const SphericalCap *clippingCap=NULL, bool doSubDivide=true, double maxSqDistortion=5.) |
void | drawSmallCircleArc (const Vec3d &start, const Vec3d &stop, const Vec3d &rotCenter, void(*viewportEdgeIntersectCallback)(const Vec3d &screenPos, const Vec3d &direction, void *userData)=NULL, void *userData=NULL) |
Draw a small circle arc between points start and stop with rotation point in rotCenter. More... | |
void | drawGreatCircleArc (const Vec3d &start, const Vec3d &stop, const SphericalCap *clippingCap=NULL, void(*viewportEdgeIntersectCallback)(const Vec3d &screenPos, const Vec3d &direction, void *userData)=NULL, void *userData=NULL) |
Draw a great circle arc between points start and stop. More... | |
void | drawPath (const QVector< Vec3d > &points, const QVector< Vec4f > &colors) |
Draw a curve defined by a list of points. More... | |
void | drawCircle (float x, float y, float r) |
Draw a simple circle, 2d viewport coordinates in pixel. More... | |
void | drawSprite2dMode (float x, float y, float radius) |
Draw a square using the current texture at the given projected 2d position. More... | |
void | drawSprite2dMode (const Vec3d &v, float radius) |
void | drawSprite2dModeNoDeviceScale (float x, float y, float radius) |
Same as drawSprite2dMode but don't scale according to display device scaling. More... | |
void | drawSprite2dMode (float x, float y, float radius, float rotation) |
Draw a rotated square using the current texture at the given projected 2d position. More... | |
void | drawPoint2d (float x, float y) |
Draw a GL_POINT at the given position. More... | |
void | drawLine2d (float x1, float y1, float x2, float y2) |
Draw a line between the 2 points. More... | |
void | drawRect2d (float x, float y, float width, float height, bool textured=true) |
Draw a rectangle using the current texture at the given projected 2d position. More... | |
void | sSphere (float radius, float oneMinusOblateness, int slices, int stacks, int orientInside=0, bool flipTexture=false, float topAngle=0.0f, float bottomAngle=M_PI) |
void | sCylinder (float radius, float height, int slices, int orientInside=0) |
Re-implementation of gluCylinder : glu is overridden for non-standard projection. More... | |
void | sSphereMap (float radius, int slices, int stacks, float textureFov=2.f *M_PI, int orientInside=0) |
Draw a fisheye texture in a sphere. More... | |
void | setFont (const QFont &font) |
Set the font to use for subsequent text drawing. More... | |
void | setColor (float r, float g, float b, float a=1.f) |
Set the color to use for subsequent drawing. More... | |
Vec4f | getColor () const |
Get the color currently used for drawing. More... | |
QFontMetrics | getFontMetrics () const |
Get the font metrics for the current font. More... | |
void | setBlending (bool enableBlending, GLenum blendSrc=GL_SRC_ALPHA, GLenum blendDst=GL_ONE_MINUS_SRC_ALPHA) |
Enable OpenGL blending. More... | |
void | setDepthTest (bool enable) |
void | setDepthMask (bool enable) |
void | setCullFace (bool enable) |
Set the OpenGL GL_CULL_FACE state, by default face culling is disabled. More... | |
void | setLineSmooth (bool enable) |
Enables/disables line smoothing. By default, smoothing is disabled. More... | |
void | setLineWidth (float width) |
Sets the line width. Default is 1.0f. More... | |
void | setVertexPointer (int size, int type, const void *pointer) |
use instead of glVertexPointer More... | |
void | setTexCoordPointer (int size, int type, const void *pointer) |
use instead of glTexCoordPointer More... | |
void | setColorPointer (int size, int type, const void *pointer) |
use instead of glColorPointer More... | |
void | setNormalPointer (int type, const void *pointer) |
use instead of glNormalPointer More... | |
void | enableClientStates (bool vertex, bool texture=false, bool color=false, bool normal=false) |
Simulates glEnableClientState, basically you describe what data the ::drawFromArray call has available. More... | |
void | setArrays (const Vec3d *vertices, const Vec2f *texCoords=NULL, const Vec3f *colorArray=NULL, const Vec3f *normalArray=NULL) |
convenience method that enable and set all the given arrays. More... | |
void | setArrays (const Vec3f *vertices, const Vec2f *texCoords=NULL, const Vec3f *colorArray=NULL, const Vec3f *normalArray=NULL) |
void | drawFromArray (DrawingMode mode, int count, int offset=0, bool doProj=true, const unsigned short *indices=NULL) |
Draws primitives using vertices from the arrays specified by setVertexArray(). More... | |
void | drawStelVertexArray (const StelVertexArray &arr, bool checkDiscontinuity=true) |
Draws the primitives defined in the StelVertexArray. More... | |
Static Public Member Functions | |
static StelVertexArray | computeSphereNoLight (float radius, float oneMinusOblateness, int slices, int stacks, int orientInside=0, bool flipTexture=false, float topAngle=0.0f, float bottomAngle=M_PI) |
Generate a StelVertexArray for a sphere. More... | |
static void | computeFanDisk (float radius, int innerFanSlices, int level, QVector< double > &vertexArr, QVector< float > &texCoordArr) |
Draw a disk with a special texturing mode having texture center at center of disk. More... | |
static void | initGLShaders () |
Create the OpenGL shaders programs used by the StelPainter. More... | |
static void | deinitGLShaders () |
Delete the OpenGL shaders objects. More... | |
static bool | linkProg (class QOpenGLShaderProgram *prog, const QString &name) |
Link an opengl program and show a message in case of error or warnings. More... | |
Friends | |
class | VertexArrayProjector |
class | StelTextureMgr |
class | StelTexture |
Provides functions for performing openGL drawing operations.
All coordinates are converted using the StelProjector instance passed at construction. Because openGL is not thread safe, only one instance of StelPainter can exist at a time, enforcing thread safety. As a coding rule, no openGL calls should be performed when no instance of StelPainter exist. Typical usage is to create a local instance of StelPainter where drawing operations are needed.
Definition at line 40 of file StelPainter.hpp.
Define the drawing mode when drawing vertex.
Enumerator | |
---|---|
Points |
GL_POINTS. |
Lines |
GL_LINES. |
LineLoop |
GL_LINE_LOOP. |
LineStrip |
GL_LINE_STRIP. |
Triangles |
GL_TRIANGLES. |
TriangleStrip |
GL_TRIANGLE_STRIP. |
TriangleFan |
GL_TRIANGLE_FAN. |
Definition at line 55 of file StelPainter.hpp.
Define the drawing mode when drawing polygons.
Definition at line 46 of file StelPainter.hpp.
|
static |
Draw a disk with a special texturing mode having texture center at center of disk.
The disk is made up of concentric circles with increasing refinement. The number of slices of the outmost circle is (innerFanSlices<<level).
radius | the radius of the disk. |
innerFanSlices | the number of slices. |
level | the number of concentric circles. |
vertexArr | the vertex array in which the resulting vertices are returned. |
texCoordArr | the vertex array in which the resulting texture coordinates are returned. |
|
static |
Generate a StelVertexArray for a sphere.
radius | |
oneMinusOblateness | |
slices | number of vertical segments ("meridian zones") |
stacks | number of horizontal segments ("latitude zones") |
orientInside | 1 to have normals point inside, e.g. for Milky Way, Zodiacal Light, etc. |
flipTexture | if texture should be mapped to inside of sphere, e.g. Milky Way. |
topAngle | GZ: new parameter. An opening angle [radians] at top of the sphere. Useful if there is an empty region around the top pole, like North Galactic Pole. |
bottomAngle | GZ: new parameter. An opening angle [radians] at bottom of the sphere. Useful if there is an empty region around the bottom pole, like South Galactic Pole. |
|
static |
Delete the OpenGL shaders objects.
This method needs to be called once before exit.
void StelPainter::drawCircle | ( | float | x, |
float | y, | ||
float | r | ||
) |
Draw a simple circle, 2d viewport coordinates in pixel.
void StelPainter::drawFromArray | ( | DrawingMode | mode, |
int | count, | ||
int | offset = 0 , |
||
bool | doProj = true , |
||
const unsigned short * | indices = NULL |
||
) |
Draws primitives using vertices from the arrays specified by setVertexArray().
mode | The type of primitive to draw. If |
indices | is NULL, this operation will consume |
count | values from the enabled arrays, starting at |
offset. | Else it will consume |
count | elements of |
indices,starting | at |
offset,which | are used to index into the enabled arrays. |
void StelPainter::drawGreatCircleArc | ( | const Vec3d & | start, |
const Vec3d & | stop, | ||
const SphericalCap * | clippingCap = NULL , |
||
void(*)(const Vec3d &screenPos, const Vec3d &direction, void *userData) | viewportEdgeIntersectCallback = NULL , |
||
void * | userData = NULL |
||
) |
Draw a great circle arc between points start and stop.
The angle between start and stop must be < 180 deg. The algorithm ensures that the line will look smooth, even for non linear distortion. Each time the small circle crosses the edge of the viewport, the viewportEdgeIntersectCallback is called with the screen 2d position, direction of the currently drawn arc toward the inside of the viewport.
clippingCap | if not set to NULL, tells the painter to try to clip part of the region outside the cap. |
void StelPainter::drawLine2d | ( | float | x1, |
float | y1, | ||
float | x2, | ||
float | y2 | ||
) |
Draw a line between the 2 points.
x1 | x position of point 1 in the viewport in pixels. |
y1 | y position of point 1 in the viewport in pixels. |
x2 | x position of point 2 in the viewport in pixels. |
y2 | y position of point 2 in the viewport in pixels. |
Draw a curve defined by a list of points.
The points should be already tesselated to ensure that the path will look smooth. The algorithm take care of cutting the path if it crosses a viewport discontinutiy.
void StelPainter::drawPoint2d | ( | float | x, |
float | y | ||
) |
Draw a GL_POINT at the given position.
x | x position in the viewport in pixels. |
y | y position in the viewport in pixels. |
void StelPainter::drawRect2d | ( | float | x, |
float | y, | ||
float | width, | ||
float | height, | ||
bool | textured = true |
||
) |
Draw a rectangle using the current texture at the given projected 2d position.
This method is not thread safe.
x | x position of the top left corner in the viewport in pixel. |
y | y position of the tope left corner in the viewport in pixel. |
width | width in pixel. |
height | height in pixel. |
textured | whether the current texture should be used for painting. |
void StelPainter::drawSmallCircleArc | ( | const Vec3d & | start, |
const Vec3d & | stop, | ||
const Vec3d & | rotCenter, | ||
void(*)(const Vec3d &screenPos, const Vec3d &direction, void *userData) | viewportEdgeIntersectCallback = NULL , |
||
void * | userData = NULL |
||
) |
Draw a small circle arc between points start and stop with rotation point in rotCenter.
The angle between start and stop must be < 180 deg. The algorithm ensures that the line will look smooth, even for non linear distortion. Each time the small circle crosses the edge of the viewport, the viewportEdgeIntersectCallback is called with the screen 2d position, direction of the currently drawn arc toward the inside of the viewport. Example: A latitude circle has 0/0/sin(latitude) as rotCenter. If rotCenter is equal to 0,0,0, the method draws a great circle.
void StelPainter::drawSphericalRegion | ( | const SphericalRegion * | region, |
SphericalPolygonDrawMode | drawMode = SphericalPolygonDrawModeFill , |
||
const SphericalCap * | clippingCap = NULL , |
||
bool | doSubDivise = true , |
||
double | maxSqDistortion = 5. |
||
) |
Draw the given SphericalRegion.
region | The SphericalRegion to draw. |
drawMode | define whether to draw the outline or the fill or both. |
clippingCap | if not set to NULL, tells the painter to try to clip part of the region outside the cap. |
doSubDivise | if true tesselates the object to follow projection distortions. Typically set that to false if you think that the region is fully contained in the viewport. |
void StelPainter::drawSprite2dMode | ( | float | x, |
float | y, | ||
float | radius | ||
) |
Draw a square using the current texture at the given projected 2d position.
This method is not thread safe.
x | x position in the viewport in pixel. |
y | y position in the viewport in pixel. |
radius | the half size of a square side in pixel. |
v | direction vector of object to draw. Will draw only if this is in the visible hemisphere. |
void StelPainter::drawSprite2dMode | ( | float | x, |
float | y, | ||
float | radius, | ||
float | rotation | ||
) |
Draw a rotated square using the current texture at the given projected 2d position.
This method is not thread safe.
x | x position in the viewport in pixel. |
y | y position in the viewport in pixel. |
radius | the half size of a square side in pixel. |
rotation | rotation angle in degree. |
void StelPainter::drawSprite2dModeNoDeviceScale | ( | float | x, |
float | y, | ||
float | radius | ||
) |
Same as drawSprite2dMode but don't scale according to display device scaling.
void StelPainter::drawStelVertexArray | ( | const StelVertexArray & | arr, |
bool | checkDiscontinuity = true |
||
) |
Draws the primitives defined in the StelVertexArray.
checkDiscontinuity | will check and suppress discontinuities if necessary. |
void StelPainter::drawText | ( | float | x, |
float | y, | ||
const QString & | str, | ||
float | angleDeg = 0.f , |
||
float | xshift = 0.f , |
||
float | yshift = 0.f , |
||
bool | noGravity = true |
||
) |
Draw the string at the given position and angle with the given font.
If the gravity label flag is set, uses drawTextGravity180.
x | horizontal position of the lower left corner of the first character of the text in pixel. |
y | horizontal position of the lower left corner of the first character of the text in pixel. |
str | the text to print. |
angleDeg | rotation angle in degree. Rotation is around x,y. |
xshift | shift in pixel in the rotated x direction. |
yshift | shift in pixel in the rotated y direction. |
noGravity | don't take into account the fact that the text should be written with gravity. |
v | direction vector of object to draw. GZ20120826: Will draw only if this is in the visible hemisphere. |
void StelPainter::drawViewportShape | ( | void | ) |
Fill with black around the viewport.
void StelPainter::enableClientStates | ( | bool | vertex, |
bool | texture = false , |
||
bool | color = false , |
||
bool | normal = false |
||
) |
Simulates glEnableClientState, basically you describe what data the ::drawFromArray call has available.
Vec4f StelPainter::getColor | ( | ) | const |
Get the color currently used for drawing.
QFontMetrics StelPainter::getFontMetrics | ( | ) | const |
Get the font metrics for the current font.
|
inline |
Return the instance of projector associated to this painter.
Definition at line 75 of file StelPainter.hpp.
|
inline |
Returns a QOpenGLFunctions object suitable for drawing directly with OpenGL while this StelPainter is active.
This is recommended to be used instead of QOpenGLContext::currentContext()->functions() when a StelPainter is available, and you only need to call a few GL functions directly.
Definition at line 72 of file StelPainter.hpp.
|
static |
Create the OpenGL shaders programs used by the StelPainter.
This method needs to be called once at init.
|
static |
Link an opengl program and show a message in case of error or warnings.
void StelPainter::sCylinder | ( | float | radius, |
float | height, | ||
int | slices, | ||
int | orientInside = 0 |
||
) |
Re-implementation of gluCylinder : glu is overridden for non-standard projection.
void StelPainter::setArrays | ( | const Vec3d * | vertices, |
const Vec2f * | texCoords = NULL , |
||
const Vec3f * | colorArray = NULL , |
||
const Vec3f * | normalArray = NULL |
||
) |
convenience method that enable and set all the given arrays.
It is equivalent to calling enableClientState and set the array pointer for each arrays.
void StelPainter::setBlending | ( | bool | enableBlending, |
GLenum | blendSrc = GL_SRC_ALPHA , |
||
GLenum | blendDst = GL_ONE_MINUS_SRC_ALPHA |
||
) |
Enable OpenGL blending.
By default, blending is disabled. The additional parameters specify the blending mode, the default parameters are suitable for "normal" blending operations that you want in most cases. Blending will be automatically disabled when the StelPainter is destroyed.
void StelPainter::setColor | ( | float | r, |
float | g, | ||
float | b, | ||
float | a = 1.f |
||
) |
Set the color to use for subsequent drawing.
|
inline |
use instead of glColorPointer
Definition at line 275 of file StelPainter.hpp.
void StelPainter::setCullFace | ( | bool | enable | ) |
Set the OpenGL GL_CULL_FACE state, by default face culling is disabled.
void StelPainter::setFont | ( | const QFont & | font | ) |
Set the font to use for subsequent text drawing.
void StelPainter::setLineSmooth | ( | bool | enable | ) |
Enables/disables line smoothing. By default, smoothing is disabled.
void StelPainter::setLineWidth | ( | float | width | ) |
Sets the line width. Default is 1.0f.
|
inline |
use instead of glNormalPointer
Definition at line 281 of file StelPainter.hpp.
|
inline |
use instead of glTexCoordPointer
Definition at line 269 of file StelPainter.hpp.
|
inline |
use instead of glVertexPointer
Definition at line 264 of file StelPainter.hpp.
void StelPainter::sSphereMap | ( | float | radius, |
int | slices, | ||
int | stacks, | ||
float | textureFov = 2.f *M_PI , |
||
int | orientInside = 0 |
||
) |
Draw a fisheye texture in a sphere.