Альтернативный метод создания карты высот - PullRequest
1 голос
/ 12 ноября 2011

Я думал о создании массива 2x2 со случайно сгенерированными значениями, которые затем рисовались с использованием glVertex3i, например:

glBegin(GL_POLYGON);
int x = 5;
int z = 5;
for (int i=0; i<width; i++)
{
    for (int j=0; j<height; j++)
    {
        glVertex3i(x, heightmap[i][j], z);
    }
    x -= 0.5;
    z -= 0.5;
}
glEnd();

Единственная проблема, с которой я столкнулся, это то, что карта не рисуетсяпо измерению z, я думаю, потому что все, что я получаю, это по существу 1 сторона.

Что может быть не так?Очевидно, что алгоритм пока является базовым, но это только отправная точка.

Ответы [ 2 ]

4 голосов
/ 12 ноября 2011

Что может быть не так?

Давайте начнем здесь:

glBegin(GL_POLYGON);

Полигон требуется , чтобы быть плоским.Все вершины должны лежать в одной плоскости.Если они этого не делают, то OpenGL не несет ответственности за то, как он отображается.Вы не можете нарисовать карту высот в виде одного многоугольника и ожидать получения разумных результатов.Вы должны нарисовать треугольники, либо с серией GL_TRIANGLE_STRIP s, либо с GL_TRIANGLES.

Тогда есть то, что сказал Кристиан.

3 голосов
/ 12 ноября 2011

Возможно, вы имеете в виду

float x = 5.0f;
for (int i=0; i<width; i++)
{
    float z = 5.0f;
    for (int j=0; j<height; j++)
    {
        glVertex3f(x, heightmap[i][j], z);
        z -= 0.5f;
    }
    x -= 0.5f;
}

Или с переключенными x и z, в зависимости от вашего соглашения.Но во-первых, не вычитайте 0,5 из целого числа, оно будет рисовать одну и ту же вершину дважды.И, во-вторых, одна переменная должна выполняться во внутреннем цикле, а другая - во внешнем цикле.Или я неправильно понял вопрос?

И вы уверены, что хотите, чтобы вся карта высот составляла один многоугольник?Может быть, я действительно неправильно понял вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...