TerrainEngine.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:5k
源码类别:

游戏

开发平台:

Visual C++

  1. //----------------------------------------------------------------------------
  2. // File: terrainengine.h
  3. //
  4. // Desc: Class that owns all the terrian mesh objects and all 
  5. //       the game objects. 
  6. //
  7. // Copyright (C) Microsoft Corporation. All Rights Reserved.
  8. //-----------------------------------------------------------------------------
  9. #pragma once
  10. class CTerrainMesh;
  11. #define MAX_VIEW_ZONE_X 21
  12. #define MAX_VIEW_ZONE_Z 21
  13. class CDisplayObject;
  14. //-----------------------------------------------------------------------------
  15. // Name: enum CULLSTATE
  16. // Desc: Represents the result of the culling calculation on an object.
  17. //-----------------------------------------------------------------------------
  18. enum CULLSTATE
  19. {
  20.     CS_UNKNOWN,      // cull state not yet computed
  21.     CS_INSIDE,       // object bounding box is at least partly inside the frustum
  22.     CS_OUTSIDE       // object bounding box is outside the frustum
  23. };
  24. //-----------------------------------------------------------------------------
  25. // Name: struct CULLINFO
  26. // Desc: Stores information that will be used when culling objects.  It needs
  27. //       to be recomputed whenever the view matrix or projection matrix changes.
  28. //-----------------------------------------------------------------------------
  29. struct CULLINFO
  30. {
  31.     D3DXVECTOR3 vecFrustum[8];    // corners of the view frustum
  32.     D3DXPLANE planeFrustum[6];    // planes of the view frustum
  33. };
  34. class CTerrainEngine  
  35. {
  36. public:
  37.     struct MESH_NODE
  38.     {
  39.         CTerrainMesh*   pMesh;
  40.         CDisplayObject* pDisplayList;
  41.         BOOL            bVisited;
  42.     };
  43.     struct VIEW_NODE
  44.     {        
  45.         bool        bValid;
  46.         bool        bVisited;
  47.         bool        bInView;
  48.         CULLSTATE   cullstate;
  49.         float       fZonePosX;
  50.         float       fZonePosZ;
  51.         int         iWorldX;
  52.         int         iWorldZ;
  53.         int         iZoneX;
  54.         int         iZoneZ;
  55.         D3DXVECTOR3 vecBoundsWorld[8];
  56.         D3DXPLANE   planeBoundsWorld[6];
  57.     };
  58. public:
  59.     CTerrainEngine( CMyApplication* pApp );
  60.     virtual ~CTerrainEngine();
  61.     HRESULT OneTimeSceneInit( CThemeStyle* pTheme );
  62.     HRESULT InitDeviceObjects( D3DFORMAT fmtTexture );
  63.     HRESULT RestoreDeviceObjects( HWND hWndMain );
  64.     HRESULT FrameMove( const float fElapsedTime );
  65.     HRESULT RenderFrame( DWORD* pdwNumVerts, CD3DCamera* pCam );
  66.     HRESULT InvalidateDeviceObjects();
  67.     HRESULT DeleteDeviceObjects();
  68.     VOID    FinalCleanup();
  69.     FLOAT   GetHeight( float x, float z );
  70.     DWORD   GetTexelColor( DWORD iLevel, float x, float z );
  71.     VOID    GetWrapOffset( float fPosX, float fPosZ, float* fOffsetX, float* fOffsetZ );
  72.     VOID    RenderZone( int iWorldX, int iWorldZ, int iZoneX, int iZoneZ, BOOL bRenderObjects, BOOL bRenderTerrain, BOOL bCullObjects );
  73.     static CULLSTATE CullObject( const CULLINFO* const pCullInfo, const D3DXVECTOR3* const pVecBounds, const D3DXPLANE* const pPlaneBounds );
  74.     static BOOL      EdgeIntersectsFace( const D3DXVECTOR3* const pEdges, const D3DXVECTOR3* const pFacePoints, const D3DXPLANE* const pPlane );
  75.     VOID    GetWorldFromPt( const float fX, const float fZ, int* pnWorldX, int* pnWorldZ );
  76.     VOID    GetZoneFromPt( const float fX, const float fZ, int* pnZoneX, int* pnZoneZ );
  77.     VOID    GetWorldFromUniversal( float fUniversalX, float fUniversalZ, float* pfWorldX, float* pfWorldZ );
  78.     BOOL    CheckIfZoneInView( const float fZonePosX, const float fZonePosZ, const int iZoneIndexX, const int iZoneIndexZ );
  79.     HRESULT RenderRadar( LPDIRECT3DTEXTURE9 pRadarTexture, LPDIRECT3DTEXTURE9 pTempRadarTexture );
  80.     void    DrawDotOnBuffer( int nCenterX, int nCenterY, D3DLOCKED_RECT* plockedRect, D3DSURFACE_DESC* pdesc, WORD wColor );
  81.     
  82.     HRESULT HandleNearbyObjects( const float fElapsedTime, CDisplayObject* pObject1, int iX, int iZ );
  83.     
  84.     HRESULT ClearStrayObjects();
  85.     HRESULT AddDisplayObject( CDisplayObject* pObject );
  86.     HRESULT RemoveDisplayObject( CDisplayObject* pObject );
  87.     DWORD   GetObjectCount() { return m_dwObjectCount; }
  88.     DWORD   GetEnemyCount() { return m_dwEnemyCount; }
  89.     DWORD               m_dwObjectCount;           // How many objects are in the world
  90.     DWORD               m_dwEnemyCount;            // How many enemies are in the world
  91.     MESH_NODE*          m_MeshArray;
  92.     LONG                m_dwWorldWidth;
  93.     LONG                m_dwWorldHeight;  
  94.     D3DFORMAT           m_fmtTexture;
  95.     DWORD               m_dwVertsRendered;
  96.     DWORD               m_dwNumZonesInView;
  97.     VIEW_NODE           m_aZoneView[MAX_VIEW_ZONE_X][MAX_VIEW_ZONE_Z];
  98.     CThemeStyle*        m_pTheme;
  99.     CMyApplication*     m_pApp;
  100. };