My Project
Classes | Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
ParaEngine::COceanManager Class Reference

FFT based ocean rendering class. More...

#include <OceanManager.h>

Inheritance diagram for ParaEngine::COceanManager:
ParaEngine::IAttributeFields ParaEngine::IObject ParaEngine::CRefCounted

Classes

struct  sAnimVertex
 vertex data for animation More...
 
struct  sBaseVertex
 the base vertex for ocean tile. More...
 
struct  sComplex
 typedef floating-point complex numbers to hold pairs of real and imaginary numbers More...
 
struct  sTerrainVertex
 vertex data for terrain terrain height field. More...
 

Public Types

enum  eProcessingStages {
  k_animateHeight = 0, k_animateNormal, k_heightFFTv, k_heightFFTh,
  k_normalFFTv, k_normalFFTh, k_uploadBuffer, k_rotateBuffer,
  k_total_process_stages
}
 
enum  eWaterMeshes { k_total_water_meshes = 3, k_total_terrain_meshes = 1 }
 
enum  ReflectionItem {
  R_SKY_BOX = 0, R_GLOBAL_TERRAIN, R_MESH_FRONT_TO_BACK, R_MESH_BACK_TO_FRONT,
  R_CHARACTERS, R_CURRENT_PLAYER, R_MESH_TRANSPARENT, R_LAST_ITEM
}
 
enum  OCEAN_RENDER_TECHNIQUE {
  OCEAN_TECH_QUAD =0, OCEAN_TECH_FFT, OCEAN_TECH_REFLECTION, OCEAN_TECH_FULL,
  OCEAN_TECH_SIMPLE, OCEAN_TECH_CLOUD
}
 
- Public Types inherited from ParaEngine::IAttributeFields
typedef ParaEngine::weak_ptr< IObject, IAttributeFieldsWeakPtr_type
 
- Public Types inherited from ParaEngine::IObject
typedef ParaEngine::weak_ptr< IObjectWeakPtr_type
 

Public Member Functions

virtual int GetAttributeClassID ()
 attribute class ID should be identical, unless one knows how overriding rules work. More...
 
virtual const char * GetAttributeClassName ()
 a static string, describing the attribute class object's name
 
virtual const char * GetAttributeClassDescription ()
 a static string, describing the attribute class object
 
virtual int InstallFields (CAttributeClass *pClass, bool bOverride)
 this class should be implemented if one wants to add new attribute. More...
 
 ATTRIBUTE_METHOD1 (COceanManager, OceanEnabled_s, bool *)
 
 ATTRIBUTE_METHOD1 (COceanManager, EnableOcean_s, bool)
 
 ATTRIBUTE_METHOD1 (COceanManager, GetWaterLevel_s, float *)
 
 ATTRIBUTE_METHOD1 (COceanManager, SetWaterLevel_s, float)
 
 ATTRIBUTE_METHOD1 (COceanManager, IsUnderWater_s, bool *)
 
 ATTRIBUTE_METHOD1 (COceanManager, GetOceanColor_s, Vector3 *)
 
 ATTRIBUTE_METHOD1 (COceanManager, SetGetOceanColor_s, Vector3)
 
 ATTRIBUTE_METHOD1 (COceanManager, GetWindSpeed_s, float *)
 
 ATTRIBUTE_METHOD1 (COceanManager, SetWindSpeed_s, float)
 
 ATTRIBUTE_METHOD1 (COceanManager, GetWindDirection_s, float *)
 
 ATTRIBUTE_METHOD1 (COceanManager, SetWindDirection_s, float)
 
 ATTRIBUTE_METHOD1 (COceanManager, GetRenderTechnique_s, int *)
 
 ATTRIBUTE_METHOD1 (COceanManager, SetRenderTechnique_s, int)
 
 ATTRIBUTE_METHOD1 (COceanManager, IsTerrainReflectionEnabled_s, bool *)
 
 ATTRIBUTE_METHOD1 (COceanManager, EnableTerrainReflection_s, bool)
 
 ATTRIBUTE_METHOD1 (COceanManager, IsMeshReflectionEnabled_s, bool *)
 
 ATTRIBUTE_METHOD1 (COceanManager, EnableMeshReflection_s, bool)
 
 ATTRIBUTE_METHOD1 (COceanManager, IsPlayerReflectionEnabled_s, bool *)
 
 ATTRIBUTE_METHOD1 (COceanManager, EnablePlayerReflection_s, bool)
 
 ATTRIBUTE_METHOD1 (COceanManager, IsCharacterReflectionEnabled_s, bool *)
 
 ATTRIBUTE_METHOD1 (COceanManager, EnableCharacterReflection_s, bool)
 
 ATTRIBUTE_METHOD1 (COceanManager, IsAnimateFFT_s, bool *)
 
 ATTRIBUTE_METHOD1 (COceanManager, SetAnimateFFT_s, bool)
 
 ATTRIBUTE_METHOD (COceanManager, CleanupTerrainCache_s)
 
