This class has been deprecated. More...
#include <HUtilityShadow.h>
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::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
Member Function Documentation
◆ CalculateTotalModelExtents()
void HShadow::CalculateTotalModelExtents | ( | ) |
Calculates the total extents of the model in world space
◆ ComputeObjectExtents()
|
protected |
Computes axis alligned bounding box of pointcloud
- Parameters
-
min minimum extents of bounding box max maximum extents of bounding box points point cloud data numpoints
◆ GetModelExtents()
Returns the extents of the model
◆ GetShadowBrightness()
|
inline |
Returns the shadow brightness
◆ GetShadowGroundPlane()
|
inline |
Returns the shadow ground plane
◆ GetShadowKey()
|
inline |
Returns the key of the shadow segment
◆ GetShadowLightPos()
|
inline |
Returns the light position
◆ HasShell()
|
protected |
- Parameters
-
segKey Segment key to look in.
- Returns
- Whether any shells exist in a specified segment.
◆ IsolateShell()
|
protected |
Moves shell out of view for "fitworld" calculation
◆ RestoreShell()
|
protected |
Restores shadow shell position
◆ RotateToGroundPlane()
|
protected |
Rotates Plane to a given Vector
- Parameters
-
plane to rotate matrix rotation matrix
◆ SetShadowBrightness()
|
inline |
Set the shadow brightness
◆ SetShadowGroundPlane()
|
inline |
Set the shadow ground plane
◆ SetShadowLightPos()
|
inline |
Set the light position
◆ ShadowMatrix2()
Computes shadow matrix based on shadow plane and light position
- Parameters
-
matrix Modelling Matrix plane shadow plane d light position
◆ ShowModellingMatrix()
|
protected |
Returns combined modelling matrix
- Parameters
-
segkey Key of the segment for which the modelling matrix needs to be retrieved oldmatrix base matrix for multiplication. Passed by reference. newmatrix combined matrix. Passed by reference. Returned to user.
Member Data Documentation
◆ m_bFirstCoordinate
|
protected |
Internal Use
◆ m_ModelSegmentKey
|
protected |
Internal Use
◆ m_ObjectBoundingMax
|
protected |
Internal Use
◆ m_ObjectBoundingMin
|
protected |
Internal Use
◆ m_ObjectModellingMatrix
|
protected |
Internal Use
◆ m_ShadowBrightness
|
protected |
Internal Use
◆ m_ShadowGroundPlane
|
protected |
Internal Use
◆ m_ShadowLightPos
|
protected |
Internal Use
◆ m_ShadowSegmentKey
|
protected |
Internal Use
The documentation for this class was generated from the following file: