/** @file CGrideBaseRiver.h // 基于Grid 区域工具的水体工具 @brief
*	Copyright (c) 2007,第九城市游戏研发中心
*	All rights reserved.
*
*	当前版本:
*	作    者:和萌
*	完成日期:2009-
*
*	取代版本:
*	作    者:
*	完成日期:
*/ #ifndef CODE_INGAME #include "Terrain.h" #include #ifndef _GRIDEBASERIVER_H #define _GRIDEBASERIVER_H #define GRIDINCHUNK 64 // 河流高度调整值,用于判定不需要的点 #define ADJUST_HEIGHT 0.0 class MAIN_ENTRY CGrideBaseRiver { public: CGrideBaseRiver(void); ~CGrideBaseRiver(void); // 初始化 struct MAIN_ENTRY stTriList { unsigned int uiP0,uiP1,uiP2; }; struct MAIN_ENTRY stRiverPoint { NiPoint3 kVertex; //河流顶点坐标 NiColorA kVertexClr; //河流的顶点颜色 }; //静态函数,获得水域静态指针 static CGrideBaseRiver* GetInstance(); bool Init(CTerrain* pTerrain, float fDesAlpha, float fHeight, NiColor kColor,std::set& gridSet); void DoDispose(); NiTriShapePtr GetRiverGeom() { return m_spRiverMesh;}; unsigned int GetTrianglesCount() { return m_stTri.size();}; private: // 由TerrainIndex生成几何形 bool _GenerateRiverGeom(); // 创建半径多边形 unsigned int _BuildTriangles(); float _GetAlphaValue(NiPoint3 kPoint); bool _ExistPoint(int iTerrainIndex); // 获取指定iTerrainIndex在m_vGrideSet中的下标 int _GetRiverVerticeIndex(int iTerrainIndex); // 根据传入的grid id,计算该grid中的第一点是否保存 // 如果可以插入,则返回由iGridID换算出的iTerrainIndex // 否则 返回-1 int _InsertPointToRiver(int iGridID); private: CTerrain* m_pTerrain; // 目标地形 float m_fRiverHeight; // 水面高度 float m_fAlphaDet; // 每米alpha下降值 NiColor m_kColor; // color of river vector m_vGridSet; // all vertices of gird map m_mapRiverPointInfo;// 一个顶点的信息,包括坐标和颜色 vector m_stTri; // 顶点索引 存储的是terrain的顶点索引 NiTriShapePtr m_spRiverMesh; // 水体面片 static CGrideBaseRiver* m_spThis; }; #pragma make_public(CGrideBaseRiver) #endif #endif