• Advertisement
Sign in to follow this  

How to calculate normals from gerstner waves

This topic is 1924 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi there,
I have read some threads here asking a similar question. But the examples are different, or more easy than this. I have tested first the most simple wave and I got the normal working properly.
For me this is the case:

float k=2.0*3.1416/L;
float3 w=sqrt(9.81*k)*t;
float theta =dot(K, wp) -w;
float2 XY=(K/k)* A * sin(theta );
float Z= A* cos (theta );
return float3(XY.x.x,XY.y, Z);

As explained in tessendorf, K is the wind vector and L is lambda.

So the question here would be how to derivate this and finally how to get the normal.

Thanks!

Share this post


Link to post
Share on other sites
Advertisement
Heya, it's been forever since I worked with Tessendorf waves but I recommend this website, it shows how to generate the waves along with the normals using the FFT, code included. Note there are two parts! Or if you are not using the FFT method, there is a - admittedly rather arcane - description of the normal for Gerstner waves in this GPU Gems article, have you looked at it?

If everything fails, you can always use good old finite difference approximation to evaluate the normal, which is a bit more expensive since you have to sample the wave multiple times, but at least is general-purpose.

Share this post


Link to post
Share on other sites

Heya, it's been forever since I worked with Tessendorf waves but I recommend this website, it shows how to generate the waves along with the normals using the FFT, code included. Note there are two parts! Or if you are not using the FFT method, there is a - admittedly rather arcane - description of the normal for Gerstner waves in this GPU Gems article, have you looked at it?

If everything fails, you can always use good old finite difference approximation to evaluate the normal, which is a bit more expensive since you have to sample the wave multiple times, but at least is general-purpose.


Thanks, but... im a beginner. I got the gpu gems example working right. That sample is a bit more easy. Mine has a difference, the (K/k) * wave, and the movement both in XY and Z, not just the vertical (z for me). Its just a math thing. Edited by DavidM

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement