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

OpenGL

开发平台:

Visual C++

  1. // lightenv.h
  2. //
  3. // Structures that describe the lighting environment for rendering objects
  4. // in Celestia.
  5. //
  6. // Copyright (C) 2006, Chris Laurel <claurel@shatters.net>
  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_LIGHTENV_H_
  13. #define _CELENGINE_LIGHTENV_H_
  14. #include <celutil/color.h>
  15. #include <celmath/vecmath.h>
  16. #include <vector>
  17. static const unsigned int MaxLights = 8;
  18. class DirectionalLight
  19. {
  20. public:
  21.     Color color;
  22.     float irradiance;
  23.     Vec3f direction_eye;
  24.     Vec3f direction_obj;
  25.     // Required for eclipse shadows only--may be able to use
  26.     // distance instead of position.
  27.     Vec3d position;  // position relative to the lit object
  28.     float apparentSize;
  29.     bool castsShadows;
  30. };
  31. class EclipseShadow
  32. {
  33. public:
  34.     Point3f origin;
  35.     Vec3f direction;
  36.     float penumbraRadius;
  37.     float umbraRadius;
  38.     float maxDepth;
  39. };
  40. class LightingState
  41. {
  42. public:
  43.     LightingState() : nLights(0),
  44.                       eyeDir_obj(0.0f, 0.0f, -1.0f),
  45.                       eyePos_obj(0.0f, 0.0f, -1.0f)
  46.     { shadows[0] = NULL; };
  47.     unsigned int nLights;
  48.     DirectionalLight lights[MaxLights];
  49.     std::vector<EclipseShadow>* shadows[MaxLights];
  50.     Vec3f eyeDir_obj;
  51.     Point3f eyePos_obj;
  52.     
  53.     Vec3f ambientColor;
  54. };
  55. #endif // _CELENGINE_LIGHTENV_H_