00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef FOG_H_
00026 #define FOG_H_
00027
00028 namespace Lamp{
00029
00030
00031
00032
00033
00034 class Fog{
00035 friend class Scene;
00036 public:
00037
00038 enum Mode{
00039
00040 modeLinear = 0,
00041
00042 modeExponent,
00043
00044 modeExponent2
00045 };
00046
00047
00048
00049
00050
00051
00052 virtual float getLimit();
00053
00054
00055
00056
00057
00058
00059 virtual void setEnabled(bool enabled){ enabled_ = enabled; }
00060
00061
00062
00063
00064
00065 virtual bool isEnabled() const{ return enabled_; }
00066
00067
00068
00069
00070
00071
00072 virtual void setColor(const Color4c& color){
00073 Assert(color.a == 0);
00074 color_ = color;
00075 }
00076
00077
00078
00079
00080
00081 virtual const Color4c& getColor() const{ return color_; }
00082
00083
00084
00085
00086
00087
00088 virtual void setMode(Mode mode){ mode_ = mode; }
00089
00090
00091
00092
00093
00094 virtual Mode getMode() const{ return mode_; }
00095
00096
00097
00098
00099
00100 virtual void setModeString(const String& mode){
00101 if(mode == "linear"){
00102 mode_ = modeLinear;
00103 }else if(mode == "exponent"){
00104 mode_ = modeExponent;
00105 }else if(mode == "exponent2"){
00106 mode_ = modeExponent2;
00107 }else{
00108 ErrorOut("Fog::setModeString() "
00109 "Unknown fog mode " + mode);
00110 }
00111 }
00112
00113
00114
00115
00116
00117 virtual String getModeString() const{
00118 if(mode_ == modeLinear){
00119 return "linear";
00120 }else if(mode_ == modeExponent){
00121 return "exponent";
00122 }else if(mode_ == modeExponent2){
00123 return "exponent2";
00124 }
00125 return "";
00126 }
00127
00128
00129
00130
00131
00132
00133
00134
00135 virtual void setDensity(float density){
00136 Assert(density >= 0.f);
00137 Assert(density <= 1.f);
00138 density_ = density;
00139 }
00140
00141
00142
00143
00144
00145
00146
00147 virtual float getDensity() const{ return density_; }
00148
00149
00150
00151
00152
00153
00154
00155
00156 virtual void setNear(float fogNear){
00157 Assert(fogNear >= 0.f);
00158 fogNear_ = fogNear;
00159 }
00160
00161
00162
00163
00164
00165
00166
00167 virtual float getNear() const{ return fogNear_; }
00168
00169
00170
00171
00172
00173
00174
00175
00176 virtual void setFar(float fogFar){
00177 Assert(fogFar >= 0.f);
00178 fogFar_ = fogFar;
00179 }
00180
00181
00182
00183
00184
00185
00186
00187 virtual float getFar() const{ return fogFar_; }
00188
00189
00190 protected:
00191
00192
00193
00194 Fog();
00195
00196
00197
00198
00199 virtual ~Fog();
00200
00201
00202 private:
00203
00204 Fog(const Fog& copy);
00205
00206
00207 void operator =(const Fog& copy);
00208
00209
00210 Color4c color_;
00211
00212 Mode mode_;
00213
00214 float density_;
00215
00216 float fogNear_;
00217
00218 float fogFar_;
00219
00220 bool enabled_;
00221
00222 static const float limitValue;
00223
00224 static const float exponentLimit;
00225
00226 static const float exponent2Limit;
00227
00228 };
00229
00230
00231 }
00232 #endif // End of FOG_H_
00233