OgreLight.h
Go to the documentation of this file.
1 /*
2 -----------------------------------------------------------------------------
3 This source file is part of OGRE
4  (Object-oriented Graphics Rendering Engine)
5 For the latest info, see http://www.ogre3d.org/
6 
7 Copyright (c) 2000-2013 Torus Knot Software Ltd
8 
9 Permission is hereby granted, free of charge, to any person obtaining a copy
10 of this software and associated documentation files (the "Software"), to deal
11 in the Software without restriction, including without limitation the rights
12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 copies of the Software, and to permit persons to whom the Software is
14 furnished to do so, subject to the following conditions:
15 
16 The above copyright notice and this permission notice shall be included in
17 all copies or substantial portions of the Software.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 THE SOFTWARE.
26 -----------------------------------------------------------------------------
27 */
28 #ifndef _LIGHT_H__
29 #define _LIGHT_H__
30 
31 #include "OgrePrerequisites.h"
32 
33 #include "OgreColourValue.h"
34 #include "OgreVector3.h"
35 #include "OgreVector4.h"
36 #include "OgreString.h"
37 #include "OgreMovableObject.h"
38 #include "OgrePlaneBoundedVolume.h"
39 #include "OgreShadowCameraSetup.h"
40 #include "OgreHeaderPrefix.h"
41 
42 namespace Ogre {
43 
44 
73  class _OgreExport Light : public MovableObject
74  {
75  public:
79  void _calcTempSquareDist(const Vector3& worldPos);
80 
83  {
85  LT_POINT = 0,
87  LT_DIRECTIONAL = 1,
89  LT_SPOTLIGHT = 2
90  };
91 
94  Light();
95 
98  Light(const String& name);
99 
102  ~Light();
103 
106  void setType(LightTypes type);
107 
110  LightTypes getType(void) const;
111 
121  void setDiffuseColour(Real red, Real green, Real blue);
122 
132  void setDiffuseColour(const ColourValue& colour);
133 
136  const ColourValue& getDiffuseColour(void) const;
137 
147  void setSpecularColour(Real red, Real green, Real blue);
148 
158  void setSpecularColour(const ColourValue& colour);
159 
162  const ColourValue& getSpecularColour(void) const;
163 
183  void setAttenuation(Real range, Real constant, Real linear, Real quadratic);
184 
187  Real getAttenuationRange(void) const;
188 
191  Real getAttenuationConstant(void) const;
192 
195  Real getAttenuationLinear(void) const;
196 
199  Real getAttenuationQuadric(void) const;
200 
207  void setPosition(Real x, Real y, Real z);
208 
215  void setPosition(const Vector3& vec);
216 
221  const Vector3& getPosition(void) const;
222 
229  void setDirection(Real x, Real y, Real z);
230 
237  void setDirection(const Vector3& vec);
238 
243  const Vector3& getDirection(void) const;
244 
257  void setSpotlightRange(const Radian& innerAngle, const Radian& outerAngle, Real falloff = 1.0);
258 
261  const Radian& getSpotlightInnerAngle(void) const;
262 
265  const Radian& getSpotlightOuterAngle(void) const;
266 
269  Real getSpotlightFalloff(void) const;
270 
273  void setSpotlightInnerAngle(const Radian& val);
274 
277  void setSpotlightOuterAngle(const Radian& val);
278 
281  void setSpotlightFalloff(Real val);
282 
289  void setSpotlightNearClipDistance(Real nearClip) { mSpotNearClip = nearClip; }
290 
294  Real getSpotlightNearClipDistance() const { return mSpotNearClip; }
295 
304  void setPowerScale(Real power);
305 
309  Real getPowerScale(void) const;
310 
312  void _notifyAttached(Node* parent, bool isTagPoint = false);
313 
315  void _notifyMoved(void);
316 
318  const AxisAlignedBox& getBoundingBox(void) const;
319 
321  void _updateRenderQueue(RenderQueue* queue);
322 
324  const String& getMovableType(void) const;
325 
329  const Vector3& getDerivedPosition(bool cameraRelativeIfSet = false) const;
330 
332  const Vector3& getDerivedDirection(void) const;
333 
339  void setVisible(bool visible);
340 
342  Real getBoundingRadius(void) const { return 0; /* not visible */ }
343 
354  Vector4 getAs4DVector(bool cameraRelativeIfSet = false) const;
355 
366  virtual const PlaneBoundedVolume& _getNearClipVolume(const Camera* const cam) const;
367 
375  virtual const PlaneBoundedVolumeList& _getFrustumClipVolumes(const Camera* const cam) const;
376 
378  uint32 getTypeFlags(void) const;
379 
381  AnimableValuePtr createAnimableValue(const String& valueName);
382 
389  void setCustomShadowCameraSetup(const ShadowCameraSetupPtr& customShadowSetup);
390 
394  void resetCustomShadowCameraSetup(void);
395 
397  const ShadowCameraSetupPtr& getCustomShadowCameraSetup(void) const;
398 
400  void visitRenderables(Renderable::Visitor* visitor,
401  bool debugRenderables = false);
402 
411  size_t _getIndexInFrame() const { return mIndexInFrame; }
412  void _notifyIndexInFrame(size_t i) { mIndexInFrame = i; }
413 
429  void setShadowFarDistance(Real distance);
432  void resetShadowFarDistance(void);
436  Real getShadowFarDistance(void) const;
437  Real getShadowFarDistanceSquared(void) const;
438 
444  void setShadowNearClipDistance(Real nearClip) { mShadowNearClipDist = nearClip; }
445 
452  Real getShadowNearClipDistance() const { return mShadowNearClipDist; }
453 
457  Real _deriveShadowNearClipDistance(const Camera* maincam) const;
458 
468  void setShadowFarClipDistance(Real farClip) { mShadowFarClipDist = farClip; }
469 
476  Real getShadowFarClipDistance() const { return mShadowFarClipDist; }
477 
481  Real _deriveShadowFarClipDistance(const Camera* maincam) const;
482 
484  void _setCameraRelative(Camera* cam);
485 
503  void setCustomParameter(uint16 index, const Vector4& value);
504 
509  const Vector4& getCustomParameter(uint16 index) const;
510 
536  virtual void _updateCustomGpuParameter(uint16 paramIndex,
537  const GpuProgramParameters::AutoConstantEntry& constantEntry,
538  GpuProgramParameters* params) const;
539 
545  bool isInLightRange(const Ogre::Sphere& sphere) const;
546 
552  bool isInLightRange(const Ogre::AxisAlignedBox& container) const;
553 
554  protected:
556  virtual void update(void) const;
557 
559  const String& getAnimableDictionaryName(void) const;
561  void initialiseAnimableDictionary(StringVector& vec) const;
562 
567 
569 
583 
586 
587 
590  // Slightly hacky but unless we separate observed light render state from main Light...
594 
597 
602 
605 
609  };
610 
612  class _OgreExport LightFactory : public MovableObjectFactory
613  {
614  protected:
615  MovableObject* createInstanceImpl( const String& name, const NameValuePairList* params);
616  public:
619 
621 
622  const String& getType(void) const;
623  void destroyInstance(MovableObject* obj);
624 
625  };
629 #include "OgreHeaderPrefix.h"
630 
631 } // namespace Ogre
632 #endif // _LIGHT_H__
Ogre::Light::msMovableType
static String msMovableType
Shared class-level name for Movable type.
Definition: OgreLight.h:596
OgreVector4.h
Ogre
Definition: OgreAndroidLogListener.h:34
Ogre::Light::mSpotNearClip
Real mSpotNearClip
Definition: OgreLight.h:573
Ogre::Light::LightTypes
LightTypes
Defines the type of light.
Definition: OgreLight.h:82
Ogre::map
Definition: OgrePrerequisites.h:533
Ogre::Camera
A viewpoint from which the scene will be rendered.
Definition: OgreCamera.h:86
Ogre::Light::setShadowNearClipDistance
void setShadowNearClipDistance(Real nearClip)
Set the near clip plane distance to be used by the shadow camera, if this light casts texture shadows...
Definition: OgreLight.h:444
Ogre::Light::mNearClipVolume
PlaneBoundedVolume mNearClipVolume
Definition: OgreLight.h:598
Ogre::Light::mPosition
Vector3 mPosition
Definition: OgreLight.h:564
Ogre::LightFactory::~LightFactory
~LightFactory()
Definition: OgreLight.h:618
Ogre::StringVector
vector< String >::type StringVector
Definition: OgreStringVector.h:45
Ogre::Light::getShadowNearClipDistance
Real getShadowNearClipDistance() const
Get the near clip plane distance to be used by the shadow camera, if this light casts texture shadows...
Definition: OgreLight.h:452
Ogre::Light::mRange
Real mRange
Definition: OgreLight.h:574
Ogre::GpuProgramParameters::AutoConstantEntry
Structure recording the use of an automatic parameter.
Definition: OgreGpuProgramParams.h:1215
Ogre::Light
Representation of a dynamic light source in the scene.
Definition: OgreLight.h:73
Ogre::uint16
unsigned short uint16
Definition: OgrePlatform.h:360
Ogre::Light::getShadowFarClipDistance
Real getShadowFarClipDistance() const
Get the far clip plane distance to be used by the shadow camera, if this light casts texture shadows.
Definition: OgreLight.h:476
Ogre::MovableObject
Abstract class defining a movable object in a scene.
Definition: OgreMovableObject.h:60
Ogre::Light::mLightType
LightTypes mLightType
Definition: OgreLight.h:563
Ogre::Light::mShadowFarClipDist
Real mShadowFarClipDist
Definition: OgreLight.h:585
Ogre::Light::mShadowNearClipDist
Real mShadowNearClipDist
Definition: OgreLight.h:584
OgreShadowCameraSetup.h
Ogre::uint32
unsigned int uint32
Definition: OgrePlatform.h:359
Ogre::String
_StringBase String
Definition: OgrePrerequisites.h:439
Ogre::MovableObjectFactory
Interface definition for a factory class which produces a certain kind of MovableObject,...
Definition: OgreMovableObject.h:578
Ogre::Light::mCustomParameters
CustomParameterMap mCustomParameters
Stores the custom parameters for the light.
Definition: OgreLight.h:608
Ogre::Light::mDerivedCamRelativePosition
Vector3 mDerivedCamRelativePosition
Definition: OgreLight.h:591
Ogre::Light::getBoundingRadius
Real getBoundingRadius(void) const
Retrieves the radius of the origin-centered bounding sphere for this object.
Definition: OgreLight.h:342
Ogre::NameValuePairList
map< String, String >::type NameValuePairList
Name / value parameter pair (first = name, second = value)
Definition: OgreCommon.h:550
Ogre::Light::mDerivedDirection
Vector3 mDerivedDirection
Definition: OgreLight.h:589
Ogre::LightFactory
Factory object for creating Light instances.
Definition: OgreLight.h:612
Ogre::Light::mShadowFarDistSquared
Real mShadowFarDistSquared
Definition: OgreLight.h:582
OgreHeaderPrefix.h
Ogre::Light::getSpotlightNearClipDistance
Real getSpotlightNearClipDistance() const
Get the near clip plane distance to be used by spotlights that use light clipping.
Definition: OgreLight.h:294
Ogre::Light::mPowerScale
Real mPowerScale
Definition: OgreLight.h:578
OgrePrerequisites.h
Ogre::Light::mIndexInFrame
size_t mIndexInFrame
Definition: OgreLight.h:579
Ogre::Light::mCustomShadowCameraSetup
ShadowCameraSetupPtr mCustomShadowCameraSetup
Pointer to a custom shadow camera setup.
Definition: OgreLight.h:604
Ogre::Light::setShadowFarClipDistance
void setShadowFarClipDistance(Real farClip)
Set the far clip plane distance to be used by the shadow camera, if this light casts texture shadows.
Definition: OgreLight.h:468
Ogre::Radian
Wrapper class which indicates a given angle value is in Radians.
Definition: OgreMath.h:47
Ogre::LightFactory::LightFactory
LightFactory()
Definition: OgreLight.h:617
Ogre::Light::mAttenuationConst
Real mAttenuationConst
Definition: OgreLight.h:575
Ogre::Light::mDerivedTransformDirty
bool mDerivedTransformDirty
Is the derived transform dirty?
Definition: OgreLight.h:601
Ogre::AxisAlignedBox
A 3D box aligned with the x/y/z axes.
Definition: OgreAxisAlignedBox.h:54
Ogre::Light::mShadowFarDist
Real mShadowFarDist
Definition: OgreLight.h:581
Ogre::GpuProgramParameters
Collects together the program parameters used for a GpuProgram.
Definition: OgreGpuProgramParams.h:702
Ogre::Light::mDerivedPosition
Vector3 mDerivedPosition
Definition: OgreLight.h:588
Ogre::Light::mAttenuationQuad
Real mAttenuationQuad
Definition: OgreLight.h:577
Ogre::Light::mSpecular
ColourValue mSpecular
Definition: OgreLight.h:566
Ogre::Sphere
A sphere primitive, mostly used for bounds checking.
Definition: OgreSphere.h:51
Ogre::SharedPtr< AnimableValue >
Ogre::Light::mSpotOuter
Radian mSpotOuter
Definition: OgreLight.h:570
OgreMovableObject.h
Ogre::Light::mDirection
Vector3 mDirection
Definition: OgreLight.h:568
Ogre::PlaneBoundedVolume
Represents a convex volume bounded by planes.
Definition: OgrePlaneBoundedVolume.h:49
Ogre::Light::mSpotInner
Radian mSpotInner
Definition: OgreLight.h:571
OgreColourValue.h
Ogre::ColourValue
Class representing colour.
Definition: OgreColourValue.h:57
Ogre::Light::mDiffuse
ColourValue mDiffuse
Definition: OgreLight.h:565
Ogre::Light::CustomParameterMap
map< uint16, Vector4 >::type CustomParameterMap
Definition: OgreLight.h:606
Ogre::Vector4
4-dimensional homogeneous vector.
Definition: OgreVector4.h:45
Ogre::Renderable::Visitor
Visitor object that can be used to iterate over a collection of Renderable instances abstractly.
Definition: OgreRenderable.h:377
Ogre::Light::mSpotFalloff
Real mSpotFalloff
Definition: OgreLight.h:572
Ogre::Light::mOwnShadowFarDist
bool mOwnShadowFarDist
Definition: OgreLight.h:580
Ogre::Light::_notifyIndexInFrame
void _notifyIndexInFrame(size_t i)
Definition: OgreLight.h:412
Ogre::Light::mDerivedCamRelativeDirty
bool mDerivedCamRelativeDirty
Definition: OgreLight.h:592
Ogre::Light::mFrustumClipVolumes
PlaneBoundedVolumeList mFrustumClipVolumes
Definition: OgreLight.h:599
Ogre::Light::tempSquareDist
Real tempSquareDist
Temp tag used for sorting.
Definition: OgreLight.h:77
Ogre::Real
float Real
Software floating point type.
Definition: OgrePrerequisites.h:70
Ogre::PlaneBoundedVolumeList
vector< PlaneBoundedVolume >::type PlaneBoundedVolumeList
Definition: OgrePlaneBoundedVolume.h:128
Ogre::Node
Class representing a general-purpose node an articulated scene graph.
Definition: OgreNode.h:64
OgreString.h
Ogre::Light::mAttenuationLinear
Real mAttenuationLinear
Definition: OgreLight.h:576
OgreVector3.h
OgrePlaneBoundedVolume.h
Ogre::Vector3
Standard 3-dimensional vector.
Definition: OgreVector3.h:51
Ogre::RenderQueue
Class to manage the scene object rendering queue.
Definition: OgreRenderQueue.h:92
Ogre::Light::_getIndexInFrame
size_t _getIndexInFrame() const
Gets the index at which this light is in the current render.
Definition: OgreLight.h:411
Ogre::LightFactory::FACTORY_TYPE_NAME
static String FACTORY_TYPE_NAME
Definition: OgreLight.h:620
Ogre::Light::mCameraToBeRelativeTo
Camera * mCameraToBeRelativeTo
Definition: OgreLight.h:593
Ogre::Light::setSpotlightNearClipDistance
void setSpotlightNearClipDistance(Real nearClip)
Set the near clip plane distance to be used by spotlights that use light clipping,...
Definition: OgreLight.h:289

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Tue Apr 13 2021 08:53:15