#include <osg/Node>
#include <osg/Switch>
+#include <simgear/ephemeris/ephemeris.hxx>
+
#include <simgear/scene/sky/cloud.hxx>
#include <simgear/scene/sky/dome.hxx>
#include <simgear/scene/sky/moon.hxx>
#include <simgear/scene/sky/oursun.hxx>
#include <simgear/scene/sky/stars.hxx>
-SG_USING_STD(vector);
+using std::vector;
typedef struct {
SGVec3f view_pos, zero_elev, view_up;
double lon, lat, alt, spin;
double gst;
- double sun_ra, sun_dec, sun_dist;
- double moon_ra, moon_dec, moon_dist;
+ double sun_dist;
+ double moon_dist;
double sun_angle;
} SGSkyState;
SGVec3f sky_color, fog_color;
SGVec3f cloud_color;
double sun_angle, moon_angle;
- int nplanets, nstars;
- SGVec3d *planet_data;
- SGVec3d *star_data;
} SGSkyColor;
/**
SGSharedPtr<SGStars> stars;
layer_list_type cloud_layers;
- osg::ref_ptr<osg::Group> pre_root, post_root, cloud_root;
- osg::ref_ptr<osg::Switch> pre_selector, post_selector;
- osg::ref_ptr<osg::MatrixTransform> pre_transform, post_transform;
+ osg::ref_ptr<osg::Group> pre_root, cloud_root;
+ osg::ref_ptr<osg::Switch> pre_selector;
+ osg::ref_ptr<osg::Group> pre_transform;
+
+ osg::ref_ptr<osg::MatrixTransform> _ephTransform;
SGPath tex_path;
double ramp_up; // in seconds
double ramp_down; // in seconds
+ // 3D clouds enabled
+ bool clouds_3d_enabled;
+
+ // 3D cloud density
+ double clouds_3d_density;
+
public:
/** Constructor */
*/
void build( double h_radius_m, double v_radius_m,
double sun_size, double moon_size,
- int nplanets, SGVec3d planet_data[7],
- int nstars, SGVec3d star_data[], SGPropertyNode *property_tree_node );
+ const SGEphemeris& eph, SGPropertyNode *property_tree_node );
/**
* Repaint the sky components based on current value of sun_angle,
* @param star_data an array of star right ascensions, declinations,
* and magnitudes
*/
- bool repaint( const SGSkyColor &sc );
+ bool repaint( const SGSkyColor &sc, const SGEphemeris& eph );
/**
* Reposition the sky at the specified origin and orientation
* @param moon_dec the moon's current declination
* @param moon_dist the moon's distance from the current view point.
*/
- bool reposition( SGSkyState &st, double dt = 0.0 );
+ bool reposition( const SGSkyState &st, const SGEphemeris& eph, double dt = 0.0 );
/**
* Modify the given visibility based on cloud layers, thickness,
void modify_vis( float alt, float time_factor );
osg::Node* getPreRoot() { return pre_root.get(); }
- osg::Node* getPostRoot() { return post_root.get(); }
osg::Node* getCloudRoot() { return cloud_root.get(); }
/**
* Specify the texture path (optional, defaults to current directory)
* @param path base path to texture locations
*/
- inline void texture_path( const string& path ) {
- tex_path = SGPath( path );
- }
+ void texture_path( const string& path );
/** Enable drawing of the sky. */
inline void enable() {
pre_selector->setValue(0, 1);
- post_selector->setValue(0, 1);
}
/**
*/
inline void disable() {
pre_selector->setValue(0, 0);
- post_selector->setValue(0, 0);
}
/**
inline void set_visibility( float v ) {
effective_visibility = visibility = (v <= 25.0) ? 25.0 : v;
}
+
+ /** Get 3D cloud density */
+ virtual double get_3dCloudDensity() const;
+
+ /** Set 3D cloud density
+ * @param density 3D cloud density
+ */
+ virtual void set_3dCloudDensity(double density);
+
+ /** Get 3D cloud visibility range*/
+ virtual float get_3dCloudVisRange() const;
+
+ /** Set 3D cloud visibility range
+ * @param density 3D cloud visibility range
+ */
+ virtual void set_3dCloudVisRange(float vis);
+
};