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 
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 
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__
Vector3 mDirection
Definition: OgreLight.h:568
static String FACTORY_TYPE_NAME
Definition: OgreLight.h:620
Real getSpotlightNearClipDistance() const
Get the near clip plane distance to be used by spotlights that use light clipping.
Definition: OgreLight.h:294
void setSpotlightNearClipDistance(Real nearClip)
Set the near clip plane distance to be used by spotlights that use light clipping, allowing you to render spots as if they start from further down their frustum.
Definition: OgreLight.h:289
#define _OgreExport
Definition: OgrePlatform.h:257
Vector3 mDerivedPosition
Definition: OgreLight.h:588
Real mAttenuationQuad
Definition: OgreLight.h:577
Real mAttenuationConst
Definition: OgreLight.h:575
Abstract class defining a movable object in a scene.
Real getBoundingRadius(void) const
Retrieves the radius of the origin-centered bounding sphere for this object.
Definition: OgreLight.h:342
Radian mSpotInner
Definition: OgreLight.h:571
Real mPowerScale
Definition: OgreLight.h:578
Represents a convex volume bounded by planes.
A sphere primitive, mostly used for bounds checking.
Definition: OgreSphere.h:51
Real mShadowFarClipDist
Definition: OgreLight.h:585
4-dimensional homogeneous vector.
Definition: OgreVector4.h:45
ShadowCameraSetupPtr mCustomShadowCameraSetup
Pointer to a custom shadow camera setup.
Definition: OgreLight.h:604
Real mAttenuationLinear
Definition: OgreLight.h:576
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
Class representing colour.
CustomParameterMap mCustomParameters
Stores the custom parameters for the light.
Definition: OgreLight.h:608
float Real
Software floating point type.
size_t mIndexInFrame
Definition: OgreLight.h:579
PlaneBoundedVolume mNearClipVolume
Definition: OgreLight.h:598
Class to manage the scene object rendering queue.
Vector3 mPosition
Definition: OgreLight.h:564
vector< String >::type StringVector
Real mSpotFalloff
Definition: OgreLight.h:572
Structure recording the use of an automatic parameter.
ColourValue mSpecular
Definition: OgreLight.h:566
Standard 3-dimensional vector.
Definition: OgreVector3.h:51
Visitor object that can be used to iterate over a collection of Renderable instances abstractly...
Class representing a general-purpose node an articulated scene graph.
Definition: OgreNode.h:64
bool mDerivedTransformDirty
Is the derived transform dirty?
Definition: OgreLight.h:601
static String msMovableType
Shared class-level name for Movable type.
Definition: OgreLight.h:596
vector< PlaneBoundedVolume >::type PlaneBoundedVolumeList
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
map< String, String >::type NameValuePairList
Name / value parameter pair (first = name, second = value)
Definition: OgreCommon.h:550
Real tempSquareDist
Temp tag used for sorting.
Definition: OgreLight.h:77
_StringBase String
size_t _getIndexInFrame() const
Gets the index at which this light is in the current render.
Definition: OgreLight.h:411
Radian mSpotOuter
Definition: OgreLight.h:570
ColourValue mDiffuse
Definition: OgreLight.h:565
A viewpoint from which the scene will be rendered.
Definition: OgreCamera.h:86
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
bool mOwnShadowFarDist
Definition: OgreLight.h:580
unsigned int uint32
Definition: OgrePlatform.h:359
bool mDerivedCamRelativeDirty
Definition: OgreLight.h:592
Real mShadowFarDistSquared
Definition: OgreLight.h:582
Real mShadowFarDist
Definition: OgreLight.h:581
void _notifyIndexInFrame(size_t i)
Definition: OgreLight.h:412
Camera * mCameraToBeRelativeTo
Definition: OgreLight.h:593
Real mSpotNearClip
Definition: OgreLight.h:573
LightTypes mLightType
Definition: OgreLight.h:563
LightTypes
Defines the type of light.
Definition: OgreLight.h:82
map< uint16, Vector4 >::type CustomParameterMap
Definition: OgreLight.h:606
Vector3 mDerivedCamRelativePosition
Definition: OgreLight.h:591
Factory object for creating Light instances.
Definition: OgreLight.h:612
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
Interface definition for a factory class which produces a certain kind of MovableObject, and can be registered with Root in order to allow all clients to produce new instances of this object, integrated with the standard Ogre processing.
Vector3 mDerivedDirection
Definition: OgreLight.h:589
PlaneBoundedVolumeList mFrustumClipVolumes
Definition: OgreLight.h:599
A 3D box aligned with the x/y/z axes.
Real mRange
Definition: OgreLight.h:574
unsigned short uint16
Definition: OgrePlatform.h:360
Representation of a dynamic light source in the scene.
Definition: OgreLight.h:73
Collects together the program parameters used for a GpuProgram.
Wrapper class which indicates a given angle value is in Radians.
Definition: OgreMath.h:47
Real mShadowNearClipDist
Definition: OgreLight.h:584

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 Mar 18 2014 19:15:25