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

OpenGL

开发平台:

Visual C++

  1. // atmosphere.h
  2. //
  3. // Copyright (C) 2001 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 _ATMOSPHERE_H_
  10. #define _ATMOSPHERE_H_
  11. #include <celutil/reshandle.h>
  12. #include <celutil/color.h>
  13. #include <celmath/vecmath.h>
  14. #include <celengine/multitexture.h>
  15. class Atmosphere
  16. {
  17.  public:
  18.     Atmosphere() :
  19.         height(0.0f),
  20.         lowerColor(0.0f, 0.0f, 0.0f),
  21.         upperColor(0.0f, 0.0f, 0.0f),
  22.         skyColor(0.0f, 0.0f, 0.0f),
  23.         sunsetColor(1.0f, 0.6f, 0.5f),
  24.         cloudHeight(0.0f),
  25.         cloudSpeed(0.0f),
  26.         cloudTexture(),
  27.         cloudNormalMap(),
  28.         mieCoeff(0.0f),
  29.         mieScaleHeight(0.0f),
  30.         miePhaseAsymmetry(0.0f),
  31.         rayleighCoeff(0.0f, 0.0f, 0.0f),
  32.         rayleighScaleHeight(0.0f),
  33.         absorptionCoeff(0.0f, 0.0f, 0.0f),
  34.         cloudShadowDepth(0.0f)
  35.     {};
  36.  public:
  37.     float height;
  38.     Color lowerColor;
  39.     Color upperColor;
  40.     Color skyColor;
  41.     Color sunsetColor;
  42.         
  43.     float cloudHeight;
  44.     float cloudSpeed;
  45.     MultiResTexture cloudTexture;
  46.     MultiResTexture cloudNormalMap;
  47.     
  48.     float mieCoeff;
  49.     float mieScaleHeight;
  50.     float miePhaseAsymmetry;
  51.     Vec3f rayleighCoeff;
  52.     float rayleighScaleHeight;
  53.     Vec3f absorptionCoeff;
  54.     float cloudShadowDepth;
  55. };
  56. // Atmosphere density is modeled with a exp(-y/H) falloff, where
  57. // H is the scale height of the atmosphere. Thus atmospheres have
  58. // infinite extent, but we still need to choose some finite sphere
  59. // to render. The radius of the sphere is the height at which the
  60. // density of the atmosphere falls to the extinction threshold, i.e.
  61. // -H * ln(extinctionThreshold)
  62. extern const double AtmosphereExtinctionThreshold;
  63. #endif // _ATMOSPHERE_H_