Comet.hpp   Comet.hpp 
skipping to change at line 35 skipping to change at line 35
/*! \class Comet /*! \class Comet
\author Bogdan Marinov, Georg Zotti (orbit computation enhancements, tails) \author Bogdan Marinov, Georg Zotti (orbit computation enhancements, tails)
Some of the code in this class is re-used from the parent Planet cla ss. Some of the code in this class is re-used from the parent Planet cla ss.
\todo Implement better comet rendering (star-like objects, no physic al body). \todo Implement better comet rendering (star-like objects, no physic al body).
\todo (Long-term) Photo realistic comet rendering, see https://bluep rints.launchpad.net/stellarium/+spec/realistic-comet-rendering \todo (Long-term) Photo realistic comet rendering, see https://bluep rints.launchpad.net/stellarium/+spec/realistic-comet-rendering
2013-12: GZ: New algorithms for position computation following Paul Heafner: Fundamental Ephemeris Computations (Willmann-Bell 1999). 2013-12: GZ: New algorithms for position computation following Paul Heafner: Fundamental Ephemeris Computations (Willmann-Bell 1999).
2014-01: GZ: Parabolic tails appropriately scaled/rotated. Much is c urrently empirical, leaving room for physics-based improvements. 2014-01: GZ: Parabolic tails appropriately scaled/rotated. Much is c urrently empirical, leaving room for physics-based improvements.
2014-08: GZ: speedup in case hundreds of comets are loaded. 2014-08: GZ: speedup in case hundreds of comets are loaded.
2014-11: GZ: tail extinction, better brightness balance.
*/ */
class Comet : public Planet class Comet : public Planet
{ {
public: public:
friend class SolarSystem; // Solar System initializes static constants. friend class SolarSystem; // Solar System initializes static constants.
Comet(const QString& englishName, Comet(const QString& englishName,
int flagLighting, int flagLighting,
double radius, double radius,
double oblateness, double oblateness,
Vec3f color, Vec3f color,
skipping to change at line 79 skipping to change at line 80
// - Size <- Size of what? // - Size <- Size of what?
//! \param core the StelCore object //! \param core the StelCore object
//! \param flags a set of InfoStringGroup items to include in the re turn value. //! \param flags a set of InfoStringGroup items to include in the re turn value.
//! \return a QString containing an HMTL encoded description of the Comet. //! \return a QString containing an HMTL encoded description of the Comet.
virtual QString getInfoString(const StelCore *core, const InfoString Group &flags) const; virtual QString getInfoString(const StelCore *core, const InfoString Group &flags) const;
//The Comet class inherits the "Planet" type because the SolarSystem class //The Comet class inherits the "Planet" type because the SolarSystem class
//was not designed to handle different types of objects. //was not designed to handle different types of objects.
//virtual QString getType() const {return "Comet";} //virtual QString getType() const {return "Comet";}
//! \todo Find better sources for the g,k system //! \todo Find better sources for the g,k system
virtual float getVMagnitude(const StelCore* core) const; virtual float getVMagnitude(const StelCore* core) const;
//! sets the nameI18 property with the appropriate translation.
//! Function overriden to handle the problem with name conflicts.
virtual void translateName(const StelTranslator& trans);
virtual QString getEnglishName(void) const {return englishName;}
virtual QString getNameI18n(void) const {return nameI18;}
//! \brief sets absolute magnitude and slope parameter. //! \brief sets absolute magnitude and slope parameter.
//! These are the parameters in the IAU's two-parameter magnitude sy stem //! These are the parameters in the IAU's two-parameter magnitude sy stem
//! for comets. They are used to calculate the apparent magnitude at //! for comets. They are used to calculate the apparent magnitude at
//! different distances from the Sun. They are not used in the same way //! different distances from the Sun. They are not used in the same way
//! as the same parameters in MinorPlanet. //! as the same parameters in MinorPlanet.
void setAbsoluteMagnitudeAndSlope(const double magnitude, const doub le slope); void setAbsoluteMagnitudeAndSlope(const double magnitude, const doub le slope);
//! set value for semi-major axis in AU //! set value for semi-major axis in AU
void setSemiMajorAxis(const double value); void setSemiMajorAxis(const double value);
//! get sidereal period for comet, days, or returns 0 if not possibl e (paraboloid, hyperboloid orbit) //! get sidereal period for comet, days, or returns 0 if not possibl e (paraboloid, hyperboloid orbit)
virtual double getSiderealPeriod() const; virtual double getSiderealPeriod() const;
//! GZ: override from Planet: extend with tail details. //! GZ: override from Planet: extend with tail details.
virtual void computePosition(const double date); //virtual void computePosition(const double date);
//! re-implementation of Planet's draw() //! re-implementation of Planet's draw()
virtual void draw(StelCore* core, float maxMagLabels, const QFont& p lanetNameFont); virtual void draw(StelCore* core, float maxMagLabels, const QFont& p lanetNameFont);
// re-implementation of Planet's update() to prepare tails (extincti
on etc). @param deltaTime: ms (since last call)
// TODO: computePosition can be removed and things added here!
virtual void update(int deltaTime);
private: private:
//! @returns estimates for (Coma diameter [AU], gas tail length [AU] ). //! @returns estimates for (Coma diameter [AU], gas tail length [AU] ).
//! Using the formula from Guide found by the GSoC2012 initiative at http://www.projectpluto.com/update7b.htm#comet_tail_formula //! Using the formula from Guide found by the GSoC2012 initiative at http://www.projectpluto.com/update7b.htm#comet_tail_formula
Vec2f getComaDiameterAndTailLengthAU(); Vec2f getComaDiameterAndTailLengthAU();
void drawTail(StelCore* core, StelProjector::ModelViewTranformP tran sfo, bool gas); void drawTail(StelCore* core, StelProjector::ModelViewTranformP tran sfo, bool gas);
void drawComa(StelCore* core, StelProjector::ModelViewTranformP tran sfo); void drawComa(StelCore* core, StelProjector::ModelViewTranformP tran sfo);
//! compute a coma, faked as simple disk to be tilted towards the ob server. //! compute a coma, faked as simple disk to be tilted towards the ob server.
//! @param diameter Diameter of Coma [AU] //! @param diameter Diameter of Coma [AU]
void computeComa(const float diameter); void computeComa(const float diameter);
skipping to change at line 120 skipping to change at line 130
//! compute tail shape. This is a paraboloid shell with triangular m esh (indexed vertices). //! compute tail shape. This is a paraboloid shell with triangular m esh (indexed vertices).
//! Try to call not for every frame... //! Try to call not for every frame...
//! To be more efficient, the arrays are only computed if they are e mpty. //! To be more efficient, the arrays are only computed if they are e mpty.
//! @param parameter the parameter p of the parabola. z=r²/2p (r²=x² +y²) //! @param parameter the parameter p of the parabola. z=r²/2p (r²=x² +y²)
//! @param lengthfactor The parabola will be lengthened. This shifts the visible focus, so it must be here. //! @param lengthfactor The parabola will be lengthened. This shifts the visible focus, so it must be here.
//! @param vertexArr vertex array, collects x0, y0, z0, x1, y1, z1, ... //! @param vertexArr vertex array, collects x0, y0, z0, x1, y1, z1, ...
//! @param texCoordArr texture coordinates u0, v0, u1, v1, ... //! @param texCoordArr texture coordinates u0, v0, u1, v1, ...
//! @param colorArr vertex colors (if not textured) r0, g0, b0, r1, g1, b1, ... //! @param colorArr vertex colors (if not textured) r0, g0, b0, r1, g1, b1, ...
//! @param indices into the former arrays (zero-starting), triplets forming triangles: t0,0, t0,1, t0,2, t1,0, t1,1, t1,2, ... //! @param indices into the former arrays (zero-starting), triplets forming triangles: t0,0, t0,1, t0,2, t1,0, t1,1, t1,2, ...
//! @param xOffset for the dust tail, this may introduce a bend. Uni ts are x per sqrt(z). //! @param xOffset for the dust tail, this may introduce a bend. Uni ts are x per sqrt(z).
void computeParabola(const float parameter, const float topradius, c onst float zshift, QVector<double>& vertexArr, QVector<float>& texCoordArr, QVector<unsigned short>& indices, const float xOffset=0.0f); void computeParabola(const float parameter, const float topradius, c onst float zshift, QVector<Vec3d>& vertexArr, QVector<float>& texCoordArr, QVector<unsigned short>& indices, const float xOffset=0.0f);
double absoluteMagnitude; double absoluteMagnitude;
double slopeParameter; double slopeParameter;
double semiMajorAxis; double semiMajorAxis;
bool isCometFragment; bool isCometFragment;
bool nameIsProvisionalDesignation; bool nameIsProvisionalDesignation;
//GZ Tail additions //GZ Tail additions
Vec2f tailFactors; // result of latest call to getComaDiameterAndTai lLengthAU(); Results cached here for infostring. [0]=Coma diameter, [1] gas tail length. Vec2f tailFactors; // result of latest call to getComaDiameterAndTai lLengthAU(); Results cached here for infostring. [0]=Coma diameter, [1] gas tail length.
bool tailActive; //! true if there is a tail worth bo bool tailActive; //! true if there is a tail long eno
thering (longer than COMET_MIN_TAIL_LENGTH_AU)? Drawing tails is quite cost ugh to be worth drawing. Drawing tails is quite costly.
ly. bool tailBright; //! true if tail is bright enough to
draw.
double deltaJDtail; //! like deltaJD, but time differenc e between tail geometry updates. double deltaJDtail; //! like deltaJD, but time differenc e between tail geometry updates.
double lastJDtail; //! like lastJD, but time of last tai l geometry update. double lastJDtail; //! like lastJD, but time of last ta il geometry update.
Mat4d gasTailRot; //! rotation matrix for gas tail par abola Mat4d gasTailRot; //! rotation matrix for gas tail par abola
Mat4d dustTailRot; //! rotation matrix for the skewed d ust tail parabola Mat4d dustTailRot; //! rotation matrix for the skewed d ust tail parabola
float dustTailWidthFactor; //!< empirical individual broadening of the dust tail end, compared to the gas tail end. Actually, dust tail wi dth=2*comaWidth*dustTailWidthFactor. Default 1.5 float dustTailWidthFactor; //!< empirical individual broadening of the dust tail end, compared to the gas tail end. Actually, dust tail wi dth=2*comaWidth*dustTailWidthFactor. Default 1.5
float dustTailLengthFactor; //!< empirical individual length of dust tail relative to gas tail. Taken from ssystem.ini, typical value 0.3.. 0.5, default 0.4 float dustTailLengthFactor; //!< empirical individual length of dust tail relative to gas tail. Taken from ssystem.ini, typical value 0.3.. 0.5, default 0.4
float dustTailBrightnessFactor; //!< empirical individual brightness of dust tail relative to gas tail. Taken from ssystem.ini, default 1.5 float dustTailBrightnessFactor; //!< empirical individual brightness of dust tail relative to gas tail. Taken from ssystem.ini, default 1.5
QVector<double> comaVertexArr; QVector<double> comaVertexArr;
QVector<float> comaTexCoordArr; // --> 2014-08: could also be decla red static, but it is filled by StelPainter... QVector<float> comaTexCoordArr; // --> 2014-08: could also be decla red static, but it is filled by StelPainter...
// These are to avoid having index arrays for each comet when all ar e equal. // These are to avoid having index arrays for each comet when all ar e equal.
static bool createTailIndices; static bool createTailIndices;
static bool createTailTextureCoords; static bool createTailTextureCoords;
QVector<double> gastailVertexArr; // computed frequently, describes QVector<Vec3d> gastailVertexArr; // computed frequently, describes
parabolic shape (along z axis) of gas tail. parabolic shape (along z axis) of gas tail.
QVector<double> dusttailVertexArr; // computed frequently, describes QVector<Vec3d> dusttailVertexArr; // computed frequently, describes
parabolic shape (along z axis) of dust tail. parabolic shape (along z axis) of dust tail.
QVector<Vec3f> gastailColorArr; // NEW computed for every 5 mins,
modulates gas tail brightness for extinction
QVector<Vec3f> dusttailColorArr; // NEW computed for every 5 mins,
modulates dust tail brightness for extinction
static QVector<float> tailTexCoordArr; // computed only once for all comets! static QVector<float> tailTexCoordArr; // computed only once for all comets!
static QVector<unsigned short> tailIndices; // computed only once fo r all comets! static QVector<unsigned short> tailIndices; // computed only once fo r all comets!
static StelTextureSP comaTexture; static StelTextureSP comaTexture;
static StelTextureSP tailTexture; // it seems not really necess ary to have different textures. gas tail is just painted blue. static StelTextureSP tailTexture; // it seems not really necess ary to have different textures. gas tail is just painted blue.
}; };
#endif //_COMET_HPP_ #endif //_COMET_HPP_
 End of changes. 8 change blocks. 
10 lines changed or deleted 26 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/