Earth3D.h
上传用户:lbr_007
上传日期:2019-05-31
资源大小:282k
文件大小:4k
源码类别:

传真(Fax)编程

开发平台:

Visual C++

  1. // Earth3D.h
  2. //
  3. #ifndef EARTH3D_H_
  4. #define EARTH3D_H_
  5. #include <glview.h>
  6. #include <dibsect.h>
  7. #include <ArrayContainer.h>
  8. #include <utmproj.h>
  9. class GEOTex {
  10. void initTexture(void)
  11. {
  12. m_hScale = m_vScale = 1.0;
  13. m_pj = 0;
  14. }
  15. public:
  16. //
  17. // m_imgData holds the actual (r,g,b) pixels - one byte per component.
  18. // m_texWidth & m_texHeight store the dimensions of the texture data
  19. // m_imgWidth & m_imgHeight store the dimensions of the picture within
  20. // the texture data. so m_imgWidth & m_imgHeight may be smaller than
  21. // m_texWidth & m_texHeight...this is all on account of the OpenGL
  22. // requirement that each dimension of the texture be a power of 2 in
  23. // magnitude, at the same time we want to maintain the aspect ratio of
  24. // the original image.
  25. //
  26. ArrayContainer<unsigned char> m_imgData;
  27. double m_hScale;
  28. double m_vScale;
  29. UINT32 m_texWidth;
  30. UINT32 m_texHeight;
  31. UTMProjection * m_pj;
  32. GEORef m_gr;
  33. GEOTex(void){ initTexture();}
  34. GEOTex(const GEOTex& t)
  35. {
  36. initTexture();
  37. Copy(t);
  38. }
  39. ~GEOTex(void){}
  40. void Copy(const GEOTex& t)
  41. {
  42. m_imgData.Copy(t.m_imgData);
  43. m_hScale = t.m_hScale;
  44. m_vScale = t.m_vScale;
  45. m_texWidth = t.m_texWidth;
  46. m_texHeight = t.m_texHeight;
  47. m_gr = t.m_gr;
  48. }
  49. GEOTex& operator = (const GEOTex& t)
  50. {
  51. Copy(t);
  52. return *this;
  53. }
  54. void CreateTexture(DIBSection& dib, UTMProjection * pj);
  55. void DrawTexture(void);
  56. bool IsCreated(void)const{ return (m_imgData.GetSize() > 0) ? true : false;}
  57. };
  58. class Earth3D : public GLView3D {
  59. public:
  60. enum Earth3DDrawModes {
  61. DrawLines,
  62. DrawTriangles
  63. };
  64. private:
  65. void InitEarth3D(void)
  66. {
  67. m_model_built = 0;
  68. m_draw_mode = DrawTriangles;
  69. m_rebuildEarth = m_rebuildTexture = true;
  70. m_flyMode = false;
  71. m_drawFlyer = true;
  72. m_flyFirstPerson = false;
  73. m_buildAircraft = true;
  74. }
  75. protected:
  76. GEOTex m_gt;
  77. int m_model_built;
  78. Earth3DDrawModes m_draw_mode;
  79. DIBSection m_texture_dib;
  80. bool m_rebuildEarth;
  81. bool m_rebuildTexture;
  82. // lat & lon of the center of the image
  83. double m_centerLat;
  84. double m_centerLon;
  85. // bunch of vectors for figuring out the view direction
  86. double m_eyeDist;
  87. double m_centerPt[3];
  88. double m_eyePt[3];
  89. double m_unitSouthPt[3];
  90. double m_unitEastPt[3];
  91. double m_unitCenterPt[3];
  92. double m_upVec[3];
  93. DIBSection m_northHdr;
  94. // picking and flying variables
  95. double m_pickLat;
  96. double m_pickLon;
  97. bool m_pickPoint;
  98. bool m_flyMode;
  99. bool m_drawFlyer;
  100. bool m_flyFirstPerson;
  101. bool m_buildAircraft;
  102. GLdouble m_flyPt[3];
  103. GLdouble m_flyTo[3];
  104. public:
  105. Earth3D(void);
  106. ~Earth3D(void);
  107. virtual void RenderPrimaryImage(void);
  108. virtual void SetOrientation(void);
  109. void RenderEarthImage(void);
  110. void RenderPickImage(void);
  111. void RenderDirectionHeaders(DIBSection& dib, int direction);
  112. void RenderGEOImage(void);
  113. void RenderAircraftImage(void);
  114. void SetGeoImage(DIBSection * dib, UTMProjection * pj);
  115. void SetDrawingMode(Earth3DDrawModes mode){ m_draw_mode = mode;}
  116. Earth3DDrawModes GetDrawingMode(void)const{ return m_draw_mode;}
  117. void RebuildEarth(void){ m_rebuildEarth = true;}
  118. void RebuildTexture(void){ m_rebuildTexture = true;}
  119. void RebuildAircraft(void){ m_buildAircraft = true;}
  120. virtual void RebuildImage(void){ m_reRender = true; RebuildEarth(); RebuildTexture(); RebuildAircraft();}
  121. void GenTexture(DIBSection& dib);
  122. void SetTexture(DIBSection& dib);
  123. void GeoToXYZ(double lat, double lon, double& x, double& y, double& z, double R = 1.0);
  124. bool PickedPoint(void)const{ return m_pickPoint;}
  125. double GetPickedLat(void)const{ return m_pickLat;}
  126. double GetPickedLon(void)const{ return m_pickLon;}
  127. void SetFlyMode(bool tf){ m_flyMode = tf;}
  128. bool GetFlyMode(void)const{ return m_flyMode;}
  129. void SetFlyPosition(double u[3], double v[3], bool firstPerson);
  130. };
  131. #endif