Implements the Light Space Perspective Shadow Mapping Algorithm. More...
#include <OgreShadowCameraSetupLiSPSM.h>
Public Member Functions | |
LiSPSMShadowCameraSetup (void) | |
Default constructor. | |
virtual | ~LiSPSMShadowCameraSetup (void) |
Default destructor. | |
virtual void | getShadowCamera (const SceneManager *sm, const Camera *cam, const Viewport *vp, const Light *light, Camera *texCam, size_t iteration) const |
Returns a LiSPSM shadow camera. | |
virtual void | setOptimalAdjustFactor (Real n) |
Adjusts the parameter n to produce optimal shadows. | |
virtual Real | getOptimalAdjustFactor () const |
Get the parameter n used to produce optimal shadows. | |
virtual void | setUseSimpleOptimalAdjust (bool s) |
Sets whether or not to use a slightly simpler version of the camera near point derivation (default is true). | |
virtual bool | getUseSimpleOptimalAdjust () const |
Gets whether or not to use a slightly simpler version of the camera near point derivation (default is true). | |
virtual void | setCameraLightDirectionThreshold (Degree angle) |
Sets the threshold between the camera and the light direction below which the LiSPSM projection is 'flattened', since coincident light and camera projections cause problems with the perspective skew. | |
virtual Degree | getCameraLightDirectionThreshold () const |
Sets the threshold between the camera and the light direction below which the LiSPSM projection is 'flattened', since coincident light and camera projections cause problems with the perspective skew. | |
void | setUseAggressiveFocusRegion (bool aggressive) |
Sets whether or not to use the more aggressive approach to deciding on the focus region or not. | |
bool | getUseAggressiveFocusRegion () const |
void * | operator new (size_t sz, const char *file, int line, const char *func) |
operator new, with debug line info | |
void * | operator new (size_t sz) |
void * | operator new (size_t sz, void *ptr) |
placement operator new | |
void * | operator new[] (size_t sz, const char *file, int line, const char *func) |
array operator new, with debug line info | |
void * | operator new[] (size_t sz) |
void | operator delete (void *ptr) |
void | operator delete (void *ptr, void *) |
void | operator delete (void *ptr, const char *, int, const char *) |
void | operator delete[] (void *ptr) |
void | operator delete[] (void *ptr, const char *, int, const char *) |
Protected Member Functions | |
Matrix4 | calculateLiSPSM (const Matrix4 &lightSpace, const PointListBody &bodyB, const PointListBody &bodyLVS, const SceneManager &sm, const Camera &cam, const Light &light) const |
Calculates the LiSPSM projection matrix P. | |
Real | calculateNOpt (const Matrix4 &lightSpace, const AxisAlignedBox &bodyBABB_ls, const PointListBody &bodyLVS, const Camera &cam) const |
Calculates the distance between camera position and near clipping plane. | |
Real | calculateNOptSimple (const PointListBody &bodyLVS, const Camera &cam) const |
Calculates a simpler version than the one above. | |
Vector3 | calculateZ0_ls (const Matrix4 &lightSpace, const Vector3 &e, Real bodyB_zMax_ls, const Camera &cam) const |
Calculates the visible point on the near plane for the n_opt calculation. | |
Matrix4 | buildFrustumProjection (Real left, Real right, Real bottom, Real top, Real near, Real far) const |
Builds a frustum matrix. | |
void | calculateShadowMappingMatrix (const SceneManager &sm, const Camera &cam, const Light &light, Matrix4 *out_view, Matrix4 *out_proj, Camera *out_cam) const |
Calculates the standard shadow mapping matrix. | |
void | calculateB (const SceneManager &sm, const Camera &cam, const Light &light, const AxisAlignedBox &sceneBB, const AxisAlignedBox &receiverBB, PointListBody *out_bodyB) const |
Calculates the intersection bodyB. | |
void | calculateLVS (const SceneManager &sm, const Camera &cam, const Light &light, const AxisAlignedBox &sceneBB, PointListBody *out_LVS) const |
Calculates the bodyLVS. | |
Vector3 | getLSProjViewDir (const Matrix4 &lightSpace, const Camera &cam, const PointListBody &bodyLVS) const |
Returns the projection view direction. | |
Vector3 | getNearCameraPoint_ws (const Matrix4 &viewMatrix, const PointListBody &bodyLVS) const |
Returns a valid near-point seen by the camera. | |
Matrix4 | transformToUnitCube (const Matrix4 &m, const PointListBody &body) const |
Transforms a given body to the unit cube (-1,-1,-1) / (+1,+1,+1) with a specific shadow matrix enabled. | |
Matrix4 | buildViewMatrix (const Vector3 &pos, const Vector3 &dir, const Vector3 &up) const |
Builds a view matrix. | |
Protected Attributes | |
Real | mOptAdjustFactor |
Warp factor adjustment. | |
bool | mUseSimpleNOpt |
Use simple nopt derivation? | |
Real | mOptAdjustFactorTweak |
Extra calculated warp factor. | |
Real | mCosCamLightDirThreshold |
Threshold (cos angle) within which to start increasing the opt adjust as camera direction approaches light direction. | |
Frustum * | mTempFrustum |
Temporary preallocated frustum to set up a projection matrix in calculateShadowMappingMatrix(). | |
Camera * | mLightFrustumCamera |
Temporary preallocated camera to set up a light frustum for clipping in calculateB. | |
bool | mLightFrustumCameraCalculated |
bool | mUseAggressiveRegion |
Use tighter focus region? | |
ConvexBody | mBodyB |
PointListBody | mPointListBodyB |
PointListBody | mPointListBodyLVS |
Static Protected Attributes | |
static const Matrix4 | msNormalToLightSpace |
Transform to or from light space as defined by Wimmer et al. | |
static const Matrix4 | msLightSpaceToNormal |
Implements the Light Space Perspective Shadow Mapping Algorithm.
Definition at line 98 of file OgreShadowCameraSetupLiSPSM.h.
Ogre::LiSPSMShadowCameraSetup::LiSPSMShadowCameraSetup | ( | void | ) |
Default constructor.
virtual Ogre::LiSPSMShadowCameraSetup::~LiSPSMShadowCameraSetup | ( | void | ) | [virtual] |
Default destructor.
Matrix4 Ogre::LiSPSMShadowCameraSetup::buildFrustumProjection | ( | Real | left, | |
Real | right, | |||
Real | bottom, | |||
Real | top, | |||
Real | near, | |||
Real | far | |||
) | const [protected] |
Builds a frustum matrix.
Matrix4 Ogre::FocusedShadowCameraSetup::buildViewMatrix | ( | const Vector3 & | pos, | |
const Vector3 & | dir, | |||
const Vector3 & | up | |||
) | const [protected, inherited] |
Builds a view matrix.
void Ogre::FocusedShadowCameraSetup::calculateB | ( | const SceneManager & | sm, | |
const Camera & | cam, | |||
const Light & | light, | |||
const AxisAlignedBox & | sceneBB, | |||
const AxisAlignedBox & | receiverBB, | |||
PointListBody * | out_bodyB | |||
) | const [protected, inherited] |
Calculates the intersection bodyB.
sm,: | scene manager | |
cam,: | currently active camera | |
light,: | currently active light | |
sceneBB,: | scene bounding box for clipping operations | |
receiverAABB,: | bounding information for just the receivers | |
out_bodyB,: | final intersection bodyB point list |
Matrix4 Ogre::LiSPSMShadowCameraSetup::calculateLiSPSM | ( | const Matrix4 & | lightSpace, | |
const PointListBody & | bodyB, | |||
const PointListBody & | bodyLVS, | |||
const SceneManager & | sm, | |||
const Camera & | cam, | |||
const Light & | light | |||
) | const [protected] |
Calculates the LiSPSM projection matrix P.
lightSpace,: | matrix of the light space transformation | |
bodyB,: | intersection body B | |
bodyLVS,: | intersection body LVS (relevant space in front of the camera) | |
sm,: | scene manager | |
cam,: | currently active camera | |
light,: | currently active light |
void Ogre::FocusedShadowCameraSetup::calculateLVS | ( | const SceneManager & | sm, | |
const Camera & | cam, | |||
const Light & | light, | |||
const AxisAlignedBox & | sceneBB, | |||
PointListBody * | out_LVS | |||
) | const [protected, inherited] |
Calculates the bodyLVS.
scene,: | holds all potential occluders / receivers as one single bounding box of the currently active scene node | |
cam,: | current viewer camera | |
light,: | current light | |
out_LVS,: | intersection body LVS (world coordinates) |
Real Ogre::LiSPSMShadowCameraSetup::calculateNOpt | ( | const Matrix4 & | lightSpace, | |
const AxisAlignedBox & | bodyBABB_ls, | |||
const PointListBody & | bodyLVS, | |||
const Camera & | cam | |||
) | const [protected] |
Calculates the distance between camera position and near clipping plane.
Formula: d n_opt = --------------- sqrt(z1/z0) - 1
Parameters: d: distance between the near and the far clipping plane z0: located on the near clipping plane of the intersection body b z1: located on the far clipping plane with the same x/y values as z0
lightSpace,: | matrix of the light space transformation | |
bodyBABB_ls,: | bounding box of the transformed (light space) bodyB | |
bodyLVS,: | point list of the bodyLVS which describes the scene space which is in front of the light and the camera | |
cam,: | currently active camera |
Real Ogre::LiSPSMShadowCameraSetup::calculateNOptSimple | ( | const PointListBody & | bodyLVS, | |
const Camera & | cam | |||
) | const [protected] |
Calculates a simpler version than the one above.
void Ogre::FocusedShadowCameraSetup::calculateShadowMappingMatrix | ( | const SceneManager & | sm, | |
const Camera & | cam, | |||
const Light & | light, | |||
Matrix4 * | out_view, | |||
Matrix4 * | out_proj, | |||
Camera * | out_cam | |||
) | const [protected, inherited] |
Calculates the standard shadow mapping matrix.
sm,: | scene manager | |
cam,: | currently active camera | |
light,: | currently active light | |
out_view,: | calculated uniform view shadow mapping matrix (may be NULL) | |
out_proj,: | calculated uniform projection shadow mapping matrix (may be NULL) | |
out_cam,: | calculated uniform shadow camera (may be NULL) |
Vector3 Ogre::LiSPSMShadowCameraSetup::calculateZ0_ls | ( | const Matrix4 & | lightSpace, | |
const Vector3 & | e, | |||
Real | bodyB_zMax_ls, | |||
const Camera & | cam | |||
) | const [protected] |
Calculates the visible point on the near plane for the n_opt calculation.
lightSpace,: | matrix of the light space transformation | |
e,: | the LiSPSM parameter e is located near or on the near clipping plane of the LiSPSM frustum C | |
bodyB_zMax_ls,: | maximum z-value of the light space bodyB bounding box | |
cam,: | currently active camera |
virtual Degree Ogre::LiSPSMShadowCameraSetup::getCameraLightDirectionThreshold | ( | ) | const [virtual] |
Sets the threshold between the camera and the light direction below which the LiSPSM projection is 'flattened', since coincident light and camera projections cause problems with the perspective skew.
Vector3 Ogre::FocusedShadowCameraSetup::getLSProjViewDir | ( | const Matrix4 & | lightSpace, | |
const Camera & | cam, | |||
const PointListBody & | bodyLVS | |||
) | const [protected, inherited] |
Returns the projection view direction.
lightSpace,: | matrix of the light space transformation | |
cam,: | current viewer camera | |
bodyLVS,: | intersection body LVS (relevant space in front of the camera) |
Vector3 Ogre::FocusedShadowCameraSetup::getNearCameraPoint_ws | ( | const Matrix4 & | viewMatrix, | |
const PointListBody & | bodyLVS | |||
) | const [protected, inherited] |
Returns a valid near-point seen by the camera.
viewMatrix,: | view matrix of the current camera | |
bodyLVS,: | intersection body LVS (relevant space in front of the camera) |
virtual Real Ogre::LiSPSMShadowCameraSetup::getOptimalAdjustFactor | ( | ) | const [virtual] |
Get the parameter n used to produce optimal shadows.
Reimplemented in Ogre::PSSMShadowCameraSetup.
Definition at line 220 of file OgreShadowCameraSetupLiSPSM.h.
virtual void Ogre::LiSPSMShadowCameraSetup::getShadowCamera | ( | const SceneManager * | sm, | |
const Camera * | cam, | |||
const Viewport * | vp, | |||
const Light * | light, | |||
Camera * | texCam, | |||
size_t | iteration | |||
) | const [virtual] |
Returns a LiSPSM shadow camera.
Reimplemented from Ogre::FocusedShadowCameraSetup.
Reimplemented in Ogre::PSSMShadowCameraSetup.
bool Ogre::FocusedShadowCameraSetup::getUseAggressiveFocusRegion | ( | ) | const [inherited] |
Definition at line 280 of file OgreShadowCameraSetupFocused.h.
virtual bool Ogre::LiSPSMShadowCameraSetup::getUseSimpleOptimalAdjust | ( | ) | const [virtual] |
Gets whether or not to use a slightly simpler version of the camera near point derivation (default is true).
Definition at line 228 of file OgreShadowCameraSetupLiSPSM.h.
void Ogre::AllocatedObject< Alloc >::operator delete | ( | void * | ptr, | |
const char * | , | |||
int | , | |||
const char * | ||||
) | [inherited] |
Definition at line 107 of file OgreMemoryAllocatedObject.h.
void Ogre::AllocatedObject< Alloc >::operator delete | ( | void * | ptr, | |
void * | ||||
) | [inherited] |
Definition at line 101 of file OgreMemoryAllocatedObject.h.
void Ogre::AllocatedObject< Alloc >::operator delete | ( | void * | ptr | ) | [inherited] |
Definition at line 95 of file OgreMemoryAllocatedObject.h.
void Ogre::AllocatedObject< Alloc >::operator delete[] | ( | void * | ptr, | |
const char * | , | |||
int | , | |||
const char * | ||||
) | [inherited] |
Definition at line 118 of file OgreMemoryAllocatedObject.h.
void Ogre::AllocatedObject< Alloc >::operator delete[] | ( | void * | ptr | ) | [inherited] |
Definition at line 112 of file OgreMemoryAllocatedObject.h.
void* Ogre::AllocatedObject< Alloc >::operator new | ( | size_t | sz, | |
void * | ptr | |||
) | [inherited] |
placement operator new
Definition at line 78 of file OgreMemoryAllocatedObject.h.
void* Ogre::AllocatedObject< Alloc >::operator new | ( | size_t | sz | ) | [inherited] |
Definition at line 72 of file OgreMemoryAllocatedObject.h.
void* Ogre::AllocatedObject< Alloc >::operator new | ( | size_t | sz, | |
const char * | file, | |||
int | line, | |||
const char * | func | |||
) | [inherited] |
operator new, with debug line info
Definition at line 67 of file OgreMemoryAllocatedObject.h.
void* Ogre::AllocatedObject< Alloc >::operator new[] | ( | size_t | sz | ) | [inherited] |
Definition at line 90 of file OgreMemoryAllocatedObject.h.
void* Ogre::AllocatedObject< Alloc >::operator new[] | ( | size_t | sz, | |
const char * | file, | |||
int | line, | |||
const char * | func | |||
) | [inherited] |
array operator new, with debug line info
Definition at line 85 of file OgreMemoryAllocatedObject.h.
virtual void Ogre::LiSPSMShadowCameraSetup::setCameraLightDirectionThreshold | ( | Degree | angle | ) | [virtual] |
Sets the threshold between the camera and the light direction below which the LiSPSM projection is 'flattened', since coincident light and camera projections cause problems with the perspective skew.
virtual void Ogre::LiSPSMShadowCameraSetup::setOptimalAdjustFactor | ( | Real | n | ) | [virtual] |
Adjusts the parameter n to produce optimal shadows.
n | The adjustment factor - default is 0.1f. |
Definition at line 216 of file OgreShadowCameraSetupLiSPSM.h.
void Ogre::FocusedShadowCameraSetup::setUseAggressiveFocusRegion | ( | bool | aggressive | ) | [inherited] |
Sets whether or not to use the more aggressive approach to deciding on the focus region or not.
aggressive | True to use the more aggressive approach, false otherwise. |
Definition at line 278 of file OgreShadowCameraSetupFocused.h.
virtual void Ogre::LiSPSMShadowCameraSetup::setUseSimpleOptimalAdjust | ( | bool | s | ) | [virtual] |
Sets whether or not to use a slightly simpler version of the camera near point derivation (default is true).
Definition at line 224 of file OgreShadowCameraSetupLiSPSM.h.
Matrix4 Ogre::FocusedShadowCameraSetup::transformToUnitCube | ( | const Matrix4 & | m, | |
const PointListBody & | body | |||
) | const [protected, inherited] |
Transforms a given body to the unit cube (-1,-1,-1) / (+1,+1,+1) with a specific shadow matrix enabled.
m,: | transformation matrix applied on the point list body | |
body,: | contains the points of the extends of all valid scene elements which are mapped to the unit cube |
ConvexBody Ogre::FocusedShadowCameraSetup::mBodyB [mutable, protected, inherited] |
Definition at line 144 of file OgreShadowCameraSetupFocused.h.
Threshold (cos angle) within which to start increasing the opt adjust as camera direction approaches light direction.
Definition at line 108 of file OgreShadowCameraSetupLiSPSM.h.
Camera* Ogre::FocusedShadowCameraSetup::mLightFrustumCamera [protected, inherited] |
Temporary preallocated camera to set up a light frustum for clipping in calculateB.
Definition at line 77 of file OgreShadowCameraSetupFocused.h.
bool Ogre::FocusedShadowCameraSetup::mLightFrustumCameraCalculated [mutable, protected, inherited] |
Definition at line 78 of file OgreShadowCameraSetupFocused.h.
Real Ogre::LiSPSMShadowCameraSetup::mOptAdjustFactor [protected] |
Warp factor adjustment.
Definition at line 102 of file OgreShadowCameraSetupLiSPSM.h.
Real Ogre::LiSPSMShadowCameraSetup::mOptAdjustFactorTweak [mutable, protected] |
Extra calculated warp factor.
Definition at line 106 of file OgreShadowCameraSetupLiSPSM.h.
PointListBody Ogre::FocusedShadowCameraSetup::mPointListBodyB [mutable, protected, inherited] |
Definition at line 145 of file OgreShadowCameraSetupFocused.h.
PointListBody Ogre::FocusedShadowCameraSetup::mPointListBodyLVS [mutable, protected, inherited] |
Definition at line 146 of file OgreShadowCameraSetupFocused.h.
const Matrix4 Ogre::FocusedShadowCameraSetup::msLightSpaceToNormal [static, protected, inherited] |
Definition at line 68 of file OgreShadowCameraSetupFocused.h.
const Matrix4 Ogre::FocusedShadowCameraSetup::msNormalToLightSpace [static, protected, inherited] |
Transform to or from light space as defined by Wimmer et al.
Definition at line 67 of file OgreShadowCameraSetupFocused.h.
Frustum* Ogre::FocusedShadowCameraSetup::mTempFrustum [protected, inherited] |
Temporary preallocated frustum to set up a projection matrix in calculateShadowMappingMatrix().
Definition at line 73 of file OgreShadowCameraSetupFocused.h.
bool Ogre::FocusedShadowCameraSetup::mUseAggressiveRegion [protected, inherited] |
Use tighter focus region?
Definition at line 81 of file OgreShadowCameraSetupFocused.h.
bool Ogre::LiSPSMShadowCameraSetup::mUseSimpleNOpt [protected] |
Use simple nopt derivation?
Definition at line 104 of file OgreShadowCameraSetupLiSPSM.h.
Copyright © 2012 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Fri May 25 23:40:18 2012