const LinearColorGetOceanColor ()
 a color to be multiplied to the sky, giving it a special color hue More...
 
void SetGetOceanColor (const LinearColor &color)
 a color to be multiplied to the sky, giving it a special color hue More...
 
bool OceanEnabled ()
 whether ocean should be drawn and simulated. More...
 
void EnableOcean (bool Enable)
 set whether ocean should be drawn and simulated. More...
 
float GetWaterLevel ()
 
void SetWaterLevel (float fLevel)
 set the water level More...
 
void EnableReflectionItem (ReflectionItem item, bool bEnabled)
 Set which group of items will be drawn in the reflection. More...
 
bool IsReflectionItemEnabled (ReflectionItem item)
 
void EnableTerrainReflection (bool bEnabled)
 
bool IsTerrainReflectionEnabled ()
 
void EnableMeshReflection (bool bEnabled)
 
bool IsMeshReflectionEnabled ()
 
void EnablePlayerReflection (bool bEnabled)
 
bool IsPlayerReflectionEnabled ()
 
void EnableCharacterReflection (bool bEnabled)
 
bool IsCharacterReflectionEnabled ()
 
bool IsRedrawStillReflection ()
 whether to redraw reflection even if the camera does not move. More...
 
bool IsUnderWater ()
 
float GetWindSpeed ()
 get the wind speed. More...
 
void SetWindSpeed (float fSpeed)
 set the wind speed. More...
 
float GetWindDirection ()
 get the wind Direction. More...
 
void SetWindDirection (float fWindDirection)
 set the wind Direction. More...
 
void SetGlobalWater (bool bEnable, float fWaterLevel=0.0f)
 Set the global water drawing attribute. More...
 
float GetMaxWaterLevel ()
 
void AddRipple (const Vector3 &vPos)
 add a ripple at the given position using the default wave parameters of the ocean. More...
 
bool create ()
 create the default ocean. More...
 
void CheckLoadOceanTextures (int nTechnique=0)
 check load ocean textures
 
void InitDeviceObjects ()
 init device objects. More...
 
void RestoreDeviceObjects ()
 restore device object
 
void InvalidateDeviceObjects ()
 Invalid device object.
 
void DeleteDeviceObjects ()
 delete device objects
 
void Cleanup ()
 clean up all resource objects
 
void update (float fTimeDelta)
 this function should be called as often as possible to animate the ocean. More...
 
bool UpdateReflectionTexture (SceneState &sceneState)
 redraw reflection texture only necessary. More...
 
void ForceUpdateOcean ()
 force updating reflection texture in the next render frame. More...
 
void Render (SceneState *pSceneState)
 render the ocean More...
 
bool RenderReflectionTexture ()
 whether we have reflection texture drawn. More...
 
void SetRenderTechnique (DWORD dwTechnique)
 obsolete: set the current ocean rendering technique. More...
 
DWORD GetRenderTechnique ()
 obsolete: get ocean simulation and rendering technique. More...
 
bool IsPointUnderWater (const Vector3 &vPos)
 check whether a specified point is under the water surface. More...
 
