Хранение 2d данных с нерегулярной скоростью - PullRequest
1 голос
/ 03 марта 2012

Это программа для рендеринга и рендеринга ландшафта.

У меня есть цикл, который выглядит следующим образом:

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, массивы не являются динамическими. Так что мне нужен размер. Как я могу узнать этот размер? Как я могу пройти через это интеллектуальным способом (так как он имеет переменную ширину)? И как я могу предотвратить присоединение конца одного ряда к началу другого ряда?

Или я все делаю неправильно?

1 Ответ

2 голосов
/ 03 марта 2012

Как насчет использования динамической структуры данных, такой как стек из связанных списков ?

Каждый связанный список будет содержать точки для каждой треугольной полосы.Стек будет содержать связанный список для каждой полоски треугольника.Связанный список подойдет вашей проблеме, потому что вам не нужно индексировать свои элементы.

...