Не удалось получить выходные данные с помощью glDrawElements() и glMultiDrawElements()

Я нахожусь в процессе создания графического приложения, в котором пользователь может указать вершины, щелкнув на холсте, а затем вершины используются для рисования полигонов.

Приложение поддерживает режимы линий, треугольников и полигонов. Рисование линии и треугольника осуществляется путем подсчета количества кликов. Затем создаются массивы вершин, а данные привязываются к буферам и обрабатываются с использованием glDrawArrays(), Самым сложным является режим многоугольника. Пользователь может указать любое количество вершин, и нажатие правой кнопки мыши вызывает рисование. Я изначально планировал использовать glMultiDrawElements, но почему-то я не получил никакого вывода. Я попытался позвонить glDrawElements() в петле. все еще без удачи. Я много искал и читал много документации об использовании glDrawElements()/glMultiDrawElements() с VBO и VAO, а также с glVertexPointer() а также glColorPointer, Все еще не повезло.

Я использовал следующее для отслеживания атрибутов вершин:

GLfloat ** polygonVertices; // каждый список вершин многоугольника входит в это..
GLuint * polygonIndicesCounts; // указатель на количество вершин каждого полигона
GLuint ** polygonIndices; // массив указателей для хранения индексов вершин, соответствующих многоугольникам
GLfloat * polygonColors; // для каждого щелчка мыши цвета генерируются случайным образом.

и код для рендеринга:

glVertexPointer(4, GL_FLOAT, 0, (GLvoid*)polygonVertices);
glEnableClientState(GL_VERTEX_ARRAY);

glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, (GLvoid*)polygonColors);

//glMultiDrawElements(GL_POLYGON, polygonIndicesCounts, GL_UNSIGNED_INT, polygonIndices, polygonCount);

for(int i = 0 ; i < polygonCount; i ++)
    glDrawElements(GL_POLYGON, polygonIndicesCounts[i], GL_UNSIGNED_INT, polygonIndices[i]);

1 ответ

Решение

Почему PolygonVertices указатели на указатели? Если вы приведете это к (void*) OpenGL видит только значение указателя, на который указывает каждый элемент. Вы хотите, чтобы они были массивом, поэтому их сигнатура должна быть совместима с float* (не float**). Указатель на указатель имеет смысл только для вызова glMultiDrawArrays.

Другие вопросы по тегам