HShadow
Functions
void |
|
void |
|
void |
|
void |
|
HC_KEY |
|
void |
|
void |
|
void |
|
int |
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:
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);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);
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 HC_KEY GetShadowKey()
Returns the key of the shadow segment
-
inline void SetShadowBrightness(int ShadowBrightness)
Set the shadow brightness
-
inline int GetShadowBrightness()
Returns the shadow brightness
-
HShadow(HC_KEY ModelSegmentKey, HC_KEY ShadowBaseSegmentKey, float ObjectModellingMatrix[] = 0)