HShadow

Functions

HShadow

void

CalculateTotalModelExtents

void

GetModelExtents

void

GetShadowLightPos

void

GetShadowGroundPlane

HC_KEY

GetShadowKey

void

SetShadowLightPos

void

SetShadowGroundPlane

void

SetShadowBrightness

int

GetShadowBrightness

Detailed Description

class HShadow

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).

Subclassed by HHardShadow, HSmoothShadow

Public Functions

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

Constructor

Parameters:
  • ModelSegmentKey – Key of top-level segment that shadows should be applied to

  • ShadowBaseSegmentKey – Key of segment that contains the shadow geometry

  • ObjectModellingMatrix – NetModellingMatrix of the shadow segment; zero by default

void CalculateTotalModelExtents()

Calculates the total extents of the model in world space

inline void GetModelExtents(HPoint &ObjectBoundingMin, HPoint &ObjectBoundingMax)

Returns the extents of the model

inline void GetShadowLightPos(HPoint &lightpos)

Returns the light position

inline void GetShadowGroundPlane(HPlane &plane)

Returns the shadow ground plane

inline HC_KEY GetShadowKey()

Returns the key of the shadow segment

inline void SetShadowLightPos(HPoint lightpos)

Set the light position

inline void SetShadowGroundPlane(HPlane plane)

Set the shadow ground plane

inline void SetShadowBrightness(int ShadowBrightness)

Set the shadow brightness

inline int GetShadowBrightness()

Returns the shadow brightness