/** @file RiverOptimizer.h @brief
*	Copyright (c) 2007,第九城市游戏研发中心
*	All rights reserved.
*
*	当前版本:
*	作    者:和萌
*	完成日期:2008-
*
*	取代版本:
*	作    者:
*	完成日期:
*/ #ifndef CODE_INGAME #include "RiverManager.h" //定义水域CHUNK为4*4,相邻CHUNK共用8顶点 #define VERTEXINCHUNK 3 #define VERTEICEINCHUNK (VERTEXINCHUNK+1)*(VERTEXINCHUNK+1) //8的倍数 #define WIDTHEBITY(bit) ( ( (bit<<3) + 31) / 32 * 4 ) #pragma once class MAIN_ENTRY CRiverOptimizer { public: CRiverOptimizer(CRiverManager* pRiverManager, CTerrain *pTerrain); ~CRiverOptimizer(void); //初始化优化器,创建chunk,生成LOD标志数组 bool Initial(); //获得Chunk数 unsigned int GetRiverChunkNumX(); unsigned int GetRiverChunkNumY(); bool Optimize(); ////////////////////////////////////////////////////////////////////////// //测试用临时变量 NiPoint3 m_kMaxPoint,m_kMinPoint; private: CRiverOptimizer(); CRiverOptimizer(CRiverOptimizer&); //创建水域外包矩形 bool _CreateRiverChunks(); //获得当前点在terrain上的索引 DWORD _GetTerrainIndex(float fX,float fY); //获得扫描线(地形)长 DWORD _GetScanline(); //判断当前Chunk是否包含水域信息 bool _IsUsedInRiver(unsigned int uiChunkX, unsigned int uiChunkY); ////////////////////////////////////////////////////////////////////////// private: CRiverManager *m_pRiverManager; CTerrain *m_pTerrain; //标志每一个顶点的LOD unsigned char *m_ucpQuadMatrix; //RiverChunk的长宽 unsigned int m_iRiverChunkX; unsigned int m_iRiverChunkY; //标志RiverChunk属性:该RiverChunk是否包含水域信息 bool *m_bIsRiverChunk; }; #endif