Не удалось получить выходные данные с помощью 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.