c-以不规则的速率存储2d数据



这是用于地形生成和渲染程序。

我有一个循环,看起来像这样:

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);
    }
}

它应该在不同的分辨率下找到一个半随机的高度值:近距离分辨率高得多,远距离分辨率更低。

后来,

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

这应该是呈现代码(当然是伪代码)。我必须指定每个点的坐标。我真的很想在这里使用三角形条带,所以我需要一个条带中的所有点相互跟随。

我的问题来了:我该如何存储这些点?在python中,我会创建一个列表,然后只渲染列表中的所有内容。问题是在C中,数组不是动态的。所以我需要一个尺码。我怎么知道那个尺码?我如何以智能的方式循环它(因为它有可变的宽度)?我该如何防止一行的末尾与另一行的开头连接?

还是我做错了整件事?

不如使用像链表堆栈这样的动态数据结构?

每个链表都包含每个三角形条带的点。堆栈将包含每个三角形条带的链接列表。链表将适合您的问题,因为您不需要真正索引您的元素。

最新更新