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 
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 
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 
188 
192 
196 
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 
270 
273  void setSpotlightInnerAngle(const Radian& val);
274 
277  void setSpotlightOuterAngle(const Radian& val);
278 
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 
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 
382 
389  void setCustomShadowCameraSetup(const ShadowCameraSetupPtr& customShadowSetup);
390 
395 
398 
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);
438 
444  void setShadowNearClipDistance(Real nearClip) { mShadowNearClipDist = nearClip; }
445 
452  Real getShadowNearClipDistance() const { return mShadowNearClipDist; }
453 
458 
468  void setShadowFarClipDistance(Real farClip) { mShadowFarClipDist = farClip; }
469 
476  Real getShadowFarClipDistance() const { return mShadowFarClipDist; }
477 
481  Real _deriveShadowFarClipDistance(const Camera* maincam) const;
482 
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;
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 
613  {
614  protected:
616  public:
619 
621 
622  const String& getType(void) const;
624 
625  };
629 #include "OgreHeaderPrefix.h"
630 
631 } // namespace Ogre
632 #endif // _LIGHT_H__
#define _OgreExport
Definition: OgrePlatform.h:257
A 3D box aligned with the x/y/z axes.
A viewpoint from which the scene will be rendered.
Definition: OgreCamera.h:87
Class representing colour.
Structure recording the use of an automatic parameter.
Collects together the program parameters used for a GpuProgram.
Factory object for creating Light instances.
Definition: OgreLight.h:613
MovableObject * createInstanceImpl(const String &name, const NameValuePairList *params)
Internal implementation of create method - must be overridden.
const String & getType(void) const
Get the type of the object to be created.
static String FACTORY_TYPE_NAME
Definition: OgreLight.h:620
void destroyInstance(MovableObject *obj)
Destroy an instance of the object.
Representation of a dynamic light source in the scene.
Definition: OgreLight.h:74
Real mAttenuationLinear
Definition: OgreLight.h:576
Real getBoundingRadius(void) const
Retrieves the radius of the origin-centered bounding sphere for this object.
Definition: OgreLight.h:342
virtual const PlaneBoundedVolumeList & _getFrustumClipVolumes(const Camera *const cam) const
Internal method for calculating the clip volumes outside of the frustum which can be used to determin...
Vector4 getAs4DVector(bool cameraRelativeIfSet=false) const
Gets the details of this light as a 4D vector.
const AxisAlignedBox & getBoundingBox(void) const
Retrieves the local axis-aligned bounding box for this object.
void setSpecularColour(Real red, Real green, Real blue)
Sets the colour of the specular light given off by this source.
Real _deriveShadowNearClipDistance(const Camera *maincam) const
Derive a shadow camera near distance from either the light, or from the main camera if the light does...
Camera * mCameraToBeRelativeTo
Definition: OgreLight.h:593
void resetShadowFarDistance(void)
Tells the light to use the shadow far distance of the SceneManager.
const String & getAnimableDictionaryName(void) const
Get the name of the animable dictionary for this class.
void visitRenderables(Renderable::Visitor *visitor, bool debugRenderables=false)
Method to allow a caller to abstractly iterate over the Renderable instances that this MovableObject ...
Real mSpotFalloff
Definition: OgreLight.h:572
void setDirection(const Vector3 &vec)
Sets the direction in which a light points.
void setDiffuseColour(const ColourValue &colour)
Sets the colour of the diffuse light given off by this source.
Real mRange
Definition: OgreLight.h:574
PlaneBoundedVolume mNearClipVolume
Definition: OgreLight.h:598
const Radian & getSpotlightOuterAngle(void) const
Returns the angle covered by the spotlights outer cone.
Real mAttenuationConst
Definition: OgreLight.h:575
const ColourValue & getSpecularColour(void) const
Returns the colour of specular light given off by this light source.
void setVisible(bool visible)
void setAttenuation(Real range, Real constant, Real linear, Real quadratic)
Sets the attenuation parameters of the light source i.e.
void _notifyAttached(Node *parent, bool isTagPoint=false)
Internal method called to notify the object that it has been attached to a node.
bool mDerivedTransformDirty
Is the derived transform dirty?
Definition: OgreLight.h:601
Real mSpotNearClip
Definition: OgreLight.h:573
Radian mSpotOuter
Definition: OgreLight.h:570
size_t _getIndexInFrame() const
Gets the index at which this light is in the current render.
Definition: OgreLight.h:411
Vector3 mDirection
Definition: OgreLight.h:568
static String msMovableType
Shared class-level name for Movable type.
Definition: OgreLight.h:596
const ShadowCameraSetupPtr & getCustomShadowCameraSetup(void) const
Return a pointer to the custom shadow camera setup (null means use SceneManager global version).
void setCustomShadowCameraSetup(const ShadowCameraSetupPtr &customShadowSetup)
Set this light to use a custom shadow camera when rendering texture shadows.
bool mOwnShadowFarDist
Definition: OgreLight.h:580
uint32 getTypeFlags(void) const
Override to return specific type flag.
Real getAttenuationConstant(void) const
Returns the constant factor in the attenuation formula.
void setCustomParameter(uint16 index, const Vector4 &value)
Sets a custom parameter for this Light, which may be used to drive calculations for this specific Ren...
LightTypes
Defines the type of light.
Definition: OgreLight.h:83
Real mShadowNearClipDist
Definition: OgreLight.h:584
Vector3 mDerivedPosition
Definition: OgreLight.h:588
const Vector4 & getCustomParameter(uint16 index) const
Gets the custom value associated with this Light at the given index.
const Vector3 & getPosition(void) const
Returns the position of the light.
bool isInLightRange(const Ogre::AxisAlignedBox &container) const
Check whether a bounding box is included in the lighted area of the light.
virtual const PlaneBoundedVolume & _getNearClipVolume(const Camera *const cam) const
Internal method for calculating the 'near clip volume', which is the volume formed between the near c...
Real mShadowFarDist
Definition: OgreLight.h:581
Vector3 mPosition
Definition: OgreLight.h:564
void setType(LightTypes type)
Sets the type of light - see LightTypes for more info.
Real mAttenuationQuad
Definition: OgreLight.h:577
Real mShadowFarClipDist
Definition: OgreLight.h:585
void setSpecularColour(const ColourValue &colour)
Sets the colour of the specular light given off by this source.
Real getSpotlightFalloff(void) const
Returns the falloff between the inner and outer cones of the spotlight.
Real getShadowFarDistance(void) const
Gets the maximum distance away from the camera that shadows by this light will be visible.
virtual void _updateCustomGpuParameter(uint16 paramIndex, const GpuProgramParameters::AutoConstantEntry &constantEntry, GpuProgramParameters *params) const
Update a custom GpuProgramParameters constant which is derived from information only this Light knows...
bool isInLightRange(const Ogre::Sphere &sphere) const
Check whether a sphere is included in the lighted area of the light.
void _calcTempSquareDist(const Vector3 &worldPos)
internal method for calculating current squared distance from some world position
ColourValue mSpecular
Definition: OgreLight.h:566
ColourValue mDiffuse
Definition: OgreLight.h:565
AnimableValuePtr createAnimableValue(const String &valueName)
Create a reference-counted AnimableValuePtr for the named value.
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
const Vector3 & getDerivedPosition(bool cameraRelativeIfSet=false) const
Retrieves the position of the light including any transform from nodes it is attached to.
void initialiseAnimableDictionary(StringVector &vec) const
Internal method for initialising dictionary; should be implemented by subclasses wanting to expose an...
void setPowerScale(Real power)
Set a scaling factor to indicate the relative power of a light.
void _notifyIndexInFrame(size_t i)
Definition: OgreLight.h:412
const String & getMovableType(void) const
Returns the type name of this object.
void resetCustomShadowCameraSetup(void)
Reset the shadow camera setup to the default.
void setSpotlightRange(const Radian &innerAngle, const Radian &outerAngle, Real falloff=1.0)
Sets the range of a spotlight, i.e.
LightTypes getType(void) const
Returns the light type.
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
Real _deriveShadowFarClipDistance(const Camera *maincam) const
Derive a shadow camera far distance from either the light, or from the main camera if the light doesn...
virtual void update(void) const
Internal method for synchronising with parent node (if any)
Real getAttenuationRange(void) const
Returns the absolute upper range of the light.
Vector3 mDerivedDirection
Definition: OgreLight.h:589
Real getAttenuationLinear(void) const
Returns the linear factor in the attenuation formula.
Real getAttenuationQuadric(void) const
Returns the quadric factor in the attenuation formula.
const Radian & getSpotlightInnerAngle(void) const
Returns the angle covered by the spotlights inner cone.
void setDirection(Real x, Real y, Real z)
Sets the direction in which a light points.
Real getPowerScale(void) const
Set the scaling factor which indicates the relative power of a light.
Real getShadowFarDistanceSquared(void) const
void setPosition(const Vector3 &vec)
Sets the position of the light.
void _updateRenderQueue(RenderQueue *queue)
Internal method by which the movable object must add Renderable subclass instances to the rendering q...
Vector3 mDerivedCamRelativePosition
Definition: OgreLight.h:591
map< uint16, Vector4 >::type CustomParameterMap
Definition: OgreLight.h:606
void _notifyMoved(void)
Internal method called to notify the object that it has been moved.
Radian mSpotInner
Definition: OgreLight.h:571
Real getSpotlightNearClipDistance() const
Get the near clip plane distance to be used by spotlights that use light clipping.
Definition: OgreLight.h:294
Light(const String &name)
Normal constructor.
size_t mIndexInFrame
Definition: OgreLight.h:579
const Vector3 & getDerivedDirection(void) const
Retrieves the direction of the light including any transform from nodes it is attached to.
const Vector3 & getDirection(void) const
Returns the light's direction.
void setShadowFarDistance(Real distance)
Sets the maximum distance away from the camera that shadows by this light will be visible.
Light()
Default constructor (for Python mainly).
void _setCameraRelative(Camera *cam)
Set the camera which this light should be relative to, for camera-relative rendering.
void setSpotlightOuterAngle(const Radian &val)
Sets the angle covered by the spotlights outer cone.
ShadowCameraSetupPtr mCustomShadowCameraSetup
Pointer to a custom shadow camera setup.
Definition: OgreLight.h:604
void setSpotlightInnerAngle(const Radian &val)
Sets the angle covered by the spotlights inner cone.
Real mPowerScale
Definition: OgreLight.h:578
void setDiffuseColour(Real red, Real green, Real blue)
Sets the colour of the diffuse light given off by this source.
const ColourValue & getDiffuseColour(void) const
Returns the colour of the diffuse light given off by this light source (see setDiffuseColour for more...
Real tempSquareDist
Temp tag used for sorting.
Definition: OgreLight.h:77
void setSpotlightNearClipDistance(Real nearClip)
Set the near clip plane distance to be used by spotlights that use light clipping,...
Definition: OgreLight.h:289
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
void setSpotlightFalloff(Real val)
Sets the falloff between the inner and outer cones of the spotlight.
Real mShadowFarDistSquared
Definition: OgreLight.h:582
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
CustomParameterMap mCustomParameters
Stores the custom parameters for the light.
Definition: OgreLight.h:608
void setPosition(Real x, Real y, Real z)
Sets the position of the light.
bool mDerivedCamRelativeDirty
Definition: OgreLight.h:592
~Light()
Standard destructor.
LightTypes mLightType
Definition: OgreLight.h:563
PlaneBoundedVolumeList mFrustumClipVolumes
Definition: OgreLight.h:599
Interface definition for a factory class which produces a certain kind of MovableObject,...
Abstract class defining a movable object in a scene.
Class representing a general-purpose node an articulated scene graph.
Definition: OgreNode.h:65
Represents a convex volume bounded by planes.
Wrapper class which indicates a given angle value is in Radians.
Definition: OgreMath.h:48
Class to manage the scene object rendering queue.
Visitor object that can be used to iterate over a collection of Renderable instances abstractly.
A sphere primitive, mostly used for bounds checking.
Definition: OgreSphere.h:52
Standard 3-dimensional vector.
Definition: OgreVector3.h:52
4-dimensional homogeneous vector.
Definition: OgreVector4.h:46
vector< String >::type StringVector
map< String, String >::type NameValuePairList
Name / value parameter pair (first = name, second = value)
Definition: OgreCommon.h:550
vector< PlaneBoundedVolume >::type PlaneBoundedVolumeList
float Real
Software floating point type.
unsigned short uint16
Definition: OgrePlatform.h:360
unsigned int uint32
Definition: OgrePlatform.h:359
_StringBase String

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.