31 #if defined(Viewer3D_RECURSES)
32 #error Recursive header files inclusion detected in Viewer3D.h
33 #else // defined(Viewer3D_RECURSES)
35 #define Viewer3D_RECURSES
37 #if !defined Viewer3D_h
43 #include "DGtal/base/Common.h"
54 #define GL_SILENCE_DEPRECATION
55 #include <OpenGL/gl.h>
56 #include <OpenGL/glu.h>
63 #include <QApplication>
65 #include <QtGui/qapplication.h>
68 #include <QGLViewer/qglviewer.h>
72 #include "DGtal/kernel/SpaceND.h"
73 #include "DGtal/topology/KhalimskySpaceND.h"
74 #include "DGtal/base/CountedPtr.h"
75 #include "DGtal/io/Display3D.h"
76 #include "DGtal/math/BasicMathFunctions.h"
78 #include "DGtal/kernel/CSpace.h"
133 template <
typename TSpace = SpaceND<3>,
134 typename TKSpace = KhalimskySpaceND<3>>
183 boost::ignore_unused_variable_warning( viewer );
184 boost::ignore_unused_variable_warning( event );
195 boost::ignore_unused_variable_warning( viewer );
205 boost::ignore_unused_variable_warning( viewer );
214 boost::ignore_unused_variable_warning( viewer );
225 boost::ignore_unused_variable_warning( viewer );
240 boost::ignore_unused_variable_warning( viewer );
241 boost::ignore_unused_variable_warning( point );
255 boost::ignore_unused_variable_warning( viewer );
256 boost::ignore_unused_variable_warning( event );
270 boost::ignore_unused_variable_warning( viewer );
271 boost::ignore_unused_variable_warning( event );
286 boost::ignore_unused_variable_warning( viewer );
287 boost::ignore_unused_variable_warning( event );
390 glEnable(GL_NORMALIZE);
527 template<
typename TDomain>
529 double xBottomLeft=0.0,
double yBottomLeft=0.0,
double zBottomLeft=0.0, std::string mode=
"BoundingBox")
534 myDomainWidth = (aDomain.upperBound())[0]-(aDomain.lowerBound())[0]+1;
535 myDomainHeight = (aDomain.upperBound())[1]-(aDomain.lowerBound())[1]+1;
550 double xBottomLeft,
double yBottomLeft,
double zBottomLeft);
560 double yTranslation=0.0,
double zTranslation=0.0);
610 if(img.myImageHeight>0 && img.myImageWidth>0)
612 myTabImage =
new unsigned int [img.myImageWidth*img.myImageHeight];
613 for(
unsigned int i=0; i<img.myImageWidth*img.myImageHeight; i++)
644 template <
typename TImageType,
typename TFunctor>
648 double xBottomLeft=0.0,
double yBottomLeft=0.0,
double zBottomLeft=0.0,
655 myImageWidth = (image.domain().upperBound())[0]-(image.domain().lowerBound())[0]+1;
656 myImageHeight = (image.domain().upperBound())[1]-(image.domain().lowerBound())[1]+1;
673 double xBottomLeft,
double yBottomLeft,
double zBottomLeft);
709 template <
typename TImageType,
typename TFunctor>
711 double yTranslation=0.0,
double zTranslation=0.0)
715 assert ( (image.domain().upperBound())[0]-(image.domain().lowerBound())[0]+1==
static_cast<int>(
myImageWidth) &&
716 (image.domain().upperBound())[1]-(image.domain().lowerBound())[1]+1==
static_cast<int>(
myImageHeight));
784 template <
typename TDrawableWithViewer3D>
856 template <
typename TImageType,
typename TFunctor>
858 void updateTextureImage(
unsigned int imageIndex,
const TImageType & image,
const TFunctor & aFunctor,
859 double xTranslation=0.0,
double yTranslation=0.0,
double zTranslation=0.0,
875 double xPosition,
double yPosition,
900 template<
typename TDomain>
914 double xPosition,
double yPosition,
925 double yTranslation,
double zTranslation);
933 std::vector<typename DGtal::Viewer3D< Space , KSpace >::LineD3D>
941 std::vector<typename DGtal::Viewer3D< Space , KSpace >::LineD3D>
953 template <
typename TContainer >
983 QGLViewer::drawLight( light );
988 QGLViewer::drawLight( light, zoom );
1000 void updateList(
bool needToUpdateBoundingBox =
true );
1058 sqrt( (
posCam.x - s1.center[ 0 ] ) * (
posCam.x - s1.center[ 0 ] ) +
1059 (
posCam.y - s1.center[ 1 ] ) * (
posCam.y - s1.center[ 1 ] ) +
1060 (
posCam.z - s1.center[ 2 ] ) * (
posCam.z - s1.center[ 2 ] ) );
1062 sqrt( (
posCam.x - s2.center[ 0 ] ) * (
posCam.x - s2.center[ 0 ] ) +
1063 (
posCam.y - s2.center[ 1 ] ) * (
posCam.y - s2.center[ 1 ] ) +
1064 (
posCam.z - s2.center[ 2 ] ) * (
posCam.z - s2.center[ 2 ] ) );
1065 return dist1 > dist2;
1079 qglviewer::Vec center1 ( ( t1.point1[0]+t1.point2[0]+t1.point3[0] ) /3.0, ( t1.point1[1]+t1.point2[1]+t1.point3[1] ) /3.0, ( t1.point1[2]+t1.point2[2]+t1.point3[2] ) /3.0 );
1080 qglviewer::Vec center2 ( ( t2.point1[0]+t2.point2[0]+t2.point3[0] ) /3.0, ( t2.point1[1]+t2.point2[1]+t2.point3[1] ) /3.0, ( t2.point1[2]+t2.point2[2]+t2.point3[2] ) /3.0 );
1098 qglviewer::Vec center1 ( ( q1.point1[0]+q1.point2[0]+q1.point3[0]+q1.point4[0] ) /4.0, ( q1.point1[1]+q1.point2[1]+q1.point3[1]+q1.point4[1] ) /4.0, ( q1.point1[2]+q1.point2[2]+q1.point3[2]+q1.point4[2] ) /4.0 );
1099 qglviewer::Vec center2 ( ( q2.point1[0]+q2.point2[0]+q2.point3[0]+q2.point4[0] ) /4.0, ( q2.point1[1]+q2.point2[1]+q2.point3[1]+q2.point4[1] ) /4.0, ( q2.point1[2]+q2.point2[2]+q2.point3[2]+q2.point4[2] ) /4.0 );
1116 double c1x=0.0, c1y=0.0, c1z=0.0;
1117 double c2x=0.0, c2y=0.0, c2z=0.0;
1118 for(
unsigned int i=0; i< q1.vertices.size(); i++){
1119 c1x+=q1.vertices.at(i)[0];
1120 c1y+=q1.vertices.at(i)[1];
1121 c1z+=q1.vertices.at(i)[2];
1123 for(
unsigned int i=0; i< q2.vertices.size(); i++){
1124 c2x+=q2.vertices.at(i)[0];
1125 c2y+=q2.vertices.at(i)[1];
1126 c2z+=q2.vertices.at(i)[2];
1129 qglviewer::Vec center1 ( c1x/(
double)q1.vertices.size(),c1y/(
double)q1.vertices.size(), c1z/(
double)q1.vertices.size() );
1130 qglviewer::Vec center2 ( c2x/(
double)q2.vertices.size(),c2y/(
double)q2.vertices.size(), c2z/(
double)q2.vertices.size() );
1148 virtual void draw();
1153 virtual void init();
1177 virtual QDomElement
domElement(
const QString& name, QDomDocument& document)
const;
1200 protected:
virtual void closeEvent ( QCloseEvent * e );
1296 point1[0]=aGSImage.point1[0];
point1[1]=aGSImage.point1[1];
point1[2]=aGSImage.point1[2];
1297 point2[0]=aGSImage.point2[0];
point2[1]=aGSImage.point2[1];
point2[2]=aGSImage.point2[2];
1298 point3[0]=aGSImage.point3[0];
point3[1]=aGSImage.point3[1];
point3[2]=aGSImage.point3[2];
1299 point4[0]=aGSImage.point4[0];
point4[1]=aGSImage.point4[1];
point4[2]=aGSImage.point4[2];
1372 typedef typename std::vector<typename Viewer3D<Space, KSpace>::CubeD3D>
VectorCubes;
1373 typedef typename std::vector<typename Viewer3D<Space, KSpace>::QuadD3D>
VectorQuad;
1374 typedef typename std::vector<typename Viewer3D<Space, KSpace>::LineD3D>
VectorLine;
1375 typedef typename std::vector<typename Viewer3D<Space, KSpace>::BallD3D>
VectorBall;
1376 typedef typename std::vector<typename Viewer3D<Space, KSpace>::TriangleD3D>
VectorTriangle;
1377 typedef typename std::vector<typename Viewer3D<Space, KSpace>::PolygonD3D>
VectorPolygon;
1381 typedef typename VectorCubes::iterator
ItCube;
1475 void glCreateListPolygons(
const std::vector<VectorPolygon> &aVectPolygon,
unsigned int idList);
1541 template<
typename TImageORDomain>
1545 double xB = (anImageOrDom.point1[0]+anImageOrDom.point2[0]+anImageOrDom.point3[0]+anImageOrDom.point4[0])/4.0;
1546 double yB = (anImageOrDom.point1[1]+anImageOrDom.point2[1]+anImageOrDom.point3[1]+anImageOrDom.point4[1])/4.0;
1547 double zB = (anImageOrDom.point1[2]+anImageOrDom.point2[2]+anImageOrDom.point3[2]+anImageOrDom.point4[2])/4.0;
1548 rotatePoint( anImageOrDom.point1[0], anImageOrDom.point1[1], anImageOrDom.point1[2], xB, yB, zB, angle, rotationDir);
1549 rotatePoint( anImageOrDom.point2[0], anImageOrDom.point2[1], anImageOrDom.point2[2], xB, yB, zB, angle, rotationDir);
1550 rotatePoint( anImageOrDom.point3[0], anImageOrDom.point3[1], anImageOrDom.point3[2], xB, yB, zB, angle, rotationDir);
1551 rotatePoint( anImageOrDom.point4[0], anImageOrDom.point4[1], anImageOrDom.point4[2], xB, yB, zB, angle, rotationDir);
1568 template <
typename TValues>
1570 void rotatePoint(TValues &x, TValues &y, TValues &z,
1571 double cx,
double cy,
double cz,
1674 template <
typename TSpace,
typename TKSpace>
1681 std::ostream &
operator<<( std::ostream & out,
1688 #include "DGtal/io/viewers/Viewer3D.ih"
1693 #endif // !defined Viewer3D_h
1695 #undef Viewer3D_RECURSES
1696 #endif // else defined(Viewer3D_RECURSES)
Display::SelectCallbackFct SelectCallbackFct
MyDigitalSurface::ConstIterator ConstIterator
void sortTriangleFromCamera()
TextureImage(const TextureImage &img)
Copy constructor (needed due to myTabImage)
void setCameraPosition(double ax, double ay, double az)
GLuint myPolygonSetListWiredId
void rotateLineD3D(typename DGtal::Display3D< Space, KSpace >::LineD3D &aLine, DGtal::PointVector< 3, int, TContainer > pt, double angleRotation, ImageDirection dirRotation)
virtual bool mouseReleaseEvent(const Viewer &viewer, QMouseEvent *event)
virtual void keyPressEvent(QKeyEvent *e)
Aim: Defines the concept describing a digital space, ie a cartesian product of integer lines.
Aim: This semi abstract class defines the stream mechanism to display 3d primitive (like BallVector,...
void glCreateListPolygons(const std::vector< VectorPolygon > &aVectPolygon, unsigned int idList)
void glUpdateLightRenderingMode() const
SelectCallbackFct getSelectCallback3D(DGtal::int32_t aName, void *&data) const
Viewer3D< Space, KSpace > Viewer
The associated viewer.
double camera_direction[3]
camera direction
std::vector< typename Viewer3D< Space, KSpace >::TriangleD3D > VectorTriangle
void glDrawGLBall(const typename Viewer3D< Space, KSpace >::BallD3D &aBall)
Viewer3D< Space, KSpace >::ImageDirection myDirection
virtual bool postSelection(const Viewer &viewer, const QPoint &point)
unsigned int myNbListe
number of lists in myListToAff
void glUpdateTextureImages(const VectorTextureImage &aVectImage)
unsigned int myBufferWidth
GLfloat myLightPositionRefCamera[3]
std::vector< typename Viewer3D< Space, KSpace >::TextureImage > VectorTextureImage
Structure representing an RGB triple with alpha component.
bool operator()(typename Viewer3D< Space, KSpace >::CubeD3D s1, typename Viewer3D< Space, KSpace >::CubeD3D s2)
bool myAutoSaveState
flag to save automatically or not the Viewer3d state when closing the viewer
void drawSomeLight(GLenum light) const
To call the protected method drawLight.
const GLfloat myLambertRenderSpec
ImageDirection myDirection
std::size_t myLineSetIndex
the index of the line of the domain in the lineSetList of the viewer
void sortPolygonFromCamera()
TextureImage(const TImageType &image, const TFunctor &aFunctor, ImageDirection normalDir=zDirection, double xBottomLeft=0.0, double yBottomLeft=0.0, double zBottomLeft=0.0, TextureMode aMode=GrayScaleMode)
unsigned int myNbLineSetList
Extension * myExtension
Stored a possible extension to the viewer (pointer owned).
GLfloat myLightAmbientCoeffs[4]
virtual bool mouseMoveEvent(const Viewer &viewer, QMouseEvent *event)
void addImage2DDomainD3D(const TDomain &anImageDomain, std::string mode, const DGtal::Color &aColor=DGtal::Color::Red)
virtual QDomElement domElement(const QString &name, QDomDocument &document) const
Overload of the QGLViewer method which returns an XML QDomElement representing the QGLViewer state....
T roundToUpperPowerOfTwo(const T &n)
std::vector< typename Viewer3D< Space, KSpace >::QuadD3D > VectorQuad
const GLfloat myPlasticRenderSpec
unsigned int myImageWidth
direction of the image (x, y or z axe)
virtual void draw(Viewer &viewer)
std::vector< typename DGtal::Viewer3D< Space, KSpace >::LineD3D > compute2DDomainLineRepresentation(Image2DDomainD3D &anImageDomain, double delta)
virtual void paintGL()
Overload of the QGLViewer method in order to change the order of display (to fix the QGLViewer axis d...
virtual void mouseMoveEvent(QMouseEvent *e)
unsigned char * myTextureImageBufferGS
GLTextureImage(const GLTextureImage &aGLImg)
void setCameraUpVector(double ax, double ay, double az)
double myLightPhi
the light position (inclination)
RealPoint point1
coordinates
const GLfloat myMetallicRenderSpec
int mySelectedElementId
used to displayed selected elements
void addTextureImage(const TextureImage &image)
void updateRenderingCoefficients(const RenderingMode aRenderMode, bool displayState=true)
GLuint myCubeSetListWiredId
void glCreateListTriangles(const std::vector< VectorTriangle > &aVectTriangle, unsigned int idList)
GLfloat myMaterialShininessCoeff[1]
std::vector< typename Viewer3D< Space, KSpace >::CubeD3D > VectorCubes
virtual void init(Viewer &viewer)
void translateAn2DDomain(unsigned int domainIndex, double xTranslation, double yTranslation, double zTranslation)
const GLfloat myLambertRenderDiff
int myRefMouseXPos
the angle rotation increment used for interactive light move
std::vector< typename Viewer3D< Space, KSpace >::BallD3D > VectorBall
void setExtension(Extension *ext)
double camera_upVector[3]
camera up-vector
bool myViewWire
objects have shadows which follow the camera if false
qglviewer::Vec myDirSelector
bool myIsBackgroundDefault
true if the background is default
std::ostream & operator<<(std::ostream &out, const ATu0v1< TKSpace, TLinearAlgebra > &object)
void glCreateListQuadMaps(const typename Display3D< Space, KSpace >::QuadsMap &aQuadMap, unsigned int idList)
void glCreateListPolygonsWired(const std::vector< VectorPolygon > &aVectPolygon, unsigned int idList)
bool myIsMovingLight
the reference mouse y-position used to determince the light position change (inclination)
double camera_position[3]
camera position
void drawSomeLight(GLenum light, float zoom) const
To call the protected method drawLight.
Display::RealPoint RealPoint
void updateRelativeCameraFromLightPosition()
unsigned int myBufferHeight
void red(const unsigned char aRedValue)
void glCreateListLines(const VectorLine &aVectLine, unsigned int idList)
RenderingMode myRenderingMode
VectorCubes::iterator ItCube
unsigned int myDomainHeight
the height of the image domain
virtual void drawWithNames(Viewer &viewer)
void setGLMaterialShininessCoefficient(const GLfloat matShininessCoeff)
std::vector< TextureImage > myGSImageList
flag to display the ligth source when it is moved by the user
unsigned int myDomainWidth
the width of the image domain
unsigned int myImageHeight
the width of the image
Aim: This concept represents a digital domain, i.e. a non mutable subset of points of the given digit...
double myLigthRotationStep
bool operator()(typename Viewer3D< Space, KSpace >::TriangleD3D t1, typename Viewer3D< Space, KSpace >::TriangleD3D t2)
DGtal is the top-level namespace which contains all DGtal functions and types.
qglviewer::Vec mySelectedPoint
virtual QString helpString() const
void rotateDomain(Image2DDomainD3D &anDom, double angle, ImageDirection rotationDir)
DGtal::Color myDefaultColor
the default color of the viewer
virtual void initFromDOMElement(const QDomElement &element)
Overload of the QGLViewer method which restores the viewer state from a QDomDocument element....
std::string className() const
void updateTextureImage(unsigned int imageIndex, const TImageType &image, const TFunctor &aFunctor, double xTranslation=0.0, double yTranslation=0.0, double zTranslation=0.0, double rotationAngle=0.0, ImageDirection rotationDir=zDirection)
virtual unsigned int getCurrentGLImageNumber()
void setGLLightSpecularCoefficients(const GLfloat lightSpecularCoeffs[4])
GLuint myPolygonSetListId
bool myDrawDomain
for each pixel of the image, color or height ?
std::vector< GLTextureImage > myVectTextureImage
list of the images textures in this viewer
virtual unsigned int getCurrentDomainNumber()
double myLightR
the light position (azimuth)
unsigned int myImageHeight
bool myUseGLPointsForBalls
void setCameraDirection(double ax, double ay, double az)
std::map< DGtal::int32_t, std::vector< QuadD3D > > QuadsMap
The type that maps identifier name -> vector of QuadD3D.
Viewer3D(const KSpace &KSEmb)
void setGLLightDiffuseCoefficients(const GLfloat lightDiffuseCoeffs[4])
Viewer3D< Space, KSpace > & operator<<(const DGtal::Color &aColor)
virtual void postSelection(const QPoint &point)
postSelection
std::vector< typename Viewer3D< Space, KSpace >::PolygonD3D > VectorPolygon
void updateOrientationTextureImage(unsigned int imageIndex, double xPosition, double yPosition, double zPosition, ImageDirection newDirection)
DGtal::Color myDefaultBackgroundColor
the default background color of the viewer
unsigned int myNbPrismSetList
virtual void closeEvent(QCloseEvent *e)
Overload the QWidget method to customize the viewer state auto saving. Now it save the viewer state i...
void glCreateListBalls(const VectorBall &aVectBall, unsigned int idList)
TextureMode myMode
index of the image domain if exist
float myMeshDefaultLineWidth
void glUpdateBackground()
ImageDirection
the 3 possible axes for the image direction
unsigned char * myTextureImageBufferRGB
void glCreateListQuadD3D(const VectorQuad &aVectQuad, unsigned int idList)
std::vector< typename Viewer3D< Space, KSpace >::LineD3D > VectorLine
unsigned int * myTabImage
the height of the image
GLfloat myLightPosition[4]
the light position (distance)
Image2DDomainD3D(TDomain aDomain, ImageDirection normalDir=zDirection, double xBottomLeft=0.0, double yBottomLeft=0.0, double zBottomLeft=0.0, std::string mode="BoundingBox")
unsigned char mySelectionColorShift
void glCreateListTrianglesWired(const std::vector< VectorTriangle > &aVectTriangle, unsigned int idList)
void sortSurfelFromCamera()
Viewer3D< Space, KSpace >::TextureMode myMode
virtual bool mousePressEvent(const Viewer &viewer, QMouseEvent *event)
const GLfloat myDefaultRenderSpec
Display3D< Space, KSpace > Display
unsigned int myImageWidth
int myRefMouseYPos
the reference mouse x-position used to determince the light position change (azimuth)
void green(const unsigned char aGreenValue)
std::vector< Image2DDomainD3D > myImageDomainList
Used to store all the domains.
void blue(const unsigned char aBlueValue)
void setUseGLPointForBalls(bool useOpenGLPt)
const GLfloat myPlasticRenderDiff
qglviewer::Vec myOrig
information linked to the navigation in the viewer
virtual bool keyPressEvent(Viewer &viewer, QKeyEvent *event)
BOOST_CONCEPT_ASSERT((concepts::CSpace< TSpace >))
void updateAn2DDomainOrientation(unsigned int imageIndex, double xPosition, double yPosition, double zPosition, ImageDirection newDirection)
bool myLightPositionFixToCamera
static void rotatePoint(TValues &x, TValues &y, TValues &z, double cx, double cy, double cz, double rotationAngle, ImageDirection rotationDir)
std::string myMode
the mode of representation of the image domain
GLuint myTriangleSetListId
lists of the list to draw
unsigned int myIndexDomain
true if the draw have a domain
void selfDisplay(std::ostream &out) const
Aim: Implements basic operations that will be used in Point and Vector classes.
GLfloat myMaterialSpecularCoeffs[4]
void translateDomain(double xTranslation=0.0, double yTranslation=0.0, double zTranslation=0.0)
RealPoint point1
The image domain coordinates.
void setNearFar(double _near, double _far)
DGtal::Color color
The image domain color.
void updateLightCoordsFromCamera()
bool operator()(typename Viewer3D< Space, KSpace >::PolygonD3D q1, typename Viewer3D< Space, KSpace >::PolygonD3D q2)
void updateImage3DEmbedding(RealPoint aPoint1, RealPoint aPoint2, RealPoint aPoint3, RealPoint aPoint4)
const GLfloat myDefaultRenderDiff
virtual void drawWithNames()
drawWithNames
virtual void show()
Overload QWidget method in order to add a call to updateList() method (to ensure that the lists are w...
int(* SelectCallbackFct)(void *viewer, DGtal::int32_t name, void *data)
Select callback function type.
void setGLLightAmbientCoefficients(const GLfloat lightAmbientCoeffs[4])
virtual void mousePressEvent(QMouseEvent *e)
static void rotateImageVertex(TImageORDomain &anImageOrDom, double angle, ImageDirection rotationDir)
void setGLDoubleRenderingMode(bool doubleSidedRendering)
GLfloat myLightDiffuseCoeffs[4]
virtual ~Extension()=default
QPoint myPosSelector
a point selected with postSelection
virtual QString helpString(const Viewer &viewer) const
void sortQuadFromCamera()
unsigned int myNbBallSetList
bool operator()(typename Viewer3D< Space, KSpace >::QuadD3D q1, typename Viewer3D< Space, KSpace >::QuadD3D q2)
std::map< DGtal::int32_t, std::vector< CubeD3D > > CubesMap
The type that maps identifier name -> vector of CubeD3D.
void setGLScale(float sx, float sy, float sz)
bool myIsDoubleFaceRendering
true if is double face rendering
Viewer3D< Space, KSpace > Self
void updateList(bool needToUpdateBoundingBox=true)
double ZNear
znear distance
GLfloat myLightPositionRefCameraDefault[3]
TextureMode
the modes of representation of an image
void updateImageDataAndParam(const TImageType &image, const TFunctor &aFunctor, double xTranslation=0.0, double yTranslation=0.0, double zTranslation=0.0)
GLTextureImage(const typename Viewer3D< Space, KSpace >::TextureImage &aGSImage)
Aim: Defines a unary functor, which associates arguments to results.
Aim: Defines the concept describing a read-only image, which is a refinement of CPointFunctor.
const GLfloat myMetallicRenderDiff
ImageDirection myDirection
the direction of the domain (x, y or z axe)
GLuint myTriangleSetListWiredId
void updateImageOrientation(ImageDirection normalDir, double xBottomLeft, double yBottomLeft, double zBottomLeft)
void glCreateListQuadMapsWired(const typename Display3D< Space, KSpace >::QuadsMap &aQuadMap, unsigned int idList)
void updateDomainOrientation(ImageDirection normalDir, double xBottomLeft, double yBottomLeft, double zBottomLeft)
void updateEmbeddingTextureImage(unsigned int anImageIndex, typename Space::Point aPoint1, typename Space::Point aPoint2, typename Space::Point aPoint3, typename Space::Point aPoint4)
virtual void mouseReleaseEvent(QMouseEvent *e)
~TextureImage()
the mode of representation of the image
void glCreateListCubesMaps(const typename Display3D< Space, KSpace >::CubesMap &aCubeMap, unsigned int idList)
double myGLLineMinWidth
to improve the display of gl points
GLfloat myLightSpecularCoeffs[4]