Как использовать примитивную функцию перезапуска - PullRequest
0 голосов
/ 18 января 2012

Я пытаюсь создать сетку ландшафта, и сейчас получил что-то вроде этого:

    GL.PushMatrix();
    GL.Begin(BeginMode.TriangleStrip);

    for (int i = 0; i < 6; i++)
    {
        for (int j = 0; j < 6; j++)
        {
            GL.Vertex2(0 + 50 * j, 0 + 50 * i);
            GL.Vertex2(0 + 50 * j, 0 + 50 + 50 * i);
        }

    }

    GL.End();
    GL.PopMatrix();

Но это не похоже на то, как это должно быть сделано правильно?

изображение http://img821.imageshack.us/img821/5387/otkl.jpg

Ответы [ 2 ]

7 голосов
/ 18 января 2012

Нельзя использовать примитивный перезапуск без списка индексов.Кроме того, примитивный перезапуск является инструментом повышения производительности;Если вы используете немедленный режим рендеринга (glBegin/End), вы уже разочарованы в производительностиПросто поместите начало и конец внутри цикла следующим образом:

for (int i = 0; i < 6; i++)
{
    GL.Begin(BeginMode.TriangleStrip);
    for (int j = 0; j < 6; j++)
    {
        GL.Vertex2(0 + 50 * j, 0 + 50 * i);
        GL.Vertex2(0 + 50 * j, 0 + 50 + 50 * i);
    }
    GL.End();
}
3 голосов
/ 18 января 2012

Если вы хотите нарисовать всю местность как одну полосу треугольника, вам нужно использовать «вырожденные треугольники» (треугольники, имеющие две или три вершины в одной позиции) и рисовать четные и нечетные строки в разных направлениях. Здесь один урок об этом, хотя для DirectX, но циклы для позиционирования вершин должны быть почти такими же.

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