BVB Source Codes

CRYENGINE Show WaterVolumeRenderNode.h Source code

Return Download CRYENGINE: download WaterVolumeRenderNode.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef _WATERVOLUME_RENDERNODE_
  4. #define _WATERVOLUME_RENDERNODE_
  5.  
  6. #pragma once
  7.  
  8. #include <CryRenderer/VertexFormats.h>
  9.  
  10. struct SWaterVolumeSerialize
  11. {
  12.         // volume type and id
  13.         int32  m_volumeType;
  14.         uint64 m_volumeID;
  15.  
  16.         // material
  17.         IMaterial* m_pMaterial;
  18.  
  19.         // fog properties
  20.         f32   m_fogDensity;
  21.         Vec3  m_fogColor;
  22.         bool  m_fogColorAffectedBySun;
  23.         Plane m_fogPlane;
  24.         f32   m_fogShadowing;
  25.  
  26.         f32   m_volumeDepth;
  27.         f32   m_streamSpeed;
  28.         bool  m_capFogAtVolumeDepth;
  29.  
  30.         // caustic properties
  31.         bool m_caustics;
  32.         f32  m_causticIntensity;
  33.         f32  m_causticTiling;
  34.         f32  m_causticHeight;
  35.  
  36.         // render geometry
  37.         f32                  m_uTexCoordBegin;
  38.         f32                  m_uTexCoordEnd;
  39.         f32                  m_surfUScale;
  40.         f32                  m_surfVScale;
  41.         typedef std::vector<Vec3> VertexArraySerialize;
  42.         VertexArraySerialize m_vertices;
  43.  
  44.         // physics properties
  45.         typedef std::vector<Vec3> PhysicsAreaContourSerialize;
  46.         PhysicsAreaContourSerialize m_physicsAreaContour;
  47.  
  48.         void                        GetMemoryUsage(ICrySizer* pSizer) const
  49.         {
  50.                 pSizer->AddObject(this, sizeof(*this));
  51.                 pSizer->AddObject(m_vertices);
  52.                 pSizer->AddObject(m_physicsAreaContour);
  53.         }
  54. };
  55.  
  56. struct SWaterVolumePhysAreaInput
  57. {
  58.         typedef std::vector<Vec3> PhysicsVertices;
  59.         typedef std::vector<int>  PhysicsIndices;
  60.  
  61.         PhysicsVertices m_contour;
  62.         PhysicsVertices m_flowContour;
  63.         PhysicsIndices  m_indices;
  64.  
  65.         void            GetMemoryUsage(ICrySizer* pSizer) const
  66.         {
  67.                 pSizer->AddObject(this, sizeof(*this));
  68.                 pSizer->AddObject(m_contour);
  69.                 pSizer->AddObject(m_flowContour);
  70.                 pSizer->AddObject(m_indices);
  71.         }
  72. };
  73.  
  74. class CWaterVolumeRenderNode : public IWaterVolumeRenderNode, public Cry3DEngineBase
  75. {
  76. public:
  77.         // implements IWaterVolumeRenderNode
  78.         virtual void             SetAreaAttachedToEntity();
  79.  
  80.         virtual void             SetFogDensity(float fogDensity);
  81.         virtual float            GetFogDensity() const;
  82.         virtual void             SetFogColor(const Vec3& fogColor);
  83.         virtual void             SetFogColorAffectedBySun(bool enable);
  84.         virtual void             SetFogShadowing(float fogShadowing);
  85.  
  86.         virtual void             SetCapFogAtVolumeDepth(bool capFog);
  87.         virtual void             SetVolumeDepth(float volumeDepth);
  88.         virtual void             SetStreamSpeed(float streamSpeed);
  89.  
  90.         virtual void             SetCaustics(bool caustics);
  91.         virtual void             SetCausticIntensity(float causticIntensity);
  92.         virtual void             SetCausticTiling(float causticTiling);
  93.         virtual void             SetCausticHeight(float causticHeight);
  94.         virtual void             SetAuxPhysParams(pe_params_area* pa) { m_auxPhysParams = *pa; if (m_pPhysArea) m_pPhysArea->SetParams(pa); }
  95.  
  96.         virtual void             CreateOcean(uint64 volumeID, /* TBD */ bool keepSerializationParams = false);
  97.         virtual void             CreateArea(uint64 volumeID, const Vec3* pVertices, unsigned int numVertices, const Vec2& surfUVScale, const Plane& fogPlane, bool keepSerializationParams = false, int nSID = GetDefSID());
  98.         virtual void             CreateRiver(uint64 volumeID, const Vec3* pVertices, unsigned int numVertices, float uTexCoordBegin, float uTexCoordEnd, const Vec2& surfUVScale, const Plane& fogPlane, bool keepSerializationParams = false, int nSID = GetDefSID());
  99.  
  100.         virtual void             SetAreaPhysicsArea(const Vec3* pVertices, unsigned int numVertices, bool keepSerializationParams = false);
  101.         virtual void             SetRiverPhysicsArea(const Vec3* pVertices, unsigned int numVertices, bool keepSerializationParams = false);
  102.  
  103.         virtual IPhysicalEntity* SetAndCreatePhysicsArea(const Vec3* pVertices, unsigned int numVertices);
  104.         void                     SyncToPhysMesh(const QuatT& qtSurface, IGeometry* pSurface, float depth);
  105.  
  106.         // implements IRenderNode
  107.         virtual EERType          GetRenderNodeType();
  108.         virtual const char*      GetEntityClassName() const;
  109.         virtual const char*      GetName() const;
  110.         virtual void             SetMatrix(const Matrix34& mat);
  111.         virtual Vec3             GetPos(bool bWorldOnly = true) const;
  112.         virtual void             Render(const SRendParams& rParam, const SRenderingPassInfo& passInfo);
  113.         virtual void             SetMaterial(IMaterial* pMat);
  114.         virtual IMaterial*       GetMaterial(Vec3* pHitPos) const;
  115.         virtual IMaterial*       GetMaterialOverride() { return m_pMaterial; }
  116.         virtual float            GetMaxViewDist();
  117.         virtual void             GetMemoryUsage(ICrySizer* pSizer) const;
  118.         virtual void             Precache();
  119.  
  120.         virtual IPhysicalEntity* GetPhysics() const;
  121.         virtual void             SetPhysics(IPhysicalEntity*);
  122.  
  123.         virtual void             CheckPhysicalized();
  124.         virtual void             Physicalize(bool bInstant = false);
  125.         virtual void             Dephysicalize(bool bKeepIfReferenced = false);
  126.  
  127.         virtual const AABB       GetBBox() const
  128.         {
  129.                 AABB WSBBox = m_WSBBox;
  130.                 // Expand bounding box upwards while using caustics to avoid clipping the caustics when the volume goes out of view.
  131.                 if (m_caustics)
  132.                         WSBBox.max.z += m_causticHeight;
  133.                 return WSBBox;
  134.         }
  135.  
  136.         virtual void         SetBBox(const AABB& WSBBox) { m_WSBBox = WSBBox; }
  137.         virtual void         FillBBox(AABB& aabb);
  138.         virtual void         OffsetPosition(const Vec3& delta);
  139.  
  140.         virtual void         SetLayerId(uint16 nLayerId) { m_nLayerId = nLayerId; Get3DEngine()->C3DEngine::UpdateObjectsLayerAABB(this); }
  141.         virtual uint16       GetLayerId()                { return m_nLayerId; }
  142.  
  143.         void                 Render_JobEntry(SRendParams rParam, SRenderingPassInfo passInfo);
  144.  
  145.         void                 Transform(const Vec3& localOrigin, const Matrix34& l2w);
  146.         virtual IRenderNode* Clone() const;
  147.  
  148. public:
  149.         CWaterVolumeRenderNode();
  150.         const SWaterVolumeSerialize* GetSerializationParams();
  151.         float*                       GetAuxSerializationDataPtr(int& count)
  152.         {
  153.                 // TODO: 'pe_params_area' members between 'volume' and 'growthReserve' are not float only - a member (bConvexBorder) has int type, this should be investigated.
  154.                 count = (offsetof(pe_params_area, growthReserve) - offsetof(pe_params_area, volume)) / sizeof(float) + 1;
  155.                 return &m_auxPhysParams.volume;
  156.         }
  157.  
  158. private:
  159.         typedef std::vector<SVF_P3F_C4B_T2F> WaterSurfaceVertices;
  160.         typedef std::vector<uint16>          WaterSurfaceIndices;
  161.  
  162. private:
  163.         ~CWaterVolumeRenderNode();
  164.  
  165.         float            GetCameraDistToWaterVolumeSurface(const SRenderingPassInfo& passInfo) const;
  166.         float            GetCameraDistSqToWaterVolumeAABB(const SRenderingPassInfo& passInfo) const;
  167.         bool             IsCameraInsideWaterVolumeSurface2D(const SRenderingPassInfo& passInfo) const;
  168.  
  169.         void             UpdateBoundingBox();
  170.  
  171.         void             CopyVolatilePhysicsAreaContourSerParams(const Vec3* pVertices, unsigned int numVertices);
  172.         void             CopyVolatileRiverSerParams(const Vec3* pVertices, unsigned int numVertices, float uTexCoordBegin, float uTexCoordEnd, const Vec2& surfUVScale);
  173.  
  174.         void             CopyVolatileAreaSerParams(const Vec3* pVertices, unsigned int numVertices, const Vec2& surfUVScale);
  175.  
  176.         bool             IsAttachedToEntity() const { return m_attachedToEntity; }
  177.  
  178.         IPhysicalEntity* CreatePhysicsAreaFromSettings();
  179.  
  180. private:
  181.         IWaterVolumeRenderNode::EWaterVolumeType m_volumeType;
  182.         uint64                     m_volumeID;
  183.  
  184.         float                      m_volumeDepth;
  185.         float                      m_streamSpeed;
  186.  
  187.         CREWaterVolume::SParams    m_wvParams[RT_COMMAND_BUF_COUNT];
  188.  
  189.         _smart_ptr<IMaterial>      m_pMaterial;
  190.         _smart_ptr<IMaterial>      m_pWaterBodyIntoMat;
  191.         _smart_ptr<IMaterial>      m_pWaterBodyOutofMat;
  192.  
  193.         CREWaterVolume*            m_pVolumeRE[RT_COMMAND_BUF_COUNT];
  194.         CREWaterVolume*            m_pSurfaceRE[RT_COMMAND_BUF_COUNT];
  195.         SWaterVolumeSerialize*     m_pSerParams;
  196.  
  197.         SWaterVolumePhysAreaInput* m_pPhysAreaInput;
  198.         IPhysicalEntity*           m_pPhysArea;
  199.  
  200.         WaterSurfaceVertices       m_waterSurfaceVertices;
  201.         WaterSurfaceIndices        m_waterSurfaceIndices;
  202.  
  203.         Matrix34                   m_parentEntityWorldTM;
  204.         uint16                     m_nLayerId;
  205.  
  206.         float                      m_fogDensity;
  207.         Vec3                       m_fogColor;
  208.         bool                       m_fogColorAffectedBySun;
  209.         float                      m_fogShadowing;
  210.  
  211.         Plane                      m_fogPlane;
  212.         Plane                      m_fogPlaneBase;
  213.  
  214.         Vec3                       m_vOffset;
  215.         Vec3                       m_center;
  216.         AABB                       m_WSBBox;
  217.  
  218.         bool                       m_capFogAtVolumeDepth;
  219.         bool                       m_attachedToEntity;
  220.         bool                       m_caustics;
  221.  
  222.         float                      m_causticIntensity;
  223.         float                      m_causticTiling;
  224.         float                      m_causticShadow;
  225.         float                      m_causticHeight;
  226.         pe_params_area             m_auxPhysParams;
  227. };
  228.  
  229. #endif // #ifndef _DECAL_RENDERNODE_
  230.  
downloadWaterVolumeRenderNode.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