//****************************************************************************** /// /// @file core/scene/atmosphere.h /// /// Declarations related to atmospheric effets and sky spheres. /// /// @copyright /// @parblock /// /// Persistence of Vision Ray Tracer ('POV-Ray') version 3.8. /// Copyright 1991-2018 Persistence of Vision Raytracer Pty. Ltd. /// /// POV-Ray is free software: you can redistribute it and/or modify /// it under the terms of the GNU Affero General Public License as /// published by the Free Software Foundation, either version 3 of the /// License, or (at your option) any later version. /// /// POV-Ray is distributed in the hope that it will be useful, /// but WITHOUT ANY WARRANTY; without even the implied warranty of /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the /// GNU Affero General Public License for more details. /// /// You should have received a copy of the GNU Affero General Public License /// along with this program. If not, see . /// /// ---------------------------------------------------------------------------- /// /// POV-Ray is based on the popular DKB raytracer version 2.12. /// DKBTrace was originally written by David K. Buck. /// DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins. /// /// @endparblock /// //****************************************************************************** #ifndef POVRAY_CORE_ATMOSPHERE_H #define POVRAY_CORE_ATMOSPHERE_H // Module config header file must be the first file included within POV-Ray unit header files #include "core/configcore.h" #include "core/material/pigment.h" namespace pov { //############################################################################## /// /// @defgroup PovCoreSceneAtmosphere Atmospheric Effects and Sky Spheres /// @ingroup PovCore /// /// @{ /***************************************************************************** * Global preprocessor defines ******************************************************************************/ /* Define fog types. DMF */ #define ORIG_FOG 1 #define GROUND_MIST 2 #define FOG_TYPES 2 /***************************************************************************** * Global typedefs ******************************************************************************/ typedef struct Fog_Struct FOG; typedef struct Rainbow_Struct RAINBOW; typedef struct Skysphere_Struct SKYSPHERE; struct TurbulenceWarp; // full declaration in core/material/warp.h struct Fog_Struct { Fog_Struct(); ~Fog_Struct(); int Type; DBL Distance; DBL Alt; DBL Offset; TransColour colour; // may have a filter/transmit component Vector3d Up; TurbulenceWarp *Turb; SNGL Turb_Depth; FOG *Next; }; struct Rainbow_Struct { Rainbow_Struct() : Pigment(nullptr), Next(nullptr) {} ~Rainbow_Struct() { if (Pigment) delete Pigment; } DBL Distance; DBL Jitter; DBL Angle, Width; DBL Arc_Angle, Falloff_Angle, Falloff_Width; Vector3d Antisolar_Vector; Vector3d Up_Vector, Right_Vector; PIGMENT *Pigment; RAINBOW *Next; }; struct Skysphere_Struct { Skysphere_Struct() : Trans(nullptr) {} ~Skysphere_Struct(); MathColour Emission; ///< Brightness adjustment. vector Pigments; ///< Pigment(s) to use. TRANSFORM * Trans; ///< Skysphere transformation. }; /***************************************************************************** * Global functions ******************************************************************************/ FOG *Create_Fog (void); FOG *Copy_Fog (const FOG *Fog); void Destroy_Fog (FOG *Fog); RAINBOW *Create_Rainbow (void); RAINBOW *Copy_Rainbow (const RAINBOW *Rainbow); void Destroy_Rainbow (RAINBOW *Rainbow); SKYSPHERE *Create_Skysphere (void); SKYSPHERE *Copy_Skysphere (const SKYSPHERE *Skysphere); void Destroy_Skysphere (SKYSPHERE *Skysphere); void Scale_Skysphere (SKYSPHERE *Skysphere, const Vector3d& Vector); void Rotate_Skysphere (SKYSPHERE *Skysphere, const Vector3d& Vector); void Translate_Skysphere (SKYSPHERE *Skysphere, const Vector3d& Vector); void Transform_Skysphere (SKYSPHERE *Skysphere, const TRANSFORM *Trans); /// @} /// //############################################################################## } #endif // POVRAY_CORE_ATMOSPHERE_H