OGRE  1.9.0
OgreLight.h
Go to the documentation of this file.
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4 (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2014 Torus Knot Software Ltd
8
9Permission is hereby granted, free of charge, to any person obtaining a copy
10of this software and associated documentation files (the "Software"), to deal
11in the Software without restriction, including without limitation the rights
12to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13copies of the Software, and to permit persons to whom the Software is
14furnished to do so, subject to the following conditions:
15
16The above copyright notice and this permission notice shall be included in
17all copies or substantial portions of the Software.
18
19THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25THE 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"
40#include "OgreHeaderPrefix.h"
41
42namespace 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
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
274
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
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
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
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} // namespace Ogre
630
631#include "OgreHeaderSuffix.h"
632
633#endif // _LIGHT_H__
#define _OgreExport
Definition: OgrePlatform.h:260
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.
static String FACTORY_TYPE_NAME
Definition: OgreLight.h:620
void destroyInstance(MovableObject *obj)
Destroy an instance of the object.
const String & getType(void) const
Get the type of the object to be created.
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
Vector4 getAs4DVector(bool cameraRelativeIfSet=false) const
Gets the details of this light as a 4D vector.
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.
void visitRenderables(Renderable::Visitor *visitor, bool debugRenderables=false)
Method to allow a caller to abstractly iterate over the Renderable instances that this MovableObject ...
const Vector3 & getPosition(void) const
Returns the position of the light.
Real mSpotFalloff
Definition: OgreLight.h:572
void setDirection(const Vector3 &vec)
Sets the direction in which a light points.
const String & getAnimableDictionaryName(void) const
Get the name of the animable dictionary for this class.
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
void setVisible(bool visible)
Tells this object whether to be visible or not, if it has a renderable component.
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
const Vector3 & getDerivedPosition(bool cameraRelativeIfSet=false) const
Retrieves the position of the light including any transform from nodes it is attached to.
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 String & getMovableType(void) const
Returns the type name of this object.
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
map< uint16, Vector4 >::type CustomParameterMap
Definition: OgreLight.h:606
bool isInLightRange(const Ogre::AxisAlignedBox &container) const
Check whether a bounding box is included in the lighted area of the light.
const Radian & getSpotlightInnerAngle(void) const
Returns the angle covered by the spotlights inner cone.
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.
const AxisAlignedBox & getBoundingBox(void) const
Retrieves the local axis-aligned bounding box for this object.
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
const ColourValue & getSpecularColour(void) const
Returns the colour of specular light given off by this light source.
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
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
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
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...
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
const Vector3 & getDirection(void) const
Returns the light's direction.
Real getAttenuationLinear(void) const
Returns the linear factor in the attenuation formula.
Real getAttenuationQuadric(void) const
Returns the quadric factor in the attenuation formula.
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
const Vector4 & getCustomParameter(uint16 index) const
Gets the custom value associated with this Light at the given index.
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
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
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.
const Vector3 & getDerivedDirection(void) const
Retrieves the direction of the light including any transform from nodes it is attached to.
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.
const ShadowCameraSetupPtr & getCustomShadowCameraSetup(void) const
Return a pointer to the custom shadow camera setup (null means use SceneManager global version).
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 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.
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
const ColourValue & getDiffuseColour(void) const
Returns the colour of the diffuse light given off by this light source (see setDiffuseColour for more...
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:345
unsigned int uint32
Definition: OgrePlatform.h:344
_StringBase String
std::map< K, V, P, A > type