Regularly Fluctuated Polygon

I am unsure as to how to create a regularly fluctuated polygon in OpenGL. I need to create just a basic one for an assignment for a class. It doesn’t need to be anything fancy. Some help would be much appreciated, thanks. :slight_smile:

I have looked around NeHe before. I was unable to find anything about regularly fluctuated polygons. Perhaps I missed it, if its there, could you like me directly. Thanks

What’s a fluctuated polygon?

Once you define it precisely, it’ll be a beam reach for the homeland :slight_smile:

(Note that no one here is going to do your homework for you.)

Oh, I dont’ want anyone to do my homework. I am just looking for some help in drawing. I just need to draw one, to show problems with rendering it. A regularly fluctuate polygon is kinda like this:


that would be a side view of one

You may use a periodic function (sine or triangle) to compute amplitute (height) of a vertex.

The equation to compute height look like this;

output = amp * FUNC( freq * ( time - phase ) ) + offset

where amp is amplitude of wave
      FUNC() is one of wave functions (sine, triangle, saw...)
      freq is frequency of wave
      phase is the horizontal shift
      offset is vertical shift

Here is an example using above equation. To make it simple, let’s use amp=1, freq=1, offset=0, and time =0. Now, the equation is just FUNC(-phase), which means you need calculate only phase.

Let’s say 10 points are laid in a row, for instance, 0, 1, 2, 3, … 8, 9. And I want to make a triangular wave with these 10 points

               *   *   *
********** => * * * * *
                 *   *

The wavelength of the above triangle wave is 4 units, therefore, you can get the phase (horizontal shift) by dividing wavelength;
0/4, 1/4, 2/4, 3/4, … 8/4, 9/4.

These are input arguments of FUNC(), And here is the body of FUNC() look like;

// factor the phase, so the value is fit between 0~1.
float factor = phase - (int)phase;

// describe only triangle wave here
if(factor < 0.25f)            // 0 ~ 0.25
    output = 4 * factor;
else if(timeFact < 0.75f)     // 0.25 ~ 0.75
    output = 2 - (4 * factor);
else                          // 0.75 ~ 1
    output = 4 * factor - 4;

With above FUNC(), you can the final height values;
OUTPUT: 0, 1, 0, -1, 0, 1, 0, -1, 0, 1

I am not sure my description is enough to understand, so feel free to ask further questions.

Nope, that was easy enough to understand. I will look into that, and see if I can make that work. Thanks alot. :slight_smile: