3 * Provides a class to model a single cloud layer
6 // Written by Curtis Olson, started June 2000.
8 // Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Library General Public
12 // License as published by the Free Software Foundation; either
13 // version 2 of the License, or (at your option) any later version.
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Library General Public License for more details.
20 // You should have received a copy of the GNU Library General Public
21 // License along with this library; if not, write to the
22 // Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 // Boston, MA 02111-1307, USA.
28 #ifndef _SG_CLOUD_HXX_
29 #define _SG_CLOUD_HXX_
31 #include <simgear/compiler.h>
40 * A class layer to model a single cloud layer
46 * This is the list of available cloud coverages/textures
49 SG_CLOUD_OVERCAST = 0,
55 SG_MAX_CLOUD_COVERAGES
60 * @param tex_path the path to the set of cloud textures
62 SGCloudLayer( const string &tex_path );
67 ~SGCloudLayer( void );
69 /** get the cloud span (in meters) */
70 float getSpan_m () const;
73 * @param span_m the cloud span in meters
75 void setSpan_m (float span_m);
77 /** get the layer elevation (in meters) */
78 float getElevation_m () const;
80 * set the layer elevation. Note that this specifies the bottom
81 * of the cloud layer. The elevation of the top of the layer is
82 * elevation_m + thickness_m.
83 * @param elevation_m the layer elevation in meters
85 void setElevation_m (float elevation_m);
87 /** get the layer thickness */
88 float getThickness_m () const;
90 * set the layer thickness.
91 * @param thickness_m the layer thickness in meters.
93 void setThickness_m (float thickness_m);
96 * get the transition/boundary layer depth in meters. This
97 * allows gradual entry/exit from the cloud layer via adjusting
100 float getTransition_m () const;
102 * set the transition layer size in meters
103 * @param transition_m the transition layer size in meters
105 void setTransition_m (float transition_m);
107 /** get coverage type */
108 Coverage getCoverage () const;
111 * @param coverage the coverage type
113 void setCoverage (Coverage coverage);
115 /** build the cloud object */
119 * repaint the cloud colors based on the specified fog_color
120 * @param fog_color the fog color
122 bool repaint( sgVec3 fog_color );
125 * reposition the cloud layer at the specified origin and
127 * @param p position vector
128 * @param up the local up vector
129 * @param lon specifies a rotation about the Z axis
130 * @param lat specifies a rotation about the new Y axis
131 * @param spin specifies a rotation about the new Z axis
132 * (and orients the sunrise/set effects)
134 bool reposition( sgVec3 p, sgVec3 up, double lon, double lat, double alt );
136 /** draw the cloud layer */
142 ssgTransform *layer_transform;
145 ssgColourArray *cl[4];
146 ssgVertexArray *vl[4];
147 ssgTexCoordArray *tl[4];
149 // height above sea level (meters)
153 float layer_thickness;
154 float layer_transition;
155 Coverage layer_coverage;
158 // for handling texture coordinates to simulate cloud movement
159 // from winds, and to simulate the clouds being tied to ground
160 // position, not view position
161 // double xoff, yoff;
162 double last_lon, last_lat;
167 // make an ssgSimpleState for a cloud layer given the named texture
168 ssgSimpleState *sgCloudMakeState( const string &path );
171 #endif // _SG_CLOUD_HXX_