/** @file LayerFog.h
@brief 层雾
* Copyright (c) 2007,第九城市游戏研发中心
* All rights reserved.
*
* 当前版本:0.1
* 作 者:Shi Yazheng
* 完成日期:2008-02-02
*
* 取代版本:
* 作 者:
* 完成日期:
*/
#pragma once
#include "IDepthAlphaEffect.h"
namespace SceneCore
{
NiSmartPointer(CLayerFog);
/**
@brief 层雾效果
* 用带alpha通道的纹理[动画]实现体积雾
*/
class MAIN_ENTRY CLayerFog : public IDepthAlphaEffect
{
NiDeclareRTTI;
public:
CLayerFog(void);
virtual ~CLayerFog(void);
///
/**
*
功能说明: 创建层雾
*
可访问性:
*
注 释:
* @param kPosition[in] 雾体所在位置
* @param kRotation[in] 雾体的旋转
* @param fSize[in] 雾表面尺寸
* @param pkFogShapeSceneRoot[in] 描述体雾形状的几何体场景
* @param fDensity[in] 浓度,雾颜色的每米增加度
@param kColor[in] 颜色
* @return 创建是否成功
*/
bool Init(NiAVObjectPtr pkFogShapeSceneRoot, const NiPoint3& kPosition,
const NiMatrix3& kRotation, const float& fScale, const float fDensity=0.1f, const NiColor& kColor=NiColor(1,1,1));
/// 获取材质
NiMaterialPtr GetMaterial();
/// 设置世界变换
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 SetAlpha(const float fAlpha);
float GetAlpha() const;
/// 设置颜色
void SetColor(const NiColor kColor);
const NiColor& GetColor() const;
/// 设置描述体雾形状的场景
void SetSceneRoot(NiAVObjectPtr pkSceneRoot);
NiAVObjectPtr GetSceneRoot();
///
void AddGeometry(NiGeometry* pkGeo);
// 重写父类虚函数部分
/// 设置深度纹理
virtual void SetDepthTexture(NiTexturePtr pkDepthTexture);
/// 销毁 释放占用资源,智能指针置 NULL
virtual void Destory();
/// 更新
virtual void Update(float fTime);
///构造可视集
virtual void BuildVisibleSet(NiEntityRenderingContextPtr pkRenderingCondtex);
protected:
/// 遍历一个 NiAVObject 所有子节点,搜索 Geometry 并且设置 LayerFog material
void _RecursiveFindAndSetLayerFogMaterial(NiAVObject* pkSceneRoot);
NiAVObjectPtr m_pkSceneRoot; // 雾表面几何体
NiMaterialPtr m_spLayerFogMtl;// 材质
NiPoint3 m_kTranslation; // 位置
NiMatrix3 m_kRotation; // 旋转
float m_fScale; // 缩放
float m_fDensity; // 浓度 每米增加
NiColor m_kColor; // 雾的颜色
bool m_bInitialized; // 是否初始化过
vector m_GeometryList; // SceneRoot 中所有 NiGeometry 列表
};
};