Files
ogre-prototype/water/water.h
2025-07-04 01:10:08 +03:00

46 lines
1.3 KiB
C++

#ifndef MAT_WATER_H
#define MAT_WATER_H
#include <Ogre.h>
class App;
class Water : public Ogre::FrameListener, Ogre::RenderTargetListener {
Ogre::SceneManager *mScnMgr;
Ogre::RenderWindow * mWindow;
Ogre::SceneNode *mWaterNode, *mCameraNode;
Ogre::Vector3 mCameraPosition;
Ogre::Camera *mCamera;
Ogre::Plane mWaterPlane,
mReflectionPlane,
mReflectionClipPlaneAbove,
mReflectionClipPlaneBelow,
mRefractionClipPlaneAbove,
mRefractionClipPlaneBelow;
bool mAbove;
std::vector<Ogre::Entity *> mWaterMeshes;
// Reflection
Ogre::RenderTexture * mReflectionTexture;
Ogre::Camera * mReflectionCamera;
// Refraction
Ogre::RenderTexture * mRefractionTexture;
Ogre::Camera * mRefractionCamera;
bool mInRefTexUpdate;
Ogre::Timer mtexture_dump;
void create_cameras();
public:
Water();
virtual ~Water();
void create_textures();
void dump_textures();
void createWater(Ogre::RenderWindow * window, Ogre::Camera *camera);
void init();
void updateWater(float delta);
bool frameEnded(const Ogre::FrameEvent &evt) override;
bool frameRenderingQueued(const Ogre::FrameEvent &evt) override;
void preRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override;
void
postRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override;
void add_submerged_entity(Ogre::Entity *ent);
void add_surface_entity(Ogre::Entity *ent);
};
#endif