globular.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:3k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // qlobular.h
  2. //
  3. // Copyright (C) 2008, Celestia Development Team
  4. // Initial implementation by Dr. Fridger Schrempp <fridger.schrempp@desy.de>
  5. //
  6. // Simulation of globular clusters, theoretical framework by  
  7. // Ivan King, Astron. J. 67 (1962) 471; ibid. 71 (1966) 64
  8. // 
  9. //
  10. // This program is free software; you can redistribute it and/or
  11. // modify it under the terms of the GNU General Public License
  12. // as published by the Free Software Foundation; either version 2
  13. // of the License, or (at your option) any later version.
  14. #ifndef _GLOBULAR_H_
  15. #define _GLOBULAR_H_
  16. #include <celengine/deepskyobj.h>
  17. struct GBlob
  18. {
  19.     Point3f        position;
  20.     unsigned int   colorIndex;
  21.     float          radius_2d;
  22. };
  23. struct GlobularForm
  24. {
  25.     std::vector<GBlob>* gblobs;
  26.     Vec3f scale;
  27. };
  28. class Globular : public DeepSkyObject
  29. {
  30.  public:
  31.   Globular();
  32.     virtual const char* getType() const;
  33.     virtual void setType(const std::string&);
  34.     virtual size_t getDescription(char* buf, size_t bufLength) const;
  35.     virtual std::string getCustomTmpName() const;
  36.     virtual void setCustomTmpName(const std::string&);
  37.     float getDetail() const;
  38.     void  setDetail(float);
  39.     float getCoreRadius() const;
  40.     void  setCoreRadius(const float);
  41. void  setConcentration(const float);
  42. float getConcentration() const;
  43. float getHalfMassRadius() const;
  44.     unsigned int cSlot(float) const;
  45.     
  46.     virtual float getBoundingSphereRadius() const { return tidalRadius; }
  47.     
  48.     virtual bool pick(const Ray3d& ray,
  49.                       double& distanceToPicker,
  50.                       double& cosAngleToBoundCenter) const;
  51.     virtual bool load(AssociativeArray*, const std::string&);
  52.     virtual void render(const GLContext& context,
  53.                         const Vec3f& offset,
  54.                         const Quatf& viewerOrientation,
  55.                         float brightness,
  56.                         float pixelSize);
  57.     virtual void renderGlobularPointSprites(const GLContext& context,
  58.                                           const Vec3f& offset,
  59.                                           const Quatf& viewerOrientation,
  60.                                           float brightness,
  61.                                           float pixelSize);
  62. GlobularForm* getForm() const;
  63.     virtual unsigned int getRenderMask() const;
  64.     virtual unsigned int getLabelMask() const;
  65.     virtual const char* getObjTypeName() const;
  66.     
  67.  private:
  68.     void recomputeTidalRadius();
  69.     
  70.  private:
  71.     float detail; 
  72.     std::string* customTmpName;     
  73.     GlobularForm* form;    
  74.   float r_c;
  75.     float c;  
  76.     float tidalRadius;
  77. };
  78. #endif // _GLOBULAR_H_