1 /*
2 -----------------------------------------------------------------------------
3 This source file is part of OGRE
4     (Object-oriented Graphics Rendering Engine)
5 For the latest info, see http://www.ogre3d.org/
6 
7 Copyright (c) 2000-2014 Torus Knot Software Ltd
8 Also see acknowledgements in Readme.html
9 
10 You may use this sample code for anything you like, it is not covered by the
11 same license as the rest of the engine.
12 -----------------------------------------------------------------------------
13 */
14 
15 
16 #ifndef _WATER_MESH_H_
17 #define _WATER_MESH_H_
18 
19 #include "OgrePlatform.h"
20 #include "Ogre.h"
21 
22 using namespace Ogre ;
23 
24 class WaterMesh
25 {
26 private:
27     MeshPtr mesh ;
28     SubMesh *subMesh ;
29     float *vertexBuffers[3] ; // we need 3 vertex buffers
30     int currentBuffNumber ;
31     int complexity ;
32     String meshName ;
33     int numFaces ;
34     int numVertices ;
35     Vector3* vNormals ;
36 
37     HardwareVertexBufferSharedPtr posVertexBuffer ;
38     HardwareVertexBufferSharedPtr normVertexBuffer ;
39     HardwareVertexBufferSharedPtr texcoordsVertexBuffer ;
40     HardwareIndexBufferSharedPtr indexBuffer ;
41 
42     Real lastTimeStamp ;
43     Real lastAnimationTimeStamp;
44     Real lastFrameTime ;
45 
46     void calculateFakeNormals();
47     void calculateNormals();
48 public:
49     WaterMesh(const String& meshName, Real planeSize, int complexity) ;
50 
51     virtual ~WaterMesh ();
52 
53 
54     /** "pushes" a mesh at position [x,y]. Note, that x,y are float, hence
55     *   4 vertices are actually pushed
56     *   @note
57     *       This should be replaced by push with 'radius' parameter to simulate
58     *       big objects falling into water
59     */
60     void push(Real x, Real y, Real depth, bool absolute=false) ;
61 
62     /** gets height at given x and y, takes average value of the closes nodes */
63     Real getHeight(Real x, Real y);
64 
65     /** updates mesh */
66     void updateMesh(Real timeSinceLastFrame) ;
67 
68     Real PARAM_C ; // ripple speed
69     Real PARAM_D ; // distance
70     Real PARAM_U ; // viscosity
71     Real PARAM_T ; // time
72     bool useFakeNormals ;
73 } ;
74 
75 #endif
76