BVB Source Codes

CRYENGINE Show FogVolumeRenderNode.h Source code

Return Download CRYENGINE: download FogVolumeRenderNode.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef _FOGVOLUME_RENDERNODE_
  4. #define _FOGVOLUME_RENDERNODE_
  5.  
  6. #pragma once
  7.  
  8. class CREFogVolume;
  9.  
  10. class CFogVolumeRenderNode : public IFogVolumeRenderNode, public Cry3DEngineBase
  11. {
  12. public:
  13.         static void StaticReset();
  14.  
  15.         static void SetTraceableArea(const AABB& traceableArea, const SRenderingPassInfo& passInfo);
  16.         static void TraceFogVolumes(const Vec3& worldPos, ColorF& fogColor, const SRenderingPassInfo& passInfo);
  17.  
  18. public:
  19.         CFogVolumeRenderNode();
  20.  
  21.         // implements IFogVolumeRenderNode
  22.         virtual void            SetFogVolumeProperties(const SFogVolumeProperties& properties);
  23.         virtual const Matrix34& GetMatrix() const;
  24.  
  25.         virtual void            FadeGlobalDensity(float fadeTime, float newGlobalDensity);
  26.  
  27.         // implements IRenderNode
  28.         virtual void             GetLocalBounds(AABB& bbox);
  29.         virtual void             SetMatrix(const Matrix34& mat);
  30.  
  31.         virtual EERType          GetRenderNodeType();
  32.         virtual const char*      GetEntityClassName() const;
  33.         virtual const char*      GetName() const;
  34.         virtual Vec3             GetPos(bool bWorldOnly = true) const;
  35.         virtual void             Render(const SRendParams& rParam, const SRenderingPassInfo& passInfo);
  36.         virtual IPhysicalEntity* GetPhysics() const;
  37.         virtual void             SetPhysics(IPhysicalEntity*);
  38.         virtual void             SetMaterial(IMaterial* pMat);
  39.         virtual IMaterial*       GetMaterial(Vec3* pHitPos) const;
  40.         virtual IMaterial*       GetMaterialOverride() { return NULL; }
  41.         virtual float            GetMaxViewDist();
  42.         virtual void             GetMemoryUsage(ICrySizer* pSizer) const;
  43.         virtual const AABB       GetBBox() const             { return m_WSBBox; }
  44.         virtual void             SetBBox(const AABB& WSBBox) { m_WSBBox = WSBBox; }
  45.         virtual void             FillBBox(AABB& aabb);
  46.         virtual void             OffsetPosition(const Vec3& delta);
  47.  
  48.         ILINE bool               IsAffectsThisAreaOnly() const { return m_affectsThisAreaOnly; }
  49.  
  50. private:
  51.         static void RegisterFogVolume(const CFogVolumeRenderNode* pFogVolume);
  52.         static void UnregisterFogVolume(const CFogVolumeRenderNode* pFogVolume);
  53.  
  54. private:
  55.         ~CFogVolumeRenderNode();
  56.  
  57.         void        UpdateFogVolumeMatrices();
  58.         void        UpdateWorldSpaceBBox();
  59.         void        UpdateHeightFallOffBasePoint();
  60.  
  61.         ColorF      GetFogColor() const;
  62.         Vec2        GetSoftEdgeLerp(const Vec3& viewerPosOS) const;
  63.         bool        IsViewerInsideVolume(const SRenderingPassInfo& passInfo) const;
  64.  
  65.         void        GetVolumetricFogColorEllipsoid(const Vec3& worldPos, const SRenderingPassInfo& passInfo, ColorF& resultColor) const;
  66.         void        GetVolumetricFogColorBox(const Vec3& worldPos, const SRenderingPassInfo& passInfo, ColorF& resultColor) const;
  67.  
  68.         static void ForceTraceableAreaUpdate();
  69.  
  70. private:
  71.         struct SCachedFogVolume
  72.         {
  73.                 SCachedFogVolume() : m_pFogVol(0), m_distToCenterSq(0) {}
  74.  
  75.                 SCachedFogVolume(const CFogVolumeRenderNode* pFogVol, float distToCenterSq)
  76.                         : m_pFogVol(pFogVol)
  77.                         , m_distToCenterSq(distToCenterSq)
  78.                 {
  79.                 }
  80.  
  81.                 bool operator<(const SCachedFogVolume& rhs) const
  82.                 {
  83.                         return m_distToCenterSq > rhs.m_distToCenterSq;
  84.                 }
  85.  
  86.                 const CFogVolumeRenderNode* m_pFogVol;
  87.                 float                       m_distToCenterSq;
  88.         };
  89.  
  90.         typedef std::vector<SCachedFogVolume>         CachedFogVolumes;
  91.         typedef std::set<const CFogVolumeRenderNode*> GlobalFogVolumeMap;
  92.  
  93.         static AABB               s_tracableFogVolumeArea;
  94.         static CachedFogVolumes   s_cachedFogVolumes;
  95.         static GlobalFogVolumeMap s_globalFogVolumeMap;
  96.         static bool               s_forceTraceableAreaUpdate;
  97.  
  98.         struct SFader
  99.         {
  100.                 SFader()
  101.                         : m_startTime(0)
  102.                         , m_endTime(0)
  103.                         , m_startValue(0)
  104.                         , m_endValue(0)
  105.                 {
  106.                 }
  107.  
  108.                 void Set(float startTime, float endTime, float startValue, float endValue)
  109.                 {
  110.                         m_startTime = startTime;
  111.                         m_endTime = endTime;
  112.                         m_startValue = startValue;
  113.                         m_endValue = endValue;
  114.                 }
  115.  
  116.                 void SetInvalid()
  117.                 {
  118.                         Set(0, 0, 0, 0);
  119.                 }
  120.  
  121.                 bool IsValid()
  122.                 {
  123.                         return m_startTime >= 0 && m_endTime > m_startTime && m_startValue != m_endValue;
  124.                 }
  125.  
  126.                 bool IsTimeInRange(float time)
  127.                 {
  128.                         return time >= m_startTime && time <= m_endTime;
  129.                 }
  130.  
  131.                 float GetValue(float time)
  132.                 {
  133.                         float t = clamp_tpl((time - m_startTime) / (m_endTime - m_startTime), 0.0f, 1.0f);
  134.                         return m_startValue + t * (m_endValue - m_startValue);
  135.                 }
  136.  
  137.         private:
  138.                 float m_startTime;
  139.                 float m_endTime;
  140.                 float m_startValue;
  141.                 float m_endValue;
  142.         };
  143.  
  144. private:
  145.         Matrix34              m_matNodeWS;
  146.  
  147.         Matrix34              m_matWS;
  148.         Matrix34              m_matWSInv;
  149.  
  150.         int                   m_volumeType;
  151.         Vec3                  m_pos;
  152.         Vec3                  m_x;
  153.         Vec3                  m_y;
  154.         Vec3                  m_z;
  155.         Vec3                  m_scale;
  156.  
  157.         float                 m_globalDensity;
  158.         float                 m_densityOffset;
  159.         float                 m_nearCutoff;
  160.         float                 m_fHDRDynamic;
  161.         float                 m_softEdges;
  162.         ColorF                m_color;
  163.         bool                  m_useGlobalFogColor;
  164.         bool                  m_affectsThisAreaOnly;
  165.         Vec3                  m_rampParams;
  166.         uint32                m_updateFrameID;
  167.         float                 m_windInfluence;
  168.         Vec3                  m_windOffset;
  169.         float                 m_noiseElapsedTime;
  170.         float                 m_densityNoiseScale;
  171.         float                 m_densityNoiseOffset;
  172.         float                 m_densityNoiseTimeFrequency;
  173.         Vec3                  m_densityNoiseFrequency;
  174.         Vec3                  m_emission;
  175.  
  176.         Vec3                  m_heightFallOffDir;
  177.         Vec3                  m_heightFallOffDirScaled;
  178.         Vec3                  m_heightFallOffShift;
  179.         Vec3                  m_heightFallOffBasePoint;
  180.  
  181.         AABB                  m_localBounds;
  182.  
  183.         SFader                m_globalDensityFader;
  184.  
  185.         _smart_ptr<IMaterial> m_pMatFogVolEllipsoid;
  186.         _smart_ptr<IMaterial> m_pMatFogVolBox;
  187.  
  188.         CREFogVolume*         m_pFogVolumeRenderElement[RT_COMMAND_BUF_COUNT];
  189.         AABB                  m_WSBBox;
  190.  
  191.         Vec2                  m_cachedSoftEdgesLerp;
  192.         ColorF                m_cachedFogColor;
  193. };
  194.  
  195. #endif // #ifndef _FOGVOLUME_RENDERNODE_
  196.  
downloadFogVolumeRenderNode.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top