Я пытаюсь отобразить набор строк, используя один вызов до glDrawElements()
. Каждая строка представляет собой один квад, и я использую между ними дегенеративные треугольники.glDrawElements треугольник визуализируется с использованием вершин из начала и конца массива вершин (с использованием GL_TRIANGLE_STRIP)
Когда оказывается, дополнительный треугольник втягивается используя вершины с индексами 0
, n-1
и n-2
, которые я не считаю, это нормальное поведение для GL_TRIANGLE_STRIPS
.
Например, с 12 вершинами, содержащие 3 четверные мой индекс массива выглядит следующим образом:
(0, 1, 2, 3, , , 4, 5, 6, 7, , , 8, 9, 10, 11)
И результат заключается в следующем:
Не имеет значения, сколько вершин, которые я пытаюсь отобразить, или сколько индексов я помещаю в индексный список, он все еще присоединяет начало & к концу с треугольником. Я рисую с помощью VBO и IBO, завернутых в VAO. Так рисовать я просто называю:
glBindVertexArrayOES(vao);
glDrawElements(GL_TRIANGLE_STRIP, indexCount * sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
glBindVertexArrayOES(0);
ВАО установки:
// Bind VAO.
glBindVertexArrayOES(vao);
// Bind and set VBO data.
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vertexCount * sizeof(VertexStructure), vertices, GL_STATIC_DRAW);
// Enable attribute pointers.
glVertexAttribPointer(position, 2, GL_FLOAT, GL_FALSE, sizeof(VertexStructure), (void*)offsetof(VertexStructure, vertex));
glEnableVertexAttribArray(position);
glVertexAttribPointer(color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VertexStructure), (void*)offsetof(VertexStructure, color));
glEnableVertexAttribArray(color);
// Bind and set IBO data.
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * sizeof(GLushort), indices, GL_STATIC_DRAW);
// Unbind VBO & VAO.
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArrayOES(0);
// Disable attribute pointers.
glDisableVertexAttribArray(position);
glDisableVertexAttribArray(color);
Что глупо я мог делать, чтобы вызвать такое поведение?
Пятно на, спасибо. – Stuart
Это число треугольников или число индексов? Или эти числа совпадают одинаково для треугольной полосы? – mrplants
@mrplants Я задавал себе этот самый вопрос. Первые 3 индекса составляют первый треугольник, затем каждый следующий индекс составляет другой треугольник. Таким образом, вы получаете треугольники N-2, если у вас есть N индексов, но я до сих пор не понимаю, должно ли считаться число N или N-2, я думаю, что N является самым простым ответом, поскольку N-2 является результатом а не размер данных в буфере. Я еще не тестировал это. –