Я нахожусь в середине моего первого набега на OpenGL с использованием C ++ и Qt в качестве вспомогательного состава.
В той степени, в какой это моя площадка для реализации функции вне основного приложения, я пытаюсь нарисоватьчто составляет поверхность сетки из двумерного массива поплавков.Индексы этого 2d-массива используются для координат x и z, а значением является координата y.
В настоящее время моя реализация содержит ошибки.Вместо создания твердой поверхности есть заметные черные промежутки.
Быстрый Google показал мне http://marc.blog.atpurpose.com/2009/10/24/programatically-generating-a-rectangular-mesh-using-single-gl_triangle_strip/, что очень похоже на мой метод рендеринга.Тем не менее, я заканчиваю свою полосу треугольника после того, как нарисовал один ряд треугольников и начал новую полосу в конце.
Ниже приведен пример вывода отладочной информации, показывающий создаваемые мной вершины:
glBegin
drawing vertex ( 0 , 2.76401 , 3 )
drawing vertex ( 0 , 1.82236 , 4 )
drawing vertex ( 1 , 1.55657 , 3 )
drawing vertex ( 1 , 3.82013 , 4 )
drawing vertex ( 2 , 3.1032 , 3 )
drawing vertex ( 2 , 2.77563 , 4 )
drawing vertex ( 3 , 2.2032 , 3 )
drawing vertex ( 3 , 4.49317 , 4 )
drawing vertex ( 4 , 0.469515 , 3 )
drawing vertex ( 4 , 1.48398 , 4 )
drawing vertex ( 5 , 0.301526 , 3 )
drawing vertex ( 5 , 0.606281 , 4 )
drawing vertex ( 6 , 1.12292 , 3 )
drawing vertex ( 6 , 1.98806 , 4 )
glEnd/glBegin
drawing vertex ( 0 , 4.31023 , 2 )
drawing vertex ( 0 , 2.76401 , 3 )
drawing vertex ( 1 , 3.64741 , 2 )
drawing vertex ( 1 , 1.55657 , 3 )
drawing vertex ( 2 , 2.48897 , 2 )
drawing vertex ( 2 , 3.1032 , 3 )
drawing vertex ( 3 , 4.54997 , 2 )
drawing vertex ( 3 , 2.2032 , 3 )
drawing vertex ( 4 , 0.11039 , 2 )
drawing vertex ( 4 , 0.469515 , 3 )
drawing vertex ( 5 , 1.12043 , 2 )
drawing vertex ( 5 , 0.301526 , 3 )
drawing vertex ( 6 , 4.27371 , 2 )
drawing vertex ( 6 , 1.12292 , 3 )
glEnd/glBegin
drawing vertex ( 0 , 0.818045 , 1 )
drawing vertex ( 0 , 4.31023 , 2 )
drawing vertex ( 1 , 0.886993 , 1 )
drawing vertex ( 1 , 3.64741 , 2 )
drawing vertex ( 2 , 0.612948 , 1 )
drawing vertex ( 2 , 2.48897 , 2 )
drawing vertex ( 3 , 4.69348 , 1 )
drawing vertex ( 3 , 4.54997 , 2 )
drawing vertex ( 4 , 3.56293 , 1 )
drawing vertex ( 4 , 0.11039 , 2 )
drawing vertex ( 5 , 2.22925 , 1 )
drawing vertex ( 5 , 1.12043 , 2 )
drawing vertex ( 6 , 0.15616 , 1 )
drawing vertex ( 6 , 4.27371 , 2 )
glEnd/glBegin
drawing vertex ( 0 , 1.84323 , 0 )
drawing vertex ( 0 , 0.818045 , 1 )
drawing vertex ( 1 , 2.28323 , 0 )
drawing vertex ( 1 , 0.886993 , 1 )
drawing vertex ( 2 , 1.1108 , 0 )
drawing vertex ( 2 , 0.612948 , 1 )
drawing vertex ( 3 , 3.72698 , 0 )
drawing vertex ( 3 , 4.69348 , 1 )
drawing vertex ( 4 , 4.41645 , 0 )
drawing vertex ( 4 , 3.56293 , 1 )
drawing vertex ( 5 , 4.69124 , 0 )
drawing vertex ( 5 , 2.22925 , 1 )
drawing vertex ( 6 , 3.11876 , 0 )
drawing vertex ( 6 , 0.15616 , 1 )
glEnd
И скриншот того, что я вижу (разные значения вершин):
Я ищу какие-либо подсказки или понимание того, что я могу делать неправильно.Как я уже говорил, я очень новичок в OpenGL.Я не использую метод сетки с одиночной треугольной полосой, потому что я считаю, что он окажется проблематичным для конечного приложения.
Обновление: Я поиграл со своими значениями y и заметил, что только рендерингкажется проблематичным, когда я использую случайные числа для y, сгенерированные из
qrand() / (float)(RAND_MAX) * 5.0f
При использовании постоянных значений (y = 1.0f
), y = x
или что-то вроде y = z % 2 == 0 ? x : xMax - x
.