/** @file AdvanceWater.h @brief 高级水体 现在使用 max 给面片覆 AdvanceWater Shader, 本类作废,只作参考
*	Copyright (c) 2007,第九城市游戏研发中心
*	All rights reserved.
*
*	当前版本:0.1
*	作    者:Shi Yazheng
*	完成日期:2008-09-22
*
*	取代版本:
*	作    者:
*	完成日期:
*/ #ifndef ADVANCE_WATER_H #define ADVANCE_WATER_H #pragma once #include #include #ifndef CODE_INGAME namespace SceneCore { /// 用来初始化水体的参数 struct stAdvWaterInitParam { // 4 个用做叠加的波的参数 float afWaveLength[4]; // 波长 float afAmplitude[4]; // 振幅 float afSpeed[4]; // 波峰移动速度 NiPoint2 avDirection[4]; // 方向 // 水面的参数 //float fFresnel; // Fresnel float fAlpha; // 透明度,用于修正 fresnel, 调整水体透明度 NiColor kReflectColor; // 反射色修正 NiColor kSpecularColor; // 高光色 // 环境参数 NiPoint3 kLightDir; // 光线方向 //NiTexturePtr spRefractMap; // 折射纹理 NiTexturePtr spEnvMap; // 环境纹理, cube map }; NiSmartPointer(CAdvanceWater); class MAIN_ENTRY CAdvanceWater : public NiNode { NiDeclareRTTI; public: CAdvanceWater(void); ~CAdvanceWater(void); // 初始化 void Init(NiAVObjectPtr spSceneRoot, stAdvWaterInitParam& initParam); // 设置/获取波长 void SetWaveLength(UINT uiIndex, float fData); const float* GetWaveLength(); // 设置/获取振幅 void SetAmplitude(UINT uiIndex, float fData); const float* GetAmplitude(); // 设置/获取波传播速度 void SetSpeed(UINT uiIndex, float fData); const float* GetSpeed(); // 设置/获取方向 void SetWaveDirection(UINT uiIndex, NiPoint2 vWaveDirection); NiPoint2* GetWaveDirection(); // 设置/获取 Fresnel void SetFresnel(float fFresnel); const float GetFresnel(); // 设置/获取 Alpha void SetAlpha(float fAlpha); const float GetAlpha(); // 设置/获取反射色 void SetReflectColor(NiColor kColor); const NiColor GetReflectColor(); // 设置/获取折射色 void SetSpecularColor(NiColor kColor); const NiColor GetSpecularColor(); // 设置/获取光方向 void SetLightDir(NiPoint3 kDir); const NiPoint3 GetLightDir(); // 设置/获取环境纹理 void SetEnvMap(NiTexturePtr spEnvMap); const NiTexturePtr GetEnvMap(); // 设置/获取折射纹理 void SetRefractMap(NiTexturePtr spRefractMap); const NiTexturePtr GetRefractMap(); // 设置世界变换 void SetTranslate(const NiPoint3& kTranslation); const NiPoint3& GetTranslate() const; void SetRotate(const NiMatrix3& kRotation); const NiMatrix3& GetRotate() const; void SetScale(const float fScale); float GetScale() const; // 设置水表面几何体 void SetSceneRoot(NiAVObjectPtr pkSceneRoot); NiAVObjectPtr GetSceneRoot(); // 添加 Geometry 到 多边形列表 void AddGeometry(NiGeometry* pkGeom); // 更新 void Update(float fTime, bool bUpdateControllers = true); // 创建可视集 void BuildVisibleSet(NiEntityRenderingContext* pkRenderingContext); void RenderImmediate(NiRenderer* pkRenderer); private: // 刷新水波参数 void _RefreshWaveParam(); void _RecursiveFindAndSetAdvanceWaterMaterial(); float m_afWaveLength[4]; // 波长 float m_afAmplitude[4]; // 振幅 float m_afSpeed[4]; // 波峰移动速度 NiPoint2 m_avDirection[4]; // 方向 float m_afW[4]; // 频率, 每个 2*Pai 距离波的重复次数. 2*Pai/waveLength float m_afPhi[4]; // phase-constant 相位常数 speed*W float m_fFresnel; // Fresnel float m_fAlpha; // Alpha NiColor m_kReflectColor; // 反射色 NiColor m_kSpecularColor; // 折射色 NiPoint3 m_kLightDir; // 光方向 NiTexturePtr m_spEnvMap; // 环境纹理, cube map NiTexturePtr m_spRefractMap; // 用做折射采样的纹理 bool m_bEnableRefract; // 是否开启折射 bool m_bMoveVertex; // 是否改变顶点高度 NiAVObjectPtr m_spSceneRoot; // 水表面几何体 NiMaterialPtr m_spAdvWaterMtl; // 材质 NiPoint3 m_kTranslation; // 位置 NiMatrix3 m_kRotation; // 旋转 float m_fScale; // 缩放 vector m_GeometryList; // SceneRoot 中所有 NiGeometry 列表 }; }; #endif #endif