Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

HShadow Class Reference

This class has been deprecated. More...

#include <HUtilityShadow.h>

List of all members.

Public Member Functions

void CalculateTotalModelExtents ()
void GetModelExtents (HPoint &ObjectBoundingMin, HPoint &ObjectBoundingMax)
int GetShadowBrightness ()
void GetShadowGroundPlane (HPlane &plane)
HC_KEY GetShadowKey ()
void GetShadowLightPos (HPoint &lightpos)
 HShadow (HC_KEY ModelSegmentKey, HC_KEY ShadowBaseSegmentKey, float ObjectModellingMatrix[]=0)
void SetShadowBrightness (int ShadowBrightness)
void SetShadowGroundPlane (HPlane plane)
void SetShadowLightPos (HPoint lightpos)

Protected Member Functions

void ComputeObjectExtents (HPoint &min, HPoint &max, HPoint points[], int numpoints)
bool HasShell (HC_KEY segKey)
HC_KEY IsolateShell ()
void RestoreShell ()
void RotateToGroundPlane (HPlane plane, float matrix[])
void ShadowMatrix2 (float matrix[], HPlane plane, HPoint d)
void ShowModellingMatrix (HC_KEY segkey, float oldmatrix[], float newmatrix[])

Protected Attributes

bool m_bFirstCoordinate
HC_KEY m_ModelSegmentKey
HPoint m_ObjectBoundingMax
HPoint m_ObjectBoundingMin
float m_ObjectModellingMatrix [16]
int m_ShadowBrightness
HPlane m_ShadowGroundPlane
HPoint m_ShadowLightPos
HC_KEY m_ShadowSegmentKey

Detailed Description

This class has been deprecated.

This class has been deprecated. The HShadow class aids in creating soft and hard shadows of a given scene

Here is an example of how to use it:

HC_KEY shadowkey; HC_Open_Segment_By_Key(m_pView->GetSceneKey()); //we first need to create a separate segment for the shadow geometry... shadowkey = HC_KCreate_Segment("shadows"); HC_Close_Segment(); HSmoothShadow myShadow(m_pView->GetModel()->GetModelKey(), shadowkey); myShadow.Create(XY_PLANE);

Smooth shadows are created by projecting the geometry to the desired plane (from a given light direction) and converting the result to a texture map on which a softening filter is applied myshadow = new HSmoothShadow(m_pView->GetModel()->GetModelKey(), shadowkey);

Apart from the model key (geometry that should be shadowed) and the key for the shadow segment we can also specify the size of the texture map (can effectively only be set to 64, 128 or 256) to avoid distortion as well as a smoothing filter that is applied at each pixel of the shadow texture (see below for the default filter matrix) Those values can either be set in the Create call or the default parameters can be used with the only requirement being to identify a ground plane (Most HSF files have an XY ground plane) as follows:

myshadow.Create(XY_PLANE);

This function also calculates the world space extents of the model to automatically find a suitable light/plane position. If you want to supply your own arbitrary light/plane position simply call the overloaded create function without any parameter and use SetShadowLightPos and SetShadowGroundPlane respectively. After this call has completed the shadow should be visible. If the scene changes a new call to Create() is required in the case of the smooth shadow to recreate the texture. To adjust the brightness of the shadow the function SetShadowBrightness() can be used (from 0 to 255).

Hard Shadows are creating with the same process (of course no texture/filter parameters). The difference is that no further calls to Create() are necessary unless a change of the light/plane position is desired.

Here are a few considerations when using that functionality: As soft shadows use a texture map of limited size the complexity/size of the scene can effect the quality/detail of the shadow. It might make sense to create a separate shadow for every object in the scene. However there is currently a blending problem when multiple shadows are overlapping. This should be fixed in the next release. The "smoothness" of the shadow is greatly affected by the size of the texturemap and the extends of the smoothness filter. On the other hand a larger texture/filter also increases the texture creation time. In the current implementation the shadow texture is scaled so that it goes a bit beyond the model extents. This might be not the perfect solution for certain models though...

Hard shadows are created by projecting the given scene with a "shadow matrix". This in effect doubles the complexity of the scene so it might make sense to use an LOD technique on the model. This could also be selectively applied on the shadows segment only (not tested yet).


Constructor & Destructor Documentation

HShadow::HShadow ( HC_KEY  ModelSegmentKey,
HC_KEY  ShadowBaseSegmentKey,
float  ObjectModellingMatrix[] = 0 
)

Constructor

Parameters:
ModelSegmentKeyKey of top-level segment that shadows should be applied to
ShadowBaseSegmentKeyKey of segment that contains the shadow geometry
ObjectModellingMatrixNetModellingMatrix of the shadow segment; zero by default

Member Function Documentation

void HShadow::CalculateTotalModelExtents ( )

Calculates the total extents of the model in world space

void HShadow::ComputeObjectExtents ( HPoint min,
HPoint max,
HPoint  points[],
int  numpoints 
) [protected]

Computes axis alligned bounding box of pointcloud

Parameters:
minminimum extents of bounding box
maxmaximum extents of bounding box
pointspoint cloud data
numpoints
void HShadow::GetModelExtents ( HPoint ObjectBoundingMin,
HPoint ObjectBoundingMax 
) [inline]

Returns the extents of the model

int HShadow::GetShadowBrightness ( ) [inline]

Returns the shadow brightness

void HShadow::GetShadowGroundPlane ( HPlane plane) [inline]

Returns the shadow ground plane

HC_KEY HShadow::GetShadowKey ( ) [inline]

Returns the key of the shadow segment

References HC_KEY.

void HShadow::GetShadowLightPos ( HPoint lightpos) [inline]

Returns the light position

bool HShadow::HasShell ( HC_KEY  segKey) [protected]
Parameters:
segKeySegment key to look in.
Returns:
Whether any shells exist in a specified segment.
HC_KEY HShadow::IsolateShell ( ) [protected]

Moves shell out of view for "fitworld" calculation

void HShadow::RestoreShell ( ) [protected]

Restores shadow shell position

void HShadow::RotateToGroundPlane ( HPlane  plane,
float  matrix[] 
) [protected]

Rotates Plane to a given Vector

Parameters:
planeto rotate
matrixrotation matrix
void HShadow::SetShadowBrightness ( int  ShadowBrightness) [inline]

Set the shadow brightness

void HShadow::SetShadowGroundPlane ( HPlane  plane) [inline]

Set the shadow ground plane

void HShadow::SetShadowLightPos ( HPoint  lightpos) [inline]

Set the light position

void HShadow::ShadowMatrix2 ( float  matrix[],
HPlane  plane,
HPoint  d 
) [protected]

Computes shadow matrix based on shadow plane and light position

Parameters:
matrixModelling Matrix
planeshadow plane
dlight position
void HShadow::ShowModellingMatrix ( HC_KEY  segkey,
float  oldmatrix[],
float  newmatrix[] 
) [protected]

Returns combined modelling matrix

Parameters:
segkeyKey of the segment for which the modelling matrix needs to be retrieved
oldmatrixbase matrix for multiplication. Passed by reference.
newmatrixcombined matrix. Passed by reference. Returned to user.

Member Data Documentation

bool HShadow::m_bFirstCoordinate [protected]

Internal Use

Internal Use

Internal Use

Internal Use

float HShadow::m_ObjectModellingMatrix[16] [protected]

Internal Use

int HShadow::m_ShadowBrightness [protected]

Internal Use

Internal Use

Internal Use

Internal Use


The documentation for this class was generated from the following file: