Revision: 2423
          http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=2423&view=rev
Author:   rorthomas
Date:     2012-02-01 21:13:24 +0000 (Wed, 01 Feb 2012)
Log Message:
-----------
added documentation on how waves work

Modified Paths:
--------------
    trunk/source/main/gfx/WaterOld.cpp

Modified: trunk/source/main/gfx/WaterOld.cpp
===================================================================
--- trunk/source/main/gfx/WaterOld.cpp  2012-02-01 15:36:29 UTC (rev 2422)
+++ trunk/source/main/gfx/WaterOld.cpp  2012-02-01 21:13:24 UTC (rev 2423)
@@ -423,18 +423,43 @@
 
 float WaterOld::getHeightWaves(Vector3 pos)
 {
+       // no waves?
        if(!haswaves)
+       {
+               // constant height, sea is flat as pancake
                return height;
-       if (pos.y>height+maxampl) return height;
-       int i;
-       float waveheight=(pos-Vector3((*mapsizex * mScale)/2, height, 
(*mapsizez * mScale)/2)).squaredLength()/3000000.0;
-       float result=height;
-       for (i=0; i<free_wavetrain; i++)
+       }
+
+       // uh, some upper limit?!
+       if (pos.y > height + maxampl)
+               return height;
+
+       // calculate how heigh the waves should be at this point
+       //  (*mapsizex * mScale) / 2 = terrain width / 2
+       //  (*mapsizez * mScale) / 2 = terrain height / 2
+       // calculates the distance to the center of the terrain and dives it 
through 3.000.000
+       float waveheight = (pos - Vector3((*mapsizex * mScale) / 2, height, 
(*mapsizez * mScale) / 2)).squaredLength() / 3000000.0;
+       // we will store the result in this variable, init it with the deafult 
height
+       float result = height;
+       // now walk through all the wave trains. One 'train' is one sin/cos set 
that will generate once wave. All the trains together will sum up, so that they 
generate a 'rough' sea
+       for (int i=0; i<free_wavetrain; i++)
        {
-               float amp=wavetrains[i].amplitude*waveheight;
-               if (amp>wavetrains[i].maxheight) amp=wavetrains[i].maxheight;
-               
result+=amp*sin(6.28318*((mrtime*wavetrains[i].wavespeed+sin(wavetrains[i].direction)*pos.x+cos(wavetrains[i].direction)*pos.z)/wavetrains[i].wavelength));
+               // calculate the amplitude that this wave will have. 
wavetrains[i].amplitude is read from the config
+               float amp = wavetrains[i].amplitude * waveheight;
+               // upper limit: prevent too big waves by setting an uper limit
+               if (amp > wavetrains[i].maxheight)
+                       amp = wavetrains[i].maxheight;
+               // now the main thing:
+               // calculate the sinus with the values of the config file and 
add it to the result
+               result += amp * sin(Math::TWO_PI * ( \
+                                                                               
        (mrtime * wavetrains[i].wavespeed \
+                                                                               
        + sin(wavetrains[i].direction) * pos.x \
+                                                                               
        + cos(wavetrains[i].direction) * pos.z \
+                                                                               
        ) \
+                                                                               
        / wavetrains[i].wavelength) \
+                                                                               
        );
        }
+       // return the summed up waves
        return result;
 }
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Rigsofrods-devel mailing list
Rigsofrods-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel

Reply via email to