OpenGL Rending несколько полос треугольника приводит к разрывам - PullRequest
0 голосов
/ 25 августа 2011

Я нахожусь в середине моего первого набега на 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

И скриншот того, что я вижу (разные значения вершин): Gaps!

Я ищу какие-либо подсказки или понимание того, что я могу делать неправильно.Как я уже говорил, я очень новичок в OpenGL.Я не использую метод сетки с одиночной треугольной полосой, потому что я считаю, что он окажется проблематичным для конечного приложения.

Обновление: Я поиграл со своими значениями y и заметил, что только рендерингкажется проблематичным, когда я использую случайные числа для y, сгенерированные из

qrand() / (float)(RAND_MAX) * 5.0f

При использовании постоянных значений (y = 1.0f), y = x или что-то вроде y = z % 2 == 0 ? x : xMax - x.

Ответы [ 3 ]

0 голосов
/ 25 августа 2011

Прошло много времени с тех пор, как openGl для меня (а потом это был OpenGL-ez на iPod). Но рендер выглядит так, как будто полосы не находятся на регулярной сетке в X, Z. Я бы уменьшил диапазон Y (или даже установил его на 0), чтобы проверить ваши треугольные полосы.

Кроме того, все отправляется как float? Я с подозрением отношусь к выводу отладки, показывающему 1,2 и т. Д., А не 1,0, 2,0.

0 голосов
/ 03 сентября 2011

В итоге я отказался от рендеринга и использовал библиотеку, которая предоставила то, что мне было нужно (как только я заработал). Библиотека для интересующихся: QwtPlot3D . Мне нужны некоторые серьезные улучшения производительности для моих нужд, но это позволило мне обойти это начальное препятствие.

0 голосов
/ 25 августа 2011

Догадка:

Есть ли у вас возможность выбора лица?Порядок отправки вершин в openGL определяет, является ли треугольник передней или задней гранью.Вы можете контролировать, какое направление, CW или CCW (CCW по умолчанию) считается лицевой стороной, используя glFrontFace.

Попробуйте отключить выборку лица;glDisable (GL_CULL_FACE);и посмотрим, исправит ли это ваше изображение.

Если это действительно является вашей проблемой, вы должны оставить пометку включенной, но исправьте порядок отправки вершин в openGL.

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