]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/sky/sky.hxx
Merge branch 'ehofman/sound'
[simgear.git] / simgear / scene / sky / sky.hxx
index 46c302845dfeb260199bd9fbb762c17ffec77312..28678041ac820ea441acd39c7b64a6f63d738f84 100644 (file)
@@ -44,6 +44,9 @@
 #include <osg/Node>
 #include <osg/Switch>
 
+#include <simgear/ephemeris/ephemeris.hxx>
+#include <simgear/math/SGMath.hxx>
+
 #include <simgear/scene/sky/cloud.hxx>
 #include <simgear/scene/sky/dome.hxx>
 #include <simgear/scene/sky/moon.hxx>
@@ -54,21 +57,22 @@ using std::vector;
 
 
 typedef struct {
-       SGVec3f view_pos, zero_elev, view_up;
-       double lon, lat, alt, spin;
+        SGVec3d pos;
+        SGGeod pos_geod;
+        SGQuatd ori;
+        double 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;
 
 typedef struct {
-       SGVec3f sky_color, fog_color;
+       SGVec3f sky_color;
+        SGVec3f adj_sky_color;
+        SGVec3f fog_color;
        SGVec3f cloud_color;
        double sun_angle, moon_angle;
-       int nplanets, nstars;
-        SGVec3d *planet_data;
-        SGVec3d *star_data;
 } SGSkyColor;
 
 /**
@@ -219,7 +223,9 @@ private:
 
     osg::ref_ptr<osg::Group> pre_root, cloud_root;
     osg::ref_ptr<osg::Switch> pre_selector;
-    osg::ref_ptr<osg::MatrixTransform> pre_transform;
+    osg::ref_ptr<osg::Group> pre_transform;
+
+    osg::ref_ptr<osg::MatrixTransform> _ephTransform;
 
     SGPath tex_path;
 
@@ -237,6 +243,12 @@ private:
     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 */
@@ -262,8 +274,7 @@ public:
      */
     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,
@@ -289,7 +300,7 @@ public:
      * @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
@@ -319,7 +330,7 @@ public:
      * @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,
@@ -338,9 +349,8 @@ public:
      * 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);
@@ -359,6 +369,11 @@ public:
      */
     inline SGVec4f get_sun_color() { return oursun->get_color(); }
 
+    /**
+     * Get the current scene color
+     */
+    inline SGVec4f get_scene_color() { return oursun->get_scene_color(); }
+
     /**
      * Add a cloud layer.
      *
@@ -408,6 +423,23 @@ public:
     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);
+
 };