# 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. 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 (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. 