OpenGGL glDrawElements рисует линии, но не треугольники - PullRequest
1 голос
/ 10 декабря 2011

У меня есть следующий код:

for(auto m:shapes) {
    glVertexPointer(3, GL_DOUBLE, 0, m->verts);

    glNormalPointer(GL_DOUBLE, 0, m->normals);

    glDrawElements(GL_TRIANGLES, m->num_triangles*3, GL_UNSIGNED_INT, m->indices);
}

(На фотографиях круг и точка не имеют значения, они нарисованы другим кодом. Извините, я не могу публиковать изображения, я новый пользователь ...)

http://dl.dropbox.com/u/5269/Screen%20shot%202011-12-10%20at%2012.38.28%20PM.png

Кажется, он ничего не рисует.

Если я изменю GL_TRIANGLES на GL_LINES:

for(auto m:shapes) {
    glVertexPointer(3, GL_DOUBLE, 0, m->verts);

    glNormalPointer(GL_DOUBLE, 0, m->normals);

    glDrawElements(GL_TRIANGLES, m->num_triangles*3, GL_UNSIGNED_INT, m->indices);
}

http://dl.dropbox.com/u/5269/Screen%20shot%202011-12-10%20at%2012.44.56%20PM.png

Так что кажется, что координаты верны в буфере верстекста, и индексный буфер тоже в порядке. glGetError возвращает 0. И самое странное, что этот же код работает для других буферов вершин, сгенерированных тем же источником.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2013

Использовали ли вы одинаковые m-> indexs для обоих примеров (которые, кстати, идентичны, как заметил и Бретт Хейл, потому что вы, вероятно, не меняли константу перечисления во втором пример)?

GL_LINES ожидает поток пар, где GL_TRIANGLES ожидает поток триплетов. Я не знаю, как вы заполнили m-> indexes , но если вы сделали что-то вроде этого:

0 1 1 2 2 3 3 4 4 5 5 6 ...

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

01   12   23   34   45   56 ...

Но когда вы интерпретируете их как триплеты, вы получаете треугольники, в которых две вершины совпадают, поэтому они вырождены и, следовательно, не нарисованы.

011   223   344   556 ...

Маловероятно, что вы можете успешно использовать одно и то же выражение m-> num_triangles * 3 для обоих вызовов. Возможно, это еще одна проблема в посте, и вы изменили ее в своем коде. Взгляните на glBegin Man Page .

0 голосов
/ 10 декабря 2011

Попробуйте установить режим полигона GL_LINE (glPolygonMode) перед циклом for. Если вы видите линии, это может быть что-то с вашей матрицей проекции для 2D-рисования. Кроме того, правильны ли линии, которые вы показываете на втором изображении? Мне показалось случайным.

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