OGRE
1.9.0
|
Parallel Split Shadow Map (PSSM) shadow camera setup. More...
#include <OgreShadowCameraSetupPSSM.h>
Public Types | |
typedef vector< Real >::type | OptimalAdjustFactorList |
typedef vector< Real >::type | SplitPointList |
Public Member Functions | |
PSSMShadowCameraSetup () | |
Constructor, defaults to 3 splits. | |
~PSSMShadowCameraSetup () | |
void | calculateSplitPoints (uint splitCount, Real nearDist, Real farDist, Real lambda=0.95) |
Calculate a new splitting scheme. | |
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. | |
Real | getOptimalAdjustFactor () const |
Overridden, recommended internal use only since depends on current iteration. | |
Real | getOptimalAdjustFactor (size_t splitIndex) const |
Returns the optimal adjust factor for a given split. | |
virtual void | getShadowCamera (const Ogre::SceneManager *sm, const Ogre::Camera *cam, const Ogre::Viewport *vp, const Ogre::Light *light, Ogre::Camera *texCam, size_t iteration) const |
Returns a LiSPSM shadow camera with PSSM splits base on iteration. | |
uint | getSplitCount () const |
Get the number of splits. | |
Real | getSplitPadding () const |
Get the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'. | |
const SplitPointList & | getSplitPoints () const |
Returns the calculated split points. | |
bool | getUseAggressiveFocusRegion () const |
virtual bool | getUseSimpleOptimalAdjust () const |
Gets whether or not to use a slightly simpler version of the camera near point derivation (default is true) | |
void | operator delete (void *ptr) |
void | operator delete (void *ptr, const char *, int, const char *) |
void | operator delete (void *ptr, void *) |
void | operator delete[] (void *ptr) |
void | operator delete[] (void *ptr, const char *, int, const char *) |
void * | operator new (size_t sz) |
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 *ptr) |
placement operator new | |
void * | operator new[] (size_t sz) |
void * | operator new[] (size_t sz, const char *file, int line, const char *func) |
array operator new, with debug line info | |
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 void | setOptimalAdjustFactor (Real n) |
Adjusts the parameter n to produce optimal shadows. | |
void | setOptimalAdjustFactor (size_t splitIndex, Real factor) |
Set the LiSPSM optimal adjust factor for a given split (call after configuring splits). | |
void | setSplitPadding (Real pad) |
Set the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'. | |
void | setSplitPoints (const SplitPointList &newSplitPoints) |
Manually configure a new splitting scheme. | |
void | setUseAggressiveFocusRegion (bool aggressive) |
Sets whether or not to use the more aggressive approach to deciding on the focus region or not. | |
virtual void | setUseSimpleOptimalAdjust (bool s) |
Sets whether or not to use a slightly simpler version of the camera near point derivation (default is true) | |
Protected Attributes | |
ConvexBody | mBodyB |
Real | mCosCamLightDirThreshold |
Threshold (cos angle) within which to start increasing the opt adjust as camera direction approaches light direction. | |
size_t | mCurrentIteration |
Camera * | mLightFrustumCamera |
Temporary preallocated camera to set up a light frustum for clipping in FocusedShadowCameraSetup::calculateB. | |
bool | mLightFrustumCameraCalculated |
Real | mOptAdjustFactor |
Warp factor adjustment. | |
Real | mOptAdjustFactorTweak |
Extra calculated warp factor. | |
OptimalAdjustFactorList | mOptimalAdjustFactors |
PointListBody | mPointListBodyB |
PointListBody | mPointListBodyLVS |
uint | mSplitCount |
Real | mSplitPadding |
SplitPointList | mSplitPoints |
Frustum * | mTempFrustum |
Temporary preallocated frustum to set up a projection matrix in calculateShadowMappingMatrix(). | |
bool | mUseAggressiveRegion |
Use tighter focus region? | |
bool | mUseSimpleNOpt |
Use simple nopt derivation? | |
Static Protected Attributes | |
static const Matrix4 | msLightSpaceToNormal |
static const Matrix4 | msNormalToLightSpace |
Transform to or from light space as defined by Wimmer et al. | |
Parallel Split Shadow Map (PSSM) shadow camera setup.
Definition at line 56 of file OgreShadowCameraSetupPSSM.h.
Definition at line 60 of file OgreShadowCameraSetupPSSM.h.
Definition at line 59 of file OgreShadowCameraSetupPSSM.h.
Ogre::PSSMShadowCameraSetup::PSSMShadowCameraSetup | ( | ) |
Constructor, defaults to 3 splits.
Ogre::PSSMShadowCameraSetup::~PSSMShadowCameraSetup | ( | ) |
|
protectedinherited |
Builds a frustum matrix.
|
protectedinherited |
Builds a view matrix.
|
protectedinherited |
Calculates the intersection bodyB.
sm | Scene manager. |
cam | Currently active camera. |
light | Currently active light. |
sceneBB | Scene bounding box for clipping operations. |
receiverBB | Bounding information for just the receivers. |
out_bodyB | Final intersection bodyB point list. |
|
protectedinherited |
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 |
|
protectedinherited |
Calculates the bodyLVS.
cam | Current viewer camera. |
light | Current light. |
sceneBB | Holds all potential occluders / receivers as one single bounding box of the currently active scene node. |
out_LVS | Intersection body LVS (world coordinates). |
|
protectedinherited |
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 |
|
protectedinherited |
Calculates a simpler version than the one above.
|
protectedinherited |
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 ). |
void Ogre::PSSMShadowCameraSetup::calculateSplitPoints | ( | uint | splitCount, |
Real | nearDist, | ||
Real | farDist, | ||
Real | lambda = 0.95 |
||
) |
Calculate a new splitting scheme.
splitCount | The number of splits to use |
nearDist | The near plane to use for the first split |
farDist | The far plane to use for the last split |
lambda | Factor to use to reduce the split size |
|
protectedinherited |
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 |
|
virtualinherited |
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.
|
protectedinherited |
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). |
|
protectedinherited |
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 |
Overridden, recommended internal use only since depends on current iteration.
Reimplemented from Ogre::LiSPSMShadowCameraSetup.
Returns the optimal adjust factor for a given split.
Definition at line 117 of file OgreShadowCameraSetupPSSM.h.
|
virtual |
Returns a LiSPSM shadow camera with PSSM splits base on iteration.
Reimplemented from Ogre::LiSPSMShadowCameraSetup.
uint Ogre::PSSMShadowCameraSetup::getSplitCount | ( | ) | const |
Get the number of splits.
Definition at line 106 of file OgreShadowCameraSetupPSSM.h.
Real Ogre::PSSMShadowCameraSetup::getSplitPadding | ( | ) | const |
Get the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'.
Definition at line 104 of file OgreShadowCameraSetupPSSM.h.
const SplitPointList & Ogre::PSSMShadowCameraSetup::getSplitPoints | ( | ) | const |
Returns the calculated split points.
Definition at line 113 of file OgreShadowCameraSetupPSSM.h.
|
inherited |
Definition at line 305 of file OgreShadowCameraSetupFocused.h.
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.
Definition at line 96 of file OgreMemoryAllocatedObject.h.
|
inherited |
Definition at line 108 of file OgreMemoryAllocatedObject.h.
Definition at line 102 of file OgreMemoryAllocatedObject.h.
|
inherited |
Definition at line 113 of file OgreMemoryAllocatedObject.h.
|
inherited |
Definition at line 119 of file OgreMemoryAllocatedObject.h.
Definition at line 73 of file OgreMemoryAllocatedObject.h.
|
inherited |
operator new, with debug line info
Definition at line 68 of file OgreMemoryAllocatedObject.h.
placement operator new
Definition at line 79 of file OgreMemoryAllocatedObject.h.
Definition at line 91 of file OgreMemoryAllocatedObject.h.
|
inherited |
array operator new, with debug line info
Definition at line 86 of file OgreMemoryAllocatedObject.h.
|
virtualinherited |
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.
Adjusts the parameter n to produce optimal shadows.
n | The adjustment factor - default is 0.1f. |
Definition at line 216 of file OgreShadowCameraSetupLiSPSM.h.
Set the LiSPSM optimal adjust factor for a given split (call after configuring splits).
Set the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'.
Definition at line 99 of file OgreShadowCameraSetupPSSM.h.
void Ogre::PSSMShadowCameraSetup::setSplitPoints | ( | const SplitPointList & | newSplitPoints | ) |
Manually configure a new splitting scheme.
newSplitPoints | A list which is splitCount + 1 entries long, containing the split points. The first value is the near point, the last value is the far point, and each value in between is both a far point of the previous split, and a near point for the next one. |
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 303 of file OgreShadowCameraSetupFocused.h.
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.
|
protectedinherited |
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. |
|
mutableprotectedinherited |
Definition at line 145 of file OgreShadowCameraSetupFocused.h.
|
protectedinherited |
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.
|
mutableprotected |
Definition at line 68 of file OgreShadowCameraSetupPSSM.h.
|
protectedinherited |
Temporary preallocated camera to set up a light frustum for clipping in FocusedShadowCameraSetup::calculateB.
Definition at line 78 of file OgreShadowCameraSetupFocused.h.
|
mutableprotectedinherited |
Definition at line 79 of file OgreShadowCameraSetupFocused.h.
|
protectedinherited |
Warp factor adjustment.
Definition at line 102 of file OgreShadowCameraSetupLiSPSM.h.
|
mutableprotectedinherited |
Extra calculated warp factor.
Definition at line 106 of file OgreShadowCameraSetupLiSPSM.h.
|
protected |
Definition at line 65 of file OgreShadowCameraSetupPSSM.h.
|
mutableprotectedinherited |
Definition at line 146 of file OgreShadowCameraSetupFocused.h.
|
mutableprotectedinherited |
Definition at line 147 of file OgreShadowCameraSetupFocused.h.
Definition at line 69 of file OgreShadowCameraSetupFocused.h.
Transform to or from light space as defined by Wimmer et al.
Definition at line 68 of file OgreShadowCameraSetupFocused.h.
|
protected |
Definition at line 63 of file OgreShadowCameraSetupPSSM.h.
|
protected |
Definition at line 66 of file OgreShadowCameraSetupPSSM.h.
|
protected |
Definition at line 64 of file OgreShadowCameraSetupPSSM.h.
|
protectedinherited |
Temporary preallocated frustum to set up a projection matrix in calculateShadowMappingMatrix().
Definition at line 74 of file OgreShadowCameraSetupFocused.h.
|
protectedinherited |
Use tighter focus region?
Definition at line 82 of file OgreShadowCameraSetupFocused.h.
|
protectedinherited |
Use simple nopt derivation?
Definition at line 104 of file OgreShadowCameraSetupLiSPSM.h.