Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __SP_SCENE_LIGHT_H__
00009 #define __SP_SCENE_LIGHT_H__
00010
00011
00012 #include "Base/spStandard.hpp"
00013 #include "Base/spDimensionMatrix4.hpp"
00014 #include "SceneGraph/spRenderNode.hpp"
00015
00016
00017 namespace sp
00018 {
00019 namespace scene
00020 {
00021
00022
00023
00024
00025
00026
00027 static const s32 MAX_COUNT_OF_SCENELIGHTS = 0x0D31;
00028
00029 class SceneGraph;
00030
00031
00039 class SP_EXPORT Light : public SceneNode
00040 {
00041
00042 public:
00043
00044 Light(const ELightModels Type = LIGHT_DIRECTIONAL);
00045 virtual ~Light();
00046
00047
00048
00057 void setLightingColor(const video::color &Diffuse, const video::color &Ambient = 255, const video::color &Specular = 0);
00058 void getLightingColor(video::color &Diffuse, video::color &Ambient, video::color &Specular) const;
00059
00066 void setSpotCone(const f32 InnerConeAngle, const f32 OuterConeAngle);
00067 void getSpotCone(f32 &InnerConeAngle, f32 &OuterConeAngle) const;
00068
00069 void setSpotConeInner(f32 Angle);
00070 void setSpotConeOuter(f32 Angle);
00071
00080 bool getSpotFrustum(scene::ViewFrustum &Frustum, dim::vector3df &GlobalPosition) const;
00081
00086 void setVolumetric(bool isVolumetric);
00087
00092 void setVolumetricRadius(f32 Radius);
00093 f32 getVolumetricRadius() const;
00094
00099 void setVolumetricRange(f32 Constant, f32 Linear, f32 Quadratic);
00100 void getVolumetricRange(f32 &Constant, f32 &Linear, f32 &Quadratic) const;
00101
00103 void setDirection(const dim::vector3df &Direction);
00104 void setDirection(const dim::matrix4f &Matrix);
00105
00107 void setVisible(bool isVisible);
00108
00110 Light* copy() const;
00111
00116 virtual void render();
00117
00118
00119
00127 static void setRCUsage(bool UseAllRCs);
00128
00129
00130
00132 inline void setLightModel(const ELightModels Type)
00133 {
00134 LightModel_ = Type;
00135 }
00137 inline ELightModels getLightModel() const
00138 {
00139 return LightModel_;
00140 }
00141
00143 inline void setDiffuseColor(const video::color &Color)
00144 {
00145 setLightingColor(Color, AmbientColor_, SpecularColor_);
00146 }
00148 inline video::color getDiffuseColor() const
00149 {
00150 return DiffuseColor_;
00151 }
00152
00154 inline void setAmbientColor(const video::color &Color)
00155 {
00156 setLightingColor(DiffuseColor_, Color, SpecularColor_);
00157 }
00159 inline video::color getAmbientColor() const
00160 {
00161 return AmbientColor_;
00162 }
00163
00165 inline void setSpecularColor(const video::color &Color)
00166 {
00167 setLightingColor(DiffuseColor_, AmbientColor_, Color);
00168 }
00170 inline video::color getSpecularColor() const
00171 {
00172 return SpecularColor_;
00173 }
00174
00176 inline f32 getSpotConeInner() const
00177 {
00178 return SpotInnerConeAngle_;
00179 }
00181 inline f32 getSpotConeOuter() const
00182 {
00183 return SpotOuterConeAngle_;
00184 }
00185
00186 inline bool getVolumetric() const
00187 {
00188 return isVolumetric_;
00189 }
00190
00197 inline void setShadow(bool Enable)
00198 {
00199 hasShadow_ = Enable;
00200 }
00206 inline bool getShadow() const
00207 {
00208 return hasShadow_;
00209 }
00210
00212 inline dim::vector3df getDirection() const
00213 {
00214 return Direction_;
00215 }
00216
00218 inline dim::matrix4f getProjectionMatrix() const
00219 {
00220 return ProjectionMatrix_;
00221 }
00222
00223 protected:
00224
00225 friend class SceneGraph;
00226
00227
00228
00229 static const f32 DEF_SPOTANGLE_INNER;
00230 static const f32 DEF_SPOTANGLE_OUTER;
00231
00232
00233
00234 u32 LightID_;
00235 ELightModels LightModel_;
00236
00237 dim::vector3df Direction_;
00238 f32 SpotInnerConeAngle_;
00239 f32 SpotOuterConeAngle_;
00240 dim::matrix4f ProjectionMatrix_;
00241
00242 bool isVolumetric_;
00243 bool hasShadow_;
00244
00245 f32 AttenuationConstant_;
00246 f32 AttenuationLinear_;
00247 f32 AttenuationQuadratic_;
00248
00249 video::color DiffuseColor_, AmbientColor_, SpecularColor_;
00250
00251 private:
00252
00253
00254
00255 void registerLight();
00256 void updateProjectionMatrix();
00257
00258
00259
00260 static bool UseAllRCs_;
00261
00262 };
00263
00264
00265 }
00266
00267 }
00268
00269
00270 #endif
00271
00272
00273
00274