Rigs of Rods 2023.09
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
GfxWater.h
Go to the documentation of this file.
1/*
2 This source file is part of Rigs of Rods
3 Copyright 2005-2012 Pierre-Michel Ricordel
4 Copyright 2007-2012 Thomas Fischer
5 Copyright 2013-2020 Petr Ohlidal
6
7 For more information, see http://www.rigsofrods.org/
8
9 Rigs of Rods is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License version 3, as
11 published by the Free Software Foundation.
12
13 Rigs of Rods is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22#pragma once
23
24#include "IGfxWater.h"
25#include "Application.h"
26
27#include <OgreHardwareVertexBuffer.h> // Ogre::HardwareVertexBufferSharedPtr
28#include <OgreMesh.h>
29#include <OgrePlane.h>
30#include <OgreRenderTargetListener.h>
31#include <OgreTexture.h>
32#include <OgreVector3.h>
33#include <vector>
34
35namespace RoR {
36
39
40class GfxWater : public IGfxWater
41{
42public:
43
44 GfxWater(Ogre::Vector3 terrn_size, float initial_water_height);
45 ~GfxWater();
46
47 void SetWaterBottomHeight(float value) override;
48 void SetWaterVisible(bool value) override;
49 void SetReflectionPlaneHeight(float centerheight) override;
50 void UpdateReflectionPlane(float h) override;
51 void WaterPrepareShutdown() override;
52 void UpdateWater() override;
53 void FrameStepWater(float dt) override;
54 void SetForcedCameraTransform(Ogre::Radian fovy, Ogre::Vector3 pos, Ogre::Quaternion rot) override;
55 void ClearForcedCameraTransform() override;
56
57private:
58
59 struct ReflectionListener: Ogre::RenderTargetListener
60 {
62
63 void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
64 void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
65
66 Ogre::SceneManager* scene_mgr;
67 Ogre::Entity* waterplane_entity;
68 };
69
70 struct RefractionListener: Ogre::RenderTargetListener
71 {
73
74 void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
75 void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
76
77 Ogre::SceneManager* scene_mgr;
78 Ogre::Entity* waterplane_entity;
79 };
80
81 void ShowWave(Ogre::Vector3 refpos);
82 bool IsCameraUnderWater();
83 void PrepareWater();
84
85 bool m_water_visible = true;
87 float m_bottom_height = 0.f;
90 Ogre::Vector3 m_map_size = Ogre::Vector3::ZERO;
91 Ogre::Plane m_water_plane;
92 Ogre::MeshPtr m_waterplane_mesh;
93 Ogre::Entity* m_waterplane_entity = nullptr;
94 Ogre::SceneNode* m_waterplane_node = nullptr;
95 Ogre::HardwareVertexBufferSharedPtr m_waterplane_vert_buf;
98 Ogre::Plane m_reflect_plane;
99 Ogre::Plane m_refract_plane;
102 Ogre::Camera* m_reflect_cam = nullptr;
103 Ogre::Camera* m_refract_cam = nullptr;
104 Ogre::RenderTexture* m_refract_rtt_target = nullptr;
105 Ogre::RenderTexture* m_reflect_rtt_target = nullptr;
106 Ogre::TexturePtr m_refract_rtt_texture;
107 Ogre::TexturePtr m_reflect_rtt_texture;
108 Ogre::Viewport* m_refract_rtt_viewport = nullptr;
109 Ogre::Viewport* m_reflect_rtt_viewport = nullptr;
110 Ogre::SceneNode* m_bottomplane_node = nullptr;
111 Ogre::Plane m_bottom_plane;
112
113 // Forced camera transforms, used by UpdateWater()
114 bool m_cam_forced = false;
115 Ogre::Radian m_cam_forced_fovy = Ogre::Radian(0.f);
116 Ogre::Vector3 m_cam_forced_position = Ogre::Vector3::ZERO;
117 Ogre::Quaternion m_cam_forced_orientation = Ogre::Quaternion::IDENTITY;
118};
119
121
122} // namespace RoR
Central state/object manager and communications hub.
void ShowWave(Ogre::Vector3 refpos)
Definition GfxWater.cpp:319
void SetForcedCameraTransform(Ogre::Radian fovy, Ogre::Vector3 pos, Ogre::Quaternion rot) override
Definition GfxWater.cpp:500
Ogre::RenderTexture * m_refract_rtt_target
Definition GfxWater.h:104
Ogre::Vector3 m_cam_forced_position
Definition GfxWater.h:116
Ogre::Plane m_refract_plane
Definition GfxWater.h:99
Ogre::RenderTexture * m_reflect_rtt_target
Definition GfxWater.h:105
float * m_waterplane_vert_buf_local
Definition GfxWater.h:96
Ogre::TexturePtr m_refract_rtt_texture
Definition GfxWater.h:106
Ogre::HardwareVertexBufferSharedPtr m_waterplane_vert_buf
Definition GfxWater.h:95
void UpdateWater() override
Definition GfxWater.cpp:364
Ogre::Vector3 m_map_size
Definition GfxWater.h:90
float m_waterplane_mesh_scale
Definition GfxWater.h:88
bool m_cam_forced
Definition GfxWater.h:114
float m_visual_water_height
Definition GfxWater.h:86
int m_frame_counter
Definition GfxWater.h:89
Ogre::SceneNode * m_bottomplane_node
Definition GfxWater.h:110
Ogre::Radian m_cam_forced_fovy
Definition GfxWater.h:115
bool m_water_visible
Definition GfxWater.h:85
Ogre::Plane m_bottom_plane
Definition GfxWater.h:111
void SetWaterBottomHeight(float value) override
Definition GfxWater.cpp:451
Ogre::Entity * m_waterplane_entity
Definition GfxWater.h:93
ReflectionListener m_reflect_listener
Definition GfxWater.h:100
void SetReflectionPlaneHeight(float centerheight) override
Definition GfxWater.cpp:310
Ogre::Viewport * m_refract_rtt_viewport
Definition GfxWater.h:108
void PrepareWater()
Definition GfxWater.cpp:127
bool IsCameraUnderWater()
Definition GfxWater.cpp:357
Ogre::Plane m_reflect_plane
Definition GfxWater.h:98
void WaterPrepareShutdown() override
Definition GfxWater.cpp:443
RefractionListener m_refract_listener
Definition GfxWater.h:101
Ogre::Quaternion m_cam_forced_orientation
Definition GfxWater.h:117
void ClearForcedCameraTransform() override
Definition GfxWater.cpp:508
void SetWaterVisible(bool value) override
Definition GfxWater.cpp:299
void FrameStepWater(float dt) override
Definition GfxWater.cpp:487
Ogre::Plane m_water_plane
Definition GfxWater.h:91
Ogre::Camera * m_refract_cam
Definition GfxWater.h:103
bool m_waterplane_force_update_pos
Definition GfxWater.h:97
float m_bottom_height
Definition GfxWater.h:87
Ogre::Viewport * m_reflect_rtt_viewport
Definition GfxWater.h:109
void UpdateReflectionPlane(float h) override
Definition GfxWater.cpp:456
Ogre::Camera * m_reflect_cam
Definition GfxWater.h:102
Ogre::TexturePtr m_reflect_rtt_texture
Definition GfxWater.h:107
Ogre::MeshPtr m_waterplane_mesh
Definition GfxWater.h:92
Ogre::SceneNode * m_waterplane_node
Definition GfxWater.h:94
void postRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
Definition GfxWater.cpp:540
Ogre::SceneManager * scene_mgr
Definition GfxWater.h:66
void preRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
Definition GfxWater.cpp:534
void preRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
Definition GfxWater.cpp:520
void postRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
Definition GfxWater.cpp:527
Ogre::SceneManager * scene_mgr
Definition GfxWater.h:77