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

OpenGL

开发平台:

Visual C++

  1. // referencemark.h
  2. //
  3. // ReferenceMark base class.
  4. //
  5. // Copyright (C) 2008, the Celestia Development Team
  6. // Initial version by Chris Laurel, claurel@gmail.com
  7. //
  8. // This program is free software; you can redistribute it and/or
  9. // modify it under the terms of the GNU General Public License
  10. // as published by the Free Software Foundation; either version 2
  11. // of the License, or (at your option) any later version.
  12. #ifndef _CELENGINE_REFERENCEMARK_H_
  13. #define _CELENGINE_REFERENCEMARK_H_
  14. #include <string>
  15. #include <celmath/vecmath.h>
  16. class Renderer;
  17. /*! Reference marks give additional visual information about the
  18.  *  position and orientation of a solar system body. Items such as
  19.  *  axis arrows and planetographic grids are examples of reference
  20.  *  marks in Celestia.
  21.  *
  22.  *  ReferenceMark is an abstract base class. Subclasses must implement
  23.  *  the methods render() and boundingSphereRadius(). They may optionally
  24.  *  override the isOpaque method, which by default returns true. If a
  25.  *  subclass draws translucent geometry but doesn't override isOpaque to
  26.  *  return false, the translucent parts may not be properly depth sorted.
  27.  */
  28. class ReferenceMark
  29. {
  30.  public:
  31.     ReferenceMark() {};
  32.     virtual ~ReferenceMark() {};
  33.     /*! Draw the reference mark geometry at the specified time.
  34.      */
  35.     virtual void render(Renderer* renderer,
  36.                         const Point3f& position,
  37.                         float discSizeInPixels,
  38.                         double tdb) const = 0;
  39.     /*! Return the radius of a bounding sphere (in kilometers) large enough
  40.      *  to contain the reference mark geometry.
  41.      */
  42.     virtual float boundingSphereRadius() const = 0;
  43.     /*! Return true if the reference mark contains no translucent geometry.
  44.      *  The default implementation always returns true (i.e. completely
  45.      *  opaque geometry is assumed.)
  46.      */
  47.     virtual bool isOpaque() const { return true; }
  48.     void setTag(const std::string& _tag)
  49.     {
  50.         tag = _tag;
  51.     }
  52.     const std::string& getTag() const
  53.     {
  54.         return tag;
  55.     }
  56. private:
  57.     std::string tag;
  58. };
  59. #endif // _CELENGINE_REFERENCEMARK_H_