Search code examples
carraysopengllevel-of-detail

Storage of 2d data at irregular rates


This is for a Terrain Generation and rendering program.

I have a loop that looks like this:

x = -MAX_SIGHT_DISTANCE;
y = -MAX_SIGHT_WIDTH;
while (x < MAX_SIGHT_DISTANCE)
{
    while (y < MAX_SIGHT_WIDTH)
    {
        value = noise2d(x+camera.x, y+camera.y);
        if (pointInFrustum(x-camera.x, y-camera.y, value, direction, FOV, MAX_SIGHT_DISTANCE) == 1)
        {
            // TODO: STORE VALUE TO AN ARRAY....SOMEHOW...
        }
        dz = value-camera.z;
        distance = sqrt(x*x + y*y + (dz)*(dz));
        x += DISTANCE_FUNCTION(distance);
        y += DISTANCE_FUNCTION(distance);
    }
}

It's supposed to find a semi-random height value at different resolutions: Much higher resolution up close, and lower resolution farther away.

Later,

for x
{
    glBegin(GL_TRIANGLE_STRIP);
    for y
    {
        glVertex(x, y);
        glVertex(x+1, y);
    }
    glEnd();
}

This is supposed to be the rendering code (in pseudo-code, of course). I have to specify the coordinates of each point. I'd really like to use triangle strips here, so I need to have all points in one strip following each other.

Comes my question: How do I store these points? In python I'd create a list, and then just render everything in the list. Problem is this is in C, arrays aren't dynamic. So I need a size. How can I know that size? How can I loop through it in an intelligent way (since it has variable widths)? And how can I prevent stuff like the end of one row joining with the beginning of another row?

Or am I doing the whole thing wrong?


Solution

  • How about you use a dynamic data structure like a stack of linked-lists?

    Each linked list would hold the points for each triangle strip. The stack would contain the a linked list for each triange strip. Linked list would suit your problem because you dont really need to index your elements.