Landscape.hpp   Landscape.hpp 
skipping to change at line 43 skipping to change at line 43
#include <QImage> #include <QImage>
class QSettings; class QSettings;
class StelLocation; class StelLocation;
class StelCore; class StelCore;
class StelPainter; class StelPainter;
//! @class Landscape //! @class Landscape
//! Store and manages the displaying of the Landscape. //! Store and manages the displaying of the Landscape.
//! Don't use this class directly, use the LandscapeMgr. //! Don't use this class directly, use the LandscapeMgr.
//! A landscape's most important element is a photo panorama. //! A landscape's most important element is a photo panorama, or at least a polygon that describes the true horizon visible from your observing locati on.
//! Optional components include: //! Optional components include:
//! - A fog texture that is displayed with the Fog [F] command. //! - A fog texture that is displayed with the Fog [F] command (displayed only if atmosphere is on!).
//! - A location. It is possible to auto-move to the location when loading . //! - A location. It is possible to auto-move to the location when loading .
//! - Atmospheric conditions: temperature/pressure/extinction coefficients . //! - Atmospheric conditions: temperature/pressure/extinction coefficients . These influence refraction and extinction.
//! - Light pollution information (Bortle index) //! - Light pollution information (Bortle index)
//! - A night texture that gets blended over the dimmed daylight panorama. (Spherical and Fisheye only) //! - A night texture that gets blended over the dimmed daylight panorama. (All landscapes except Polygonal.)
//! - A polygonal horizon line (required for PolygonalLandscape). If prese nt, defines a measured horizon line, which can be plotted or queried for ri se/set predictions. //! - A polygonal horizon line (required for PolygonalLandscape). If prese nt, defines a measured horizon line, which can be plotted or queried for ri se/set predictions.
//! - You can set a minimum brightness level to prevent too dark landscape . There is //! - You can set a minimum brightness level to prevent too dark landscape . There is
//! a global activation setting (config.ini[landscape]flag_minimal_brigh tness), //! a global activation setting (config.ini[landscape]flag_minimal_brigh tness),
//! a global value (config.ini[landscape]minimal_brightness), //! a global value (config.ini[landscape]minimal_brightness),
//! and, if config.ini[landscape]flag_landscape_sets_minimal_brightness= true, //! and, if config.ini[landscape]flag_landscape_sets_minimal_brightness= true,
//! optional individual values given in landscape.ini[landscape]minimal_ brightness are used. //! optional individual values given in landscape.ini[landscape]minimal_ brightness are used.
//! //!
//! We discern: //! We discern:
//! @param LandscapeId: The directory name of the landscape. //! @param LandscapeId: The directory name of the landscape.
//! @param name: The landscape name as specified in the LandscapeIni (may contain spaces, UTF8, ...) //! @param name: The landscape name as specified in the LandscapeIni (may contain spaces, UTF8, ...)
skipping to change at line 74 skipping to change at line 74
virtual ~Landscape(); virtual ~Landscape();
//! Load landscape. //! Load landscape.
//! @param landscapeIni A reference to an existing QSettings object which describes the landscape //! @param landscapeIni A reference to an existing QSettings object which describes the landscape
//! @param landscapeId The name of the directory for the landscape f iles (e.g. "ocean") //! @param landscapeId The name of the directory for the landscape f iles (e.g. "ocean")
virtual void load(const QSettings& landscapeIni, const QString& land scapeId) = 0; virtual void load(const QSettings& landscapeIni, const QString& land scapeId) = 0;
virtual void draw(StelCore* core) = 0; virtual void draw(StelCore* core) = 0;
void update(double deltaTime) void update(double deltaTime)
{ {
landFader.update((int)(deltaTime*1000)); landFader.update((int)(deltaTime*1000));
fogFader.update((int)(deltaTime*1000)); fogFader.update((int)(deltaTime*1000));
illumFader.update((int)(deltaTime*1000));
} }
//! Set the brightness of the landscape plus brightness of optional add-on night lightscape. //! Set the brightness of the landscape plus brightness of optional add-on night lightscape.
//! This is called in each draw(). //! This is called in each draw().
void setBrightness(const float b, const float pollutionBrightness=0. 0f) {landscapeBrightness = b; lightScapeBrightness=pollutionBrightness; } void setBrightness(const float b, const float pollutionBrightness=0. 0f) {landscapeBrightness = b; lightScapeBrightness=pollutionBrightness; }
//! Set whether landscape is displayed (does not concern fog) //! Set whether landscape is displayed (does not concern fog)
void setFlagShow(const bool b) {landFader=b;} void setFlagShow(const bool b) {landFader=b;}
//! Get whether landscape is displayed (does not concern fog) //! Get whether landscape is displayed (does not concern fog)
bool getFlagShow() const {return (bool)landFader;} bool getFlagShow() const {return (bool)landFader;}
//! Set whether fog is displayed //! Set whether fog is displayed
void setFlagShowFog(const bool b) {fogFader=b;} void setFlagShowFog(const bool b) {fogFader=b;}
//! Get whether fog is displayed //! Get whether fog is displayed
bool getFlagShowFog() const {return (bool)fogFader;} bool getFlagShowFog() const {return (bool)fogFader;}
//! Set whether illumination is displayed
void setFlagShowIllumination(const bool b) {illumFader=b;}
//! Get whether illumination is displayed
bool getFlagShowIllumination() const {return (bool)illumFader;}
//! Get landscape name //! Get landscape name
QString getName() const {return name;} QString getName() const {return name;}
//! Get landscape author name //! Get landscape author name
QString getAuthorName() const {return author;} QString getAuthorName() const {return author;}
//! Get landscape description //! Get landscape description
QString getDescription() const {return description;} QString getDescription() const {return description;}
//! Return the associated location (may be empty!) //! Return the associated location (may be empty!)
const StelLocation& getLocation() const {return location;} const StelLocation& getLocation() const {return location;}
//! Return if the location is valid (a valid location has a valid pl anetName!) //! Return if the location is valid (a valid location has a valid pl anetName!)
bool hasLocation() const {return (location.planetName.length() > 0); } bool hasLocation() const {return (!(location.planetName.isEmpty())); }
//! Return default Bortle index (light pollution value) or -1 (unkno wn/no change) //! Return default Bortle index (light pollution value) or -1 (unkno wn/no change)
int getDefaultBortleIndex() const {return defaultBortleIndex;} int getDefaultBortleIndex() const {return defaultBortleIndex;}
//! Return default fog setting (0/1) or -1 (no change) //! Return default fog setting (0/1) or -1 (no change)
int getDefaultFogSetting() const {return defaultFogSetting;} int getDefaultFogSetting() const {return defaultFogSetting;}
//! Return default atmosperic extinction [mag/airmass], or -1 (no ch ange) //! Return default atmosperic extinction [mag/airmass], or -1 (no ch ange)
float getDefaultAtmosphericExtinction() const {return defaultExtinct ionCoefficient;} float getDefaultAtmosphericExtinction() const {return defaultExtinct ionCoefficient;}
//! Return configured atmospheric temperature [degrees Celsius], for refraction computation, or -1000 for "unknown/no change". //! Return configured atmospheric temperature [degrees Celsius], for refraction computation, or -1000 for "unknown/no change".
float getDefaultAtmosphericTemperature() const {return defaultTemper ature;} float getDefaultAtmosphericTemperature() const {return defaultTemper ature;}
//! Return configured atmospheric pressure [mbar], for refraction co mputation. //! Return configured atmospheric pressure [mbar], for refraction co mputation.
//! returns -1 to signal "standard conditions" [compute from altitud e], or -2 for "unknown/invalid/no change" //! returns -1 to signal "standard conditions" [compute from altitud e], or -2 for "unknown/invalid/no change"
skipping to change at line 129 skipping to change at line 134
//! @param d the rotation angle in degrees. //! @param d the rotation angle in degrees.
void setZRotation(float d) {angleRotateZOffset = d * M_PI/180.0f;} void setZRotation(float d) {angleRotateZOffset = d * M_PI/180.0f;}
//! Get whether the landscape is currently fully visible (i.e. opaqu e). //! Get whether the landscape is currently fully visible (i.e. opaqu e).
bool getIsFullyVisible() const {return landFader.getInterstate() >= 0.999f;} bool getIsFullyVisible() const {return landFader.getInterstate() >= 0.999f;}
// GZ: NEW FUNCTION: // GZ: NEW FUNCTION:
//! can be used to find sunrise or visibility questions on the real- world landscape horizon. //! can be used to find sunrise or visibility questions on the real- world landscape horizon.
//! Default implementation indicates the horizon equals math horizon . //! Default implementation indicates the horizon equals math horizon .
virtual float getOpacity(Vec3d azalt) const {return (azalt[2]<0 ? 1. 0f : 0.0f); } virtual float getOpacity(Vec3d azalt) const {return (azalt[2]<0 ? 1. 0f : 0.0f); }
//! The list of azimuths and altitudes can come in various formats. We read the first two elements, which can be of formats: //! The list of azimuths (counted from True North towards East) and altitudes can come in various formats. We read the first two elements, whic h can be of formats:
enum horizonListMode { enum horizonListMode {
azDeg_altDeg = 0, //! azimuth[degrees] altitude[degrees] azDeg_altDeg = 0, //! azimuth[degrees] altitude[degrees]
azDeg_zdDeg = 1, //! azimuth[degrees] zenithDistance[degr ees] azDeg_zdDeg = 1, //! azimuth[degrees] zenithDistance[degr ees]
azRad_altRad = 2, //! azimuth[radians] altitude[radians] azRad_altRad = 2, //! azimuth[radians] altitude[radians]
azRad_zdRad = 3, //! azimuth[radians] zenithDistance[radi ans] azRad_zdRad = 3, //! azimuth[radians] zenithDistance[radi ans]
azGrad_altGrad = 4, //! azimuth[new_degrees] altitude[new_de grees] (may be found on theodolites) azGrad_altGrad = 4, //! azimuth[new_degrees] altitude[new_de grees] (may be found on theodolites)
azGrad_zdGrad = 5 //! azimuth[new_degrees] zenithDistance[ new_degrees] (may be found on theodolites) azGrad_zdGrad = 5 //! azimuth[new_degrees] zenithDistance[ new_degrees] (may be found on theodolites)
}; };
protected: protected:
skipping to change at line 166 skipping to change at line 171
QString name; //! Read from landscape.ini:[landscape]name QString name; //! Read from landscape.ini:[landscape]name
QString author; //! Read from landscape.ini:[landscape]author QString author; //! Read from landscape.ini:[landscape]author
QString description; //! Read from landscape.ini:[landscape]descri ption QString description; //! Read from landscape.ini:[landscape]descri ption
float minBrightness; //! Read from landscape.ini:[landscape]minima l_brightness. Allows minimum visibility that cannot be underpowered. float minBrightness; //! Read from landscape.ini:[landscape]minima l_brightness. Allows minimum visibility that cannot be underpowered.
float landscapeBrightness; //! brightness [0..1] to draw the landsc ape. Computed by the LandscapeMgr. float landscapeBrightness; //! brightness [0..1] to draw the landsc ape. Computed by the LandscapeMgr.
float lightScapeBrightness; //! can be used to draw nightscape textu re (e.g. city light pollution), if available. Computed by the LandscapeMgr. float lightScapeBrightness; //! can be used to draw nightscape textu re (e.g. city light pollution), if available. Computed by the LandscapeMgr.
bool validLandscape; //! was a landscape loaded properly? bool validLandscape; //! was a landscape loaded properly?
LinearFader landFader; //! Used to slowly fade in/out landscape pain ting. LinearFader landFader; //! Used to slowly fade in/out landscape pain ting.
LinearFader fogFader; //! Used to slowly fade in/out fog painting. LinearFader fogFader; //! Used to slowly fade in/out fog painting.
LinearFader illumFader;//! Used to slowly fade in/out illumination p ainting.
int rows; //! horizontal rows. May be given in landscape.ini:[lands cape]tesselate_rows. More indicates higher accuracy, but is slower. int rows; //! horizontal rows. May be given in landscape.ini:[lands cape]tesselate_rows. More indicates higher accuracy, but is slower.
int cols; //! vertical columns. May be given in landscape.ini:[lands cape]tesselate_cols. More indicates higher accuracy, but is slower. int cols; //! vertical columns. May be given in landscape.ini:[lands cape]tesselate_cols. More indicates higher accuracy, but is slower.
float angleRotateZ; //! [radians] if pano does not have its left border in the east, rotate in azimuth. Configured in landscape.ini[landscap e]angle_rotatez (or decor_angle_rotatez for old_style landscapes) float angleRotateZ; //! [radians] if pano does not have its left border in the east, rotate in azimuth. Configured in landscape.ini[landscap e]angle_rotatez (or decor_angle_rotatez for old_style landscapes)
float angleRotateZOffset; //! [radians] This is a rotation changeabl e at runtime via setZRotation (called by LandscapeMgr::setZRotation). float angleRotateZOffset; //! [radians] This is a rotation changeabl e at runtime via setZRotation (called by LandscapeMgr::setZRotation).
//! Not in landsca pe.ini: Used in special cases where the horizon may rotate, e.g. on a ship. //! Not in landscape.ini: Used in special cases where the horizon may rotate, e.g. on a ship.
StelLocation location; //! OPTIONAL. If present, can be used to set location. StelLocation location; //! OPTIONAL. If present, can be used to set location.
int defaultBortleIndex; //! May be given in landscape.ini:[location] light_pollution. Default: -1 (no change). int defaultBortleIndex; //! May be given in landscape.ini:[location] light_pollution. Default: -1 (no change).
int defaultFogSetting; //! May be given in landscape.ini:[location] display_fog: -1(no change), 0(off), 1(on). Default: -1. int defaultFogSetting; //! May be given in landscape.ini:[location] display_fog: -1(no change), 0(off), 1(on). Default: -1.
float defaultExtinctionCoefficient; //! May be given in landscape.in i:[location]atmospheric_extinction_coefficient. Default -1 (no change). float defaultExtinctionCoefficient; //! May be given in landscape.in i:[location]atmospheric_extinction_coefficient. Default -1 (no change).
float defaultTemperature; //! [Celsius] May be given in landscape.in i:[location]atmospheric_temperature. default: -1000.0 (no change) float defaultTemperature; //! [Celsius] May be given in landscape.in i:[location]atmospheric_temperature. default: -1000.0 (no change)
float defaultPressure; //! [mbar] May be given in landscape.in i:[location]atmospheric_pressure. Default -1.0 (compute from [location]/alt itude), use -2 to indicate "no change". float defaultPressure; //! [mbar] May be given in landscape.in i:[location]atmospheric_pressure. Default -1.0 (compute from [location]/alt itude), use -2 to indicate "no change".
// Optional elements which, if present, describe a horizon polygon. They can be used to render a line or a filled region, esp. in LandscapePoly gonal // Optional elements which, if present, describe a horizon polygon. They can be used to render a line or a filled region, esp. in LandscapePoly gonal
SphericalRegionP horizonPolygon; //! Optional element describing t he horizon line. SphericalRegionP horizonPolygon; //! Optional element describing t he horizon line.
/ //! Data shall be read from the f
/! Data shall be read from the file given as landscape.ini[landscape]polygo ile given as landscape.ini[landscape]polygonal_horizon_list
nal_horizon_list //! For LandscapePolygonal, this
/ is the only horizon data item.
/! For LandscapePolygonal, this is the only horizon data item.
Vec3f horizonPolygonLineColor ; //! for all horizon types, the ho rizonPolygon line, if specified, will be drawn in this color Vec3f horizonPolygonLineColor ; //! for all horizon types, the ho rizonPolygon line, if specified, will be drawn in this color
/ /! specified in landscape.ini[landscape]horizon_line_color. Negative red (d efault) indicated "don't draw". //! specified in landscape.ini[la ndscape]horizon_line_color. Negative red (default) indicated "don't draw".
}; };
//! @class LandscapeOldStyle //! @class LandscapeOldStyle
//! This was the original landscape, introduced for decorative purposes. It segments the horizon in several tiles //! This was the original landscape, introduced for decorative purposes. It segments the horizon in several tiles
//! (usually 4 or 8), therefore allowing very high resolution horizons also on limited hardware, //! (usually 4 or 8), therefore allowing very high resolution horizons also on limited hardware,
//! and closes the ground with a separate bottom piece. (You may want to co nfigure a map with pointers to surrounding mountains or a compass rose inst ead!) //! and closes the ground with a separate bottom piece. (You may want to co nfigure a map with pointers to surrounding mountains or a compass rose inst ead!)
//! You can use panoramas created in equirectangular or cylindrical coordin ates, for the latter case set //! You can use panoramas created in equirectangular or cylindrical coordin ates, for the latter case set
//! [landscape]tan_mode=true. //! [landscape]tan_mode=true.
//! Until V0.10.5 there was an undetected bug involving vertical positionin g. For historical reasons (many landscapes //! Until V0.10.5 there was an undetected bug involving vertical positionin g. For historical reasons (many landscapes
//! were already configured and published), it was decided to keep this bug as feature, but a fix for new landscapes is //! were already configured and published), it was decided to keep this bug as feature, but a fix for new landscapes is
skipping to change at line 221 skipping to change at line 227
protected: protected:
typedef struct typedef struct
{ {
StelTextureSP tex; StelTextureSP tex;
StelTextureSP tex_illum; // optional light texture. StelTextureSP tex_illum; // optional light texture.
float texCoords[4]; float texCoords[4];
} landscapeTexCoord; } landscapeTexCoord;
private: private:
void drawFog(StelCore* core, StelPainter&) const; void drawFog(StelCore* core, StelPainter&) const;
// GZ NEW: drawLight selects only the self-illuminating panels. // drawLight==true for illumination layer, it then selects only the self-illuminating panels.
void drawDecor(StelCore* core, StelPainter&, const bool drawLight=fa lse) const; void drawDecor(StelCore* core, StelPainter&, const bool drawLight=fa lse) const;
void drawGround(StelCore* core, StelPainter&) const; void drawGround(StelCore* core, StelPainter&) const;
QVector<double> groundVertexArr; QVector<double> groundVertexArr;
QVector<float> groundTexCoordArr; QVector<float> groundTexCoordArr;
StelTextureSP* sideTexs; StelTextureSP* sideTexs;
int nbSideTexs; int nbSideTexs;
int nbSide; int nbSide;
landscapeTexCoord* sides; landscapeTexCoord* sides;
StelTextureSP fogTex; StelTextureSP fogTex;
//landscapeTexCoord fogTexCoord; // GZ: UNUSED!
StelTextureSP groundTex; StelTextureSP groundTex;
QVector<QImage*> sidesImages; // GZ: Required for opacity lookup QVector<QImage*> sidesImages; // Required for opacity lookup
//landscapeTexCoord groundTexCoord; // GZ: UNUSED!
int nbDecorRepeat; int nbDecorRepeat;
float fogAltAngle; float fogAltAngle;
float fogAngleShift; float fogAngleShift;
float decorAltAngle; // vertical extent of the side panels float decorAltAngle; // vertical extent of the side panels
float decorAngleShift; float decorAngleShift;
float groundAngleShift; //! [radians]: altitude of the bottom plane. Usually negative and equal to decorAngleShift float groundAngleShift; //! [radians]: altitude of the bottom plane. Usually negative and equal to decorAngleShift
float groundAngleRotateZ; //! [radians] float groundAngleRotateZ; //! [radians]: rotation to bring top of te xture away from due east.
int drawGroundFirst; int drawGroundFirst;
bool tanMode; // Whether the angles should be converted us ing tan instead of sin, i.e., for a cylindrical pano bool tanMode; // Whether the angles should be converted us ing tan instead of sin, i.e., for a cylindrical pano
bool calibrated; // if true, the documented altitudes are ind eed correct (the original code is buggy!) bool calibrated; // if true, the documented altitudes are ind eed correct (the original code is buggy!)
struct LOSSide struct LOSSide
{ {
StelVertexArray arr; StelVertexArray arr;
StelTextureSP tex; StelTextureSP tex;
bool light; // GZ NEW: true if texture is self-lighting. bool light; // GZ NEW: true if texture is self-lighting.
}; };
skipping to change at line 305 skipping to change at line 309
//! @param maptex the fisheye texture //! @param maptex the fisheye texture
//! @param maptexIllum the fisheye texture that is overlaid in the n ight (streetlights, skyglow, ...) //! @param maptexIllum the fisheye texture that is overlaid in the n ight (streetlights, skyglow, ...)
//! @param texturefov field of view for the photo, degrees //! @param texturefov field of view for the photo, degrees
//! @param angleRotateZ azimuth rotation angle, degrees //! @param angleRotateZ azimuth rotation angle, degrees
void create(const QString name, const QString& maptex, float texture fov, float angleRotateZ); void create(const QString name, const QString& maptex, float texture fov, float angleRotateZ);
void create(const QString name, float texturefov, const QString& map tex, const QString &_maptexFog="", const QString& _maptexIllum="", const fl oat angleRotateZ=0.0f); void create(const QString name, float texturefov, const QString& map tex, const QString &_maptexFog="", const QString& _maptexIllum="", const fl oat angleRotateZ=0.0f);
private: private:
StelTextureSP mapTex; //!< The fisheye image, centered on the z enith. StelTextureSP mapTex; //!< The fisheye image, centered on the z enith.
StelTextureSP mapTexFog; //!< Optional panorama of identical size (create as layer over the mapTex image in your favorite image processor). StelTextureSP mapTexFog; //!< Optional panorama of identical size (create as layer over the mapTex image in your favorite image processor).
//!< can also be smaller, just the texture is again mapped onto the same geometry. //!< can also be smaller, just the textur e is again mapped onto the same geometry.
StelTextureSP mapTexIllum; //!< Optional fisheye image of identical size (create as layer in your favorite image processor) or at least, propor tions. StelTextureSP mapTexIllum; //!< Optional fisheye image of identical size (create as layer in your favorite image processor) or at least, propor tions.
//!< To simulate light pollution (skyglow), street lights, light in windows, ... at night //!< To simulate light pollution (skyglow ), street lights, light in windows, ... at night
QImage *mapImage; //!< The same image as mapTex, but stored in-mem for sampling. QImage *mapImage; //!< The same image as mapTex, but stored in-mem for sampling.
float texFov; float texFov;
}; };
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
//! @class LandscapeSpherical //! @class LandscapeSpherical
//! This uses a single panorama image in spherical (equirectangular) projec tion. A complete image is rectangular with the horizon forming a //! This uses a single panorama image in spherical (equirectangular) projec tion. A complete image is rectangular with the horizon forming a
//! horizontal line centered vertically, and vertical altitude angles linea rly mapped in image height. //! horizontal line centered vertically, and vertical altitude angles linea rly mapped in image height.
//! Since 0.13 and Qt5, large images of 8192x4096 pixels are available, but they still may not work on every hardware. //! Since 0.13 and Qt5, large images of 8192x4096 pixels are available, but they still may not work on every hardware.
skipping to change at line 353 skipping to change at line 357
//! @param _illumTexTop altitude angle of top edge of light pollutio n texture, degrees [90] //! @param _illumTexTop altitude angle of top edge of light pollutio n texture, degrees [90]
//! @param _illumTexBottom altitude angle of bottom edge of light po llution texture, degrees [-90] //! @param _illumTexBottom altitude angle of bottom edge of light po llution texture, degrees [-90]
void create(const QString name, const QString& maptex, const QString &_maptexFog="", const QString& _maptexIllum="", const float _angleRotateZ= 0.0f, void create(const QString name, const QString& maptex, const QString &_maptexFog="", const QString& _maptexIllum="", const float _angleRotateZ= 0.0f,
const float _mapTexTop=90.0f, const float _m apTexBottom=-90.0f, const float _mapTexTop=90.0f, const float _m apTexBottom=-90.0f,
const float _fogTexTop=90.0f, const float _f ogTexBottom=-90.0f, const float _fogTexTop=90.0f, const float _f ogTexBottom=-90.0f,
const float _illumTexTop=90.0f, const float _illumTexBottom=-90.0f); const float _illumTexTop=90.0f, const float _illumTexBottom=-90.0f);
private: private:
StelTextureSP mapTex; //!< The equirectangular panorama texture StelTextureSP mapTex; //!< The equirectangular panorama texture
StelTextureSP mapTexFog; //!< Optional panorama of identical size (create as layer over the mapTex image in your favorite image processor). StelTextureSP mapTexFog; //!< Optional panorama of identical size (create as layer over the mapTex image in your favorite image processor).
//!< can also be smaller, just the texture is again mapped onto the same geometry. //!< can also be smaller, just the textur e is again mapped onto the same geometry.
StelTextureSP mapTexIllum; //!< Optional panorama of identical size (create as layer over the mapTex image in your favorite image processor). StelTextureSP mapTexIllum; //!< Optional panorama of identical size (create as layer over the mapTex image in your favorite image processor).
//!< To simulate light pollution (skyglow), street lights, light in windows, ... at night //!< To simulate light pollution (skyglow ), street lights, light in windows, ... at night
// These vars are here to conserve texture memory. They must be allo wed to be different: a landscape may have its highest elevations at 15°, fo g may reach from -25 to +15°, // These vars are here to conserve texture memory. They must be allo wed to be different: a landscape may have its highest elevations at 15°, fo g may reach from -25 to +15°,
// light pollution may cover -5° (street lamps slightly below) plus parts of or even the whole sky. All have default values to simplify life. // light pollution may cover -5° (street lamps slightly below) plus parts of or even the whole sky. All have default values to simplify life.
float mapTexTop; //!< zenithal top angle of the landscape texture, radians float mapTexTop; //!< zenithal top angle of the landscape texture, radians
float mapTexBottom; //!< zenithal bottom angle of the float mapTexBottom; //!< zenithal bottom angle of the landsca
landscape texture, radians pe texture, radians
float fogTexTop; //!< zenithal top angle of the fo float fogTexTop; //!< zenithal top angle of the fog textur
g texture, radians e, radians
float fogTexBottom; //!< zenithal bottom angle of the float fogTexBottom; //!< zenithal bottom angle of the fog tex
fog texture, radians ture, radians
float illumTexTop; //!< zenithal top angle of the il float illumTexTop; //!< zenithal top angle of the illuminati
lumination texture, radians on texture, radians
float illumTexBottom; //!< zenithal bottom angle of the illumin ation texture, radians float illumTexBottom; //!< zenithal bottom angle of the illumin ation texture, radians
QImage *mapImage; //!< The same image as mapTex, but stored in-mem for opacity sampling. QImage *mapImage; //!< The same image as mapTex, but stored in-mem for opacity sampling.
}; };
#endif // _LANDSCAPE_HPP_ #endif // _LANDSCAPE_HPP_
 End of changes. 21 change blocks. 
30 lines changed or deleted 33 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/