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
91
95
98 Light(const String& name);
99
103
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
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
445
453
458
469
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 };
626
628
629} // namespace Ogre
630
631#include "OgreHeaderSuffix.h"
632
633#endif // _LIGHT_H__
#define _OgreExport
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.
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.
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.
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
@ LT_POINT
Point light sources give off light equally in all directions, so require only position not direction.
Definition OgreLight.h:85
@ LT_DIRECTIONAL
Directional lights simulate parallel light beams from a distant source, hence have direction but no p...
Definition OgreLight.h:87
@ LT_SPOTLIGHT
Spotlights simulate a cone of light from a source so require position and direction,...
Definition OgreLight.h:89
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...
Abstract class defining a movable object in a scene.
MovableObject()
Constructor.
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
SharedPtr< AnimableValue > AnimableValuePtr
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
SharedPtr< ShadowCameraSetup > ShadowCameraSetupPtr
float Real
Software floating point type.
unsigned short uint16
unsigned int uint32
_StringBase String
std::map< K, V, P, A > type