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

OpenGL

开发平台:

Visual C++

  1. // deepskyobj.h
  2. //
  3. // Copyright (C) 2003, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _CELENGINE_DEEPSKYOBJ_H_
  10. #define _CELENGINE_DEEPSKYOBJ_H_
  11. #include <vector>
  12. #include <string>
  13. #include <iostream>
  14. #include <celutil/basictypes.h>
  15. #include <celmath/quaternion.h>
  16. #include <celmath/ray.h>
  17. #include <celengine/glcontext.h>
  18. #include <celengine/parser.h>
  19. extern const float DSO_DEFAULT_ABS_MAGNITUDE;
  20. class Nebula;
  21. class Galaxy;
  22. class Globular;
  23. class OpenCluster;
  24. class DeepSkyObject
  25. {
  26.  public:
  27.     DeepSkyObject();
  28.     virtual ~DeepSkyObject();
  29.     inline uint32 getCatalogNumber() const
  30.     {
  31.         return catalogNumber;
  32.     }
  33.     void setCatalogNumber(uint32);
  34.     Point3d getPosition() const;
  35.     void setPosition(const Point3d&);
  36.     
  37. static void hsv2rgb( float*, float*, float*, float, float, float);
  38.     
  39. virtual const char* getType() const = 0;
  40.     virtual void setType(const std::string&) = 0;
  41.     virtual size_t getDescription(char* buf, size_t bufLength) const;
  42.     Quatf getOrientation() const;
  43.     void setOrientation(const Quatf&);
  44.     /*! Return the radius of a bounding sphere large enough to contain the object.
  45.      *  For correct rendering, all of the geometry must fit within this sphere radius.
  46.      *  DSO subclasses an alternate radius that more closely matches the conventional
  47.      *  astronomical definition for the size of the object (e.g. mu25 isophote radius.)
  48.      */
  49.     virtual float getBoundingSphereRadius() const { return radius; }
  50.     /*! Return the radius of the object. This radius will be displayed in the UI and
  51.      *  should match the conventional astronomical definition of the object size.
  52.      */    
  53.     float getRadius() const { return radius; }
  54.     void setRadius(float r);
  55.     virtual float getHalfMassRadius() const { return radius; }
  56.     
  57.     float getAbsoluteMagnitude() const;
  58.     void setAbsoluteMagnitude(float);
  59.     std::string getInfoURL() const;
  60.     void setInfoURL(const std::string&);
  61.     bool isVisible() const { return visible; }
  62.     void setVisible(bool _visible) { visible = _visible; }
  63.     bool isClickable() const { return clickable; }
  64.     void setClickable(bool _clickable) { clickable = _clickable; }
  65.     
  66. virtual const char* getObjTypeName() const = 0;
  67.     virtual bool pick(const Ray3d& ray,
  68.                       double& distanceToPicker,
  69.                       double& cosAngleToBoundCenter) const = 0;
  70.     virtual bool load(AssociativeArray*, const std::string& resPath);
  71.     virtual void render(const GLContext& context,
  72.                         const Vec3f& offset,
  73.                         const Quatf& viewerOrientation,
  74.                         float brightness,
  75.                         float pixelSize) = 0;
  76.     virtual unsigned int getRenderMask() const { return 0; }
  77.     virtual unsigned int getLabelMask() const { return 0; }
  78.     enum
  79.     {
  80.         InvalidCatalogNumber = 0xffffffff
  81.     };
  82.  private:
  83.     uint32       catalogNumber;
  84.     Point3d      position;
  85.     Quatf        orientation;
  86.     float        radius;
  87.     float        absMag;
  88.     std::string* infoURL;
  89.     
  90.     bool visible : 1;
  91.     bool clickable : 1;
  92. };
  93. typedef std::vector<DeepSkyObject*> DeepSkyCatalog;
  94. int LoadDeepSkyObjects(DeepSkyCatalog&, std::istream& in,
  95.                        const std::string& path);
  96. #endif // _CELENGINE_DEEPSKYOBJ_H_