bool IsDrawShoreLine ()
 return true if draw shoreline
 
void DrawShoreLine (bool bDraw)
 set whether drawing shoreline
 
void CleanupTerrainCache ()
 clean up terrain height field cache. More...
 
bool IsOceanVisible ()
 whether the ocean has passed the occlusion test in the last frame
 
bool IsAnimateFFT ()
 shall we animate FFT, animating FFT will consume quite a lot of CPU per frame. More...
 
void SetAnimateFFT (bool bEnable)
 Set whether we shall animate FFT, animating FFT will consume quite a lot of CPU per frame. More...
 
void EnableScreenSpaceFog (bool value)
 
bool IsScreenSpaceFog ()
 
- Public Member Functions inherited from ParaEngine::IAttributeFields
virtual int GetChildAttributeColumnCount ()
 we support multi-dimensional child object. More...
 
virtual int GetChildAttributeObjectCount (int nColumnIndex=0)
 get the number of child objects (row count) in the given column. More...
 
virtual IAttributeFieldsGetChildAttributeObject (int nRowIndex, int nColumnIndex=0)
 
virtual IAttributeFieldsGetChildAttributeObject (const std::string &sName)
 get attribute by child object. More...
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetName_s, const char **)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, SetName_s, const char *)
 
 ATTRIBUTE_METHOD (IAttributeFields, PrintObject_s)
 
 ATTRIBUTE_METHOD (IAttributeFields, AddRef_s)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetRefCount_s, int *)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, SetTime_s, int)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetTime_s, int *)
 
 ATTRIBUTE_METHOD (IAttributeFields, Release_s)
 
virtual const std::string & GetIdentifier ()
 
virtual void SetIdentifier (const std::string &sID)
 
virtual bool IsModified ()
 whether some of the fields are modified.It is up to the implementation class to provide this functionality if necessary. More...
 
virtual void SetModified (bool bModified)
 set whether any field has been modified. More...
 
virtual bool ValidateFields ()
 validate all fields and return true if validation passed. More...
 
virtual string GetValidationMessage ()
 get the recent validation message due to the most recent call to ValidateFields()
 
virtual bool ResetField (int nFieldID)
 Reset the field to its initial or default value. More...
 
virtual bool InvokeEditor (int nFieldID, const std::string &sParameters)
 Invoke an (external) editor for a given field. More...
 
virtual bool AddChildAttributeObject (IAttributeFields *pChild, int nRowIndex=-1, int nColumnIndex=0)
 add child object. More...
 
virtual void * QueryObjectByName (const std::string &sObjectType)
 convert to object of a given type. More...
 
virtual void * QueryObject (int nObjectType)
 convert to object of a given type. More...
 
virtual int GetTime ()
 get the current local time in case it is animated in milli seconds frames. More...
 
virtual void SetTime (int nTime)
 
virtual CDynamicAttributeFieldGetDynamicField (const std::string &sName)
 Get a dynamic field with a given name. More...
 
virtual CDynamicAttributeFieldGetDynamicField (int nIndex)
 Get a dynamic field with a given index. More...
 
virtual const char * GetDynamicFieldNameByIndex (int nIndex)
 get field name by index
 
virtual int GetDynamicFieldCount ()
 how many dynamic field this object currently have. More...
 
virtual int SetDynamicField (const std::string &sName, const CVariable &value)
 set a dynamic field with a given name. More...
 
virtual int AddDynamicField (const std::string &sName, ATTRIBUTE_FIELDTYPE dwType)
 add dynamic field and return field index
 
virtual void RemoveAllDynamicFields ()
 remove all dynamic fields
 
virtual int SaveDynamicFieldsToString (std::string &output)
 save only text dynamic fields to fieldname = value text strings. More...
 
virtual int LoadDynamicFieldsFromString (const std::string &input)
 load only text dynamic fields from string More...
 
CAttributeClassGetAttributeClass ()
 get the main attribute class object. More...
 
void PrintObject ()
 print the content of this object to a text file at temp/doc/[ClassName].txt. More...
 
