home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 July & August / PCWorld_2006-07-08_cd.bin / temacd / planearcade / planearcade.exe / Tank3.bmp / q3bsp.h < prev    next >
C/C++ Source or Header  |  2004-01-21  |  5KB  |  190 lines

  1.  
  2. ///////////////////////////////////////////////
  3. //original zdrojak: Jan Koci (koci.opengl.cz)//
  4. //upravil:          Peter AdamΦφk            // 
  5. ///////////////////////////////////////////////
  6.  
  7.  
  8. #ifndef _Q3BSP_H_
  9. #define _Q3BSP_H_
  10.  
  11.  
  12. #include "q3bitset.h"
  13. #include "q3enums.h"
  14. #include "q3structs.h"
  15.  
  16.  
  17.  
  18. //---------------------------------------------------
  19. //CUSTOM VERTEX QBSP
  20. //---------------------------------------------------
  21. struct CUSTOMVERTEXQBSP
  22.     D3DXVECTOR3 pos; // pozicia
  23.     DWORD    color;       // farba
  24.     FLOAT       tu, tv;   // texturove suradnice
  25.     FLOAT       tu2, tv2;   // suradnice lightmapy
  26.  
  27. };
  28. #define D3DFVF_CUSTOMVERTEXQBSP (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX2)
  29.  
  30.  
  31. //------------------------------------------------------------------
  32. // Name: QBSP class
  33. // Desc: Trieda Q3 BSP
  34. //------------------------------------------------------------------
  35. class QBSP
  36. {
  37. private:
  38.  
  39.     LPDIRECT3DVERTEXBUFFER9 g_pVB     ;  //vertex buffer
  40.     LPDIRECT3DTEXTURE9    *Texture    ; //texturovy zasobnik
  41.     LPDIRECT3DTEXTURE9    *LightMap   ; //lightmapy
  42.  
  43. public:
  44.  
  45.     //konÜtruktor deÜtruktor
  46.     QBSP();
  47.     ~QBSP();
  48.  
  49.      // The number of verts in the model
  50.      // PoΦet vrchol∙ scΘny
  51.      int m_iNumOfVerts;
  52.  
  53.      // The number of faces in the model
  54.      // PoΦet ploÜek scΘny
  55.      int m_iNumOfFaces;
  56.  
  57.      // The number of texture maps
  58.      // PoΦet textur
  59.      int m_iNumOfTextures;
  60.  
  61.      // The number of light maps
  62.      // PoΦet lightmap textur
  63.      int m_iNumOfLightmaps;
  64.  
  65.      // The number of nodes
  66.      // PoΦet uzl∙
  67.      int m_iNumOfNodes;
  68.  
  69.      // The number of leafs
  70.      // PoΦe list∙
  71.      int m_iNumOfLeafs;
  72.  
  73.      // The number of leaf faces
  74.      // PoΦet ploÜek v listu
  75.      int m_iNumOfLeafFaces;
  76.  
  77.      // The number of planes
  78.      // PoΦet d∞licφch ploch
  79.      int m_iNumOfPlanes;
  80.  
  81.      // This will store how many faces are drawn and are seen by the camera
  82.      // Kontrolnφ prom∞nnß, kterß uklßdß, kolik ploÜek se renderuje
  83.      int m_iVisibleFaces;
  84.  
  85.      // PoΦet koliznφch srß₧ek v listu 
  86.     int m_iNumOfLeafBrushes;
  87.  
  88.     // PoΦet koliznφch srß₧ek 
  89.     int m_iNumOfBrushes;
  90.  
  91.     // PoΦet koliznφch ploch srß₧ek 
  92.     int m_iNumOfBrushSides;
  93.  
  94.     // Kontrolnφ prom∞nnß, kterß uklßdß, kolik kolizφ se provßdφ
  95.     int m_iVisibleBrushes;
  96.  
  97.     int m_pppiBoundingBox[6][4][3];        // [6]poΦet stran, [4]poΦet vrchol∙ strany, [3]xyz pozice vrcholu
  98.  
  99.     int m_iNumSkyTex;    // PoΦet textur nebe
  100.     int m_piSkyTex[10];    // Id hodnoty textur nebe
  101.  
  102.     int m_iNumOfShaders;    // PoΦet efekt∙
  103.     int *m_piShaderBrushIndex;    // Index efektu, pot°ebnß pro zamezenφ detekce kolize nap°. z mlhou 
  104.  
  105.     int m_iNumOfModels;    // PoΦet model∙
  106.     int *m_piModelBrushIndex;    // Index modelu, pot°ebnß pro zamezenφ detekce kolize 
  107.  
  108.     int m_iNumOfMeshVertices;    // PoΦet vrchol∙ meÜφ
  109.     int *m_piMeshVertices;        // Pole vrchol∙ meÜφ
  110.  
  111.  
  112.      // The object's vertices
  113.      // Vrcholy scΘny
  114.      TBspVertex  *m_ptBspVertex;
  115.  
  116.      // The faces information of the object
  117.      // PloÜky scΘny
  118.      TBspFace    *m_ptBspFace;
  119.  
  120.      // The nodes information of the BSP scene
  121.      // Uzly BSP scΘny
  122.      TBspNode    *m_ptBspNode;
  123.  
  124.      // The leafs information of the BSP scene
  125.      // Listy BSP scΘny
  126.      TBspLeaf    *m_ptBspLeaf;
  127.  
  128.      // The splitter planes of the BSP scene
  129.      // D∞licφ plochy BSP scΘny
  130.      TBspPlane   *m_ptBspPlane;
  131.  
  132.     // The Brushes
  133.     // Koliznφ srß₧ky
  134.     TBspBrush   *m_ptBspBrush;
  135.  
  136.     // The splitter planes of the Brush side
  137.     // D∞licφ plochy koliznφch srß₧ek
  138.     TBspBrushSides    *m_ptBspBrushSides;
  139.  
  140.      // The leaf faces of the BSP scene
  141.      // PloÜky list∙ BSP scΘny
  142.      int         *m_piLeafFaces;
  143.  
  144.      // The clusters of the BSP scene
  145.      // Data pro detekci viditelnosti portßl∙
  146.      TBspVisData  m_tBspVisData;
  147.  
  148.     // The brushes 
  149.      // Koliznφ srß₧ky listu
  150.        int *m_piLeafBrushes; 
  151.  
  152.     TBspShader *m_ptBspShader;    // Efekty
  153.  
  154.     TBspModel *m_ptBspModel;    // Modely
  155.  
  156.      
  157.      // The bitset for the faces that have/haven't been drawn
  158.      // Prom∞nnß pro detekci, zda mß b²t ploÜka vykreslena Φi ne
  159.      K_CBitset m_BitsetFacesDrawn;
  160.  
  161.     
  162.  
  163.      ////////////////////
  164.      //POMOCNE FUNKCIE //
  165.      ////////////////////
  166.  
  167.      void FillVertexBuffer();
  168.      void RenderFace(int i_face_index);
  169.      int  FindLeaf(VECTOR3D CamPos);
  170.      bool CheckBrushCollision(int i_leaf_index);
  171.      int IsClusterVisible(int i_camera_in_cluster, int i_test_cluster);
  172.  
  173.      ////////////////////
  174.      //    FUNKCIE     //
  175.      ////////////////////
  176.      bool LoadBSP(const char *pc_filename,float Gamma);
  177.      void RenderBSP();
  178.      bool ColliseBSP(VECTOR3D Point);
  179.     
  180. };
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189. #endif //_Q3BSP_H_