# OgreLight.h

Go to the documentation of this file.

    00001 /*
    00002 -----------------------------------------------------------------------------
    00003 This source file is part of OGRE
    00004     (Object-oriented Graphics Rendering Engine)
    00005 For the latest info, see http://www.ogre3d.org/
    00006
    00007 Copyright (c) 2000-2009 Torus Knot Software Ltd
    00008
    00009 Permission is hereby granted, free of charge, to any person obtaining a copy
    00010 of this software and associated documentation files (the "Software"), to deal
    00011 in the Software without restriction, including without limitation the rights
    00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    00013 copies of the Software, and to permit persons to whom the Software is
    00014 furnished to do so, subject to the following conditions:
    00015
    00016 The above copyright notice and this permission notice shall be included in
    00017 all copies or substantial portions of the Software.
    00018
    00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    00025 THE SOFTWARE.
    00026 -----------------------------------------------------------------------------
    00027 */
    00028 #ifndef _LIGHT_H__
    00029 #define _LIGHT_H__
    00030
    00031 #include "OgrePrerequisites.h"
    00032
    00033 #include "OgreColourValue.h"
    00034 #include "OgreVector3.h"
    00035 #include "OgreVector4.h"
    00036 #include "OgreString.h"
    00037 #include "OgreMovableObject.h"
    00038 #include "OgrePlaneBoundedVolume.h"
    00039 #include "OgreShadowCameraSetup.h"
    00040
    00041 namespace Ogre {
    00042
    00043
    00072     class _OgreExport Light : public MovableObject
    00073     {
    00074     public:
    00076         Real tempSquareDist;
    00078         void _calcTempSquareDist(const Vector3& worldPos);
    00079
    00081         enum LightTypes
    00082         {
    00084             LT_POINT = 0,
    00086             LT_DIRECTIONAL = 1,
    00088             LT_SPOTLIGHT = 2
    00089         };
    00090
    00093         Light();
    00094
    00097         Light(const String& name);
    00098
    00101         ~Light();
    00102
    00105         void setType(LightTypes type);
    00106
    00109         LightTypes getType(void) const;
    00110
    00120         void setDiffuseColour(Real red, Real green, Real blue);
    00121
    00131         void setDiffuseColour(const ColourValue& colour);
    00132
    00135         const ColourValue& getDiffuseColour(void) const;
    00136
    00146         void setSpecularColour(Real red, Real green, Real blue);
    00147
    00157         void setSpecularColour(const ColourValue& colour);
    00158
    00161         const ColourValue& getSpecularColour(void) const;
    00162
    00182         void setAttenuation(Real range, Real constant, Real linear, Real quadratic);
    00183
    00186         Real getAttenuationRange(void) const;
    00187
    00190         Real getAttenuationConstant(void) const;
    00191
    00194         Real getAttenuationLinear(void) const;
    00195
    00198         Real getAttenuationQuadric(void) const;
    00199
    00206         void setPosition(Real x, Real y, Real z);
    00207
    00214         void setPosition(const Vector3& vec);
    00215
    00220         const Vector3& getPosition(void) const;
    00221
    00228         void setDirection(Real x, Real y, Real z);
    00229
    00236         void setDirection(const Vector3& vec);
    00237
    00242         const Vector3& getDirection(void) const;
    00243
    00254         void setSpotlightRange(const Radian& innerAngle, const Radian& outerAngle, Real falloff = 1.0);
    00255
    00258         const Radian& getSpotlightInnerAngle(void) const;
    00259
    00262         const Radian& getSpotlightOuterAngle(void) const;
    00263
    00266         Real getSpotlightFalloff(void) const;
    00267
    00270         void setSpotlightInnerAngle(const Radian& val);
    00271
    00274         void setSpotlightOuterAngle(const Radian& val);
    00275
    00278         void setSpotlightFalloff(Real val);
    00279
    00287         void setPowerScale(Real power);
    00288
    00292         Real getPowerScale(void) const;
    00293
    00295         void _notifyAttached(Node* parent, bool isTagPoint = false);
    00296
    00298         void _notifyMoved(void);
    00299
    00301         const AxisAlignedBox& getBoundingBox(void) const;
    00302
    00304         void _updateRenderQueue(RenderQueue* queue);
    00305
    00307         const String& getMovableType(void) const;
    00308
    00312         const Vector3& getDerivedPosition(bool cameraRelativeIfSet = false) const;
    00313
    00315         const Vector3& getDerivedDirection(void) const;
    00316
    00322         void setVisible(bool visible);
    00323
    00325         Real getBoundingRadius(void) const { return 0; /* not visible */ }
    00326
    00336         Vector4 getAs4DVector(bool cameraRelativeIfSet = false) const;
    00337
    00347         virtual const PlaneBoundedVolume& _getNearClipVolume(const Camera* const cam) const;
    00348
    00355         virtual const PlaneBoundedVolumeList& _getFrustumClipVolumes(const Camera* const cam) const;
    00356
    00358         uint32 getTypeFlags(void) const;
    00359
    00361         AnimableValuePtr createAnimableValue(const String& valueName);
    00362
    00369         void setCustomShadowCameraSetup(const ShadowCameraSetupPtr& customShadowSetup);
    00370
    00374         void resetCustomShadowCameraSetup(void);
    00375
    00377         const ShadowCameraSetupPtr& getCustomShadowCameraSetup(void) const;
    00378
    00380         void visitRenderables(Renderable::Visitor* visitor,
    00381             bool debugRenderables = false);
    00382
    00391         size_t _getIndexInFrame() const { return mIndexInFrame; }
    00392         void _notifyIndexInFrame(size_t i) { mIndexInFrame = i; }
    00393
    00409         void setShadowFarDistance(Real distance);
    00412         void resetShadowFarDistance(void);
    00416         Real getShadowFarDistance(void) const;
    00417         Real getShadowFarDistanceSquared(void) const;
    00418
    00423         void setShadowNearClipDistance(Real nearClip) { mShadowNearClipDist = nearClip; }
    00424
    00430         Real getShadowNearClipDistance() const { return mShadowNearClipDist; }
    00431
    00435         Real _deriveShadowNearClipDistance(const Camera* maincam) const;
    00436
    00444         void setShadowFarClipDistance(Real farClip) { mShadowFarClipDist = farClip; }
    00445
    00451         Real getShadowFarClipDistance() const { return mShadowFarClipDist; }
    00452
    00456         Real _deriveShadowFarClipDistance(const Camera* maincam) const;
    00457
    00459         void _setCameraRelative(Camera* cam);
    00460
    00476         void setCustomParameter(uint16 index, const Vector4& value);
    00477
    00482         const Vector4& getCustomParameter(uint16 index) const;
    00483
    00506         virtual void _updateCustomGpuParameter(uint16 paramIndex,
    00507             const GpuProgramParameters::AutoConstantEntry& constantEntry,
    00508             GpuProgramParameters* params) const;
    00509     protected:
    00511         virtual void update(void) const;
    00512
    00514         const String& getAnimableDictionaryName(void) const;
    00516         void initialiseAnimableDictionary(StringVector& vec) const;
    00517
    00518         LightTypes mLightType;
    00519         Vector3 mPosition;
    00520         ColourValue mDiffuse;
    00521         ColourValue mSpecular;
    00522
    00523         Vector3 mDirection;
    00524
    00525         Radian mSpotOuter;
    00526         Radian mSpotInner;
    00527         Real mSpotFalloff;
    00528         Real mRange;
    00529         Real mAttenuationConst;
    00530         Real mAttenuationLinear;
    00531         Real mAttenuationQuad;
    00532         Real mPowerScale;
    00533         size_t mIndexInFrame;
    00534         bool mOwnShadowFarDist;
    00535         Real mShadowFarDist;
    00536         Real mShadowFarDistSquared;
    00537
    00538         Real mShadowNearClipDist;
    00539         Real mShadowFarClipDist;
    00540
    00541
    00542         mutable Vector3 mDerivedPosition;
    00543         mutable Vector3 mDerivedDirection;
    00544         // Slightly hacky but unless we separate observed light render state from main Light...
    00545         mutable Vector3 mDerivedCamRelativePosition;
    00546         mutable bool mDerivedCamRelativeDirty;
    00547         Camera* mCameraToBeRelativeTo;
    00548
    00550         static String msMovableType;
    00551
    00552         mutable PlaneBoundedVolume mNearClipVolume;
    00553         mutable PlaneBoundedVolumeList mFrustumClipVolumes;
    00555         mutable bool mDerivedTransformDirty;
    00556
    00558         mutable ShadowCameraSetupPtr mCustomShadowCameraSetup;
    00559
    00560         typedef map<uint16, Vector4>::type CustomParameterMap;
    00562         CustomParameterMap mCustomParameters;
    00563     };
    00564
    00566     class _OgreExport LightFactory : public MovableObjectFactory
    00567     {
    00568     protected:
    00569         MovableObject* createInstanceImpl( const String& name, const NameValuePairList* params);
    00570     public:
    00571         LightFactory() {}
    00572         ~LightFactory() {}
    00573
    00574         static String FACTORY_TYPE_NAME;
    00575
    00576         const String& getType(void) const;
    00577         void destroyInstance( MovableObject* obj);
    00578
    00579     };
    00583 } // Namespace
    00584 #endif

Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Wed Nov 3 2010 19:24:51