- Public Member Functions inherited from ParaEngine::IObject
virtual void Clone (IObject *obj) const
 Clone the object's contains to a pointer. More...
 
virtual IObjectClone () const
 Clone the object's contains and return a pointer to the newly created object. More...
 
virtual bool Equals (const IObject *obj) const
 Compare the object with another object. More...
 
virtual const ITypeGetType () const
 
virtual std::string ToString () const
 
WeakPtr_typeGetWeakReference ()
 get weak reference object. More...
 
virtual int ProcessObjectEvent (const ObjectEvent &event)
 this function is only used to backward compatibility of ParaObject:AddEvent() function. More...
 
- Public Member Functions inherited from ParaEngine::CRefCounted
void addref () const
 add reference count of the object. More...
 
bool delref () const
 decrease reference count of the object. More...
 
int GetRefCount () const
 get the reference count
 
virtual int Release ()
 
CRefCountedAddToAutoReleasePool ()
 addref and releases the ownership sometime soon automatically (usually at the end of the current frame). More...
 

Static Public Member Functions

static COceanManagerGetInstance ()
 
- Static Public Member Functions inherited from ParaEngine::IAttributeFields
static HRESULT GetAttributeClassID_s (IAttributeFields *cls, int *p1)
 
static HRESULT GetAttributeClassName_s (IAttributeFields *cls, const char **p1)
 
static bool OpenWithDefaultEditor (const char *sFilename, bool bWaitOnReturn=false)
 Open a given file with the default registered editor in the game engine. More...
 

Friends

class CSceneObject
 

Additional Inherited Members

- Protected Member Functions inherited from ParaEngine::IAttributeFields
virtual CAttributeClassCreateAttributeClass ()
 initialize fields
 
virtual CDynamicAttributesSetGetDynamicAttributes (bool bCreateIfNotExist=false)
 
- Protected Attributes inherited from ParaEngine::IObject
WeakPtr_type m_weak_reference
 
- Protected Attributes inherited from ParaEngine::CRefCounted
int m_refcount
 

Detailed Description

FFT based ocean rendering class.

FFT is used to generate the ocean wave mesh. Bump mapping is used to add high frequency wavelets.

Member Function Documentation

§ AddRipple()

void ParaEngine::COceanManager::AddRipple ( const Vector3 vPos)

add a ripple at the given position using the default wave parameters of the ocean.

Parameters
vPosthe position of the center of the ripple in world coordinate system.

§ CleanupTerrainCache()

void ParaEngine::COceanManager::CleanupTerrainCache ( )

clean up terrain height field cache.

This is usually called when the user has changed the global terrain

§ create()

bool ParaEngine::COceanManager::create ( )

create the default ocean.

the initial ocean wave at time t=0 is prepared. FFT tables are build. But no device objects are created.

§ EnableOcean()

void ParaEngine::COceanManager::EnableOcean ( bool  Enable)

set whether ocean should be drawn and simulated.

§ EnableReflectionItem()

void ParaEngine::COceanManager::EnableReflectionItem ( ReflectionItem  item,
bool  bEnabled 
)

Set which group of items will be drawn in the reflection.

Parameters
itemsee ReflectionItem
bEnabled

§ ForceUpdateOcean()

void ParaEngine::COceanManager::ForceUpdateOcean ( )

force updating reflection texture in the next render frame.

§ GetAttributeClassID()

virtual int ParaEngine::COceanManager::GetAttributeClassID ( )
inlinevirtual

attribute class ID should be identical, unless one knows how overriding rules work.

Reimplemented from ParaEngine::IAttributeFields.

§ GetMaxWaterLevel()

float ParaEngine::COceanManager::GetMaxWaterLevel ( )
Returns
: get the highest water level that is visible. The water level is in world coordinates.

§ GetOceanColor()

const LinearColor& ParaEngine::COceanManager::GetOceanColor ( )
inline

a color to be multiplied to the sky, giving it a special color hue

Returns

§ GetRenderTechnique()

DWORD ParaEngine::COceanManager::GetRenderTechnique ( )

obsolete: get ocean simulation and rendering technique.

See also
OCEAN_RENDER_TECHNIQUE

§ GetWaterLevel()

float ParaEngine::COceanManager::GetWaterLevel ( )
Returns
: get the water level

§ GetWindDirection()

float ParaEngine::COceanManager::GetWindDirection ( )

get the wind Direction.

§ GetWindSpeed()

float ParaEngine::COceanManager::GetWindSpeed ( )

get the wind speed.

§ InitDeviceObjects()

void ParaEngine::COceanManager::InitDeviceObjects ( )

init device objects.

the create() function must be called, before this function is called.

§ InstallFields()

int ParaEngine::COceanManager::InstallFields ( CAttributeClass pClass,
bool  bOverride 
)
virtual

this class should be implemented if one wants to add new attribute.

This function is always called internally.

Reimplemented from ParaEngine::IAttributeFields.

§ IsAnimateFFT()

bool ParaEngine::COceanManager::IsAnimateFFT ( )

shall we animate FFT, animating FFT will consume quite a lot of CPU per frame.

§ IsPointUnderWater()

bool ParaEngine::COceanManager::IsPointUnderWater ( const Vector3 vPos)

check whether a specified point is under the water surface.

Returns
: return true if point is under water surface.

§ IsRedrawStillReflection()

bool ParaEngine::COceanManager::IsRedrawStillReflection ( )

whether to redraw reflection even if the camera does not move.

this function is automatically true, if animated characters are enabled for reflection drawing.

§ IsUnderWater()

bool ParaEngine::COceanManager::IsUnderWater ( )
Returns
: true if it is under water effect that is being used most recently

§ OceanEnabled()

bool ParaEngine::COceanManager::OceanEnabled ( )

whether ocean should be drawn and simulated.

§ Render()

void ParaEngine::COceanManager::Render ( SceneState pSceneState)

render the ocean

check whether the camera eye is under the water surface or not

§ RenderReflectionTexture()

bool ParaEngine::COceanManager::RenderReflectionTexture ( void  )

whether we have reflection texture drawn.

§ SetAnimateFFT()

void ParaEngine::COceanManager::SetAnimateFFT ( bool  bEnable)

Set whether we shall animate FFT, animating FFT will consume quite a lot of CPU per frame.

§ SetGetOceanColor()

void ParaEngine::COceanManager::SetGetOceanColor ( const LinearColor color)
inline

a color to be multiplied to the sky, giving it a special color hue

Parameters
color

§ SetGlobalWater()

void ParaEngine::COceanManager::SetGlobalWater ( bool  bEnable,
float  fWaterLevel = 0.0f 
)

Set the global water drawing attribute.

the global water level is just a water surface at a given height near the current camera location

Parameters
bEnablewhether to draw global water
fWaterLevelwater level in meters. Default value is 0.0f;

§ SetRenderTechnique()

void ParaEngine::COceanManager::SetRenderTechnique ( DWORD  dwTechnique)

obsolete: set the current ocean rendering technique.

It will always fall back to a valid device. Hence, it may be different from GetRenderTechnique()

Parameters
dwTechnique
See also
OCEAN_RENDER_TECHNIQUE

§ SetWaterLevel()

void ParaEngine::COceanManager::SetWaterLevel ( float  fLevel)

set the water level

Parameters
fLevelwater level

§ SetWindDirection()

void ParaEngine::COceanManager::SetWindDirection ( float  fWindDirection)

set the wind Direction.

§ SetWindSpeed()

void ParaEngine::COceanManager::SetWindSpeed ( float  fSpeed)

set the wind speed.

§ update()

void ParaEngine::COceanManager::update ( float  fTimeDelta)

this function should be called as often as possible to animate the ocean.

currently a fixed time delta is used.

§ UpdateReflectionTexture()

bool ParaEngine::COceanManager::UpdateReflectionTexture ( SceneState sceneState)

redraw reflection texture only necessary.

Call this function at the start of each rendering frame

Returns
whether ocean should be drawn.

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