2013-02-12 2 views
2

Я пытаюсь отобразить набор строк, используя один вызов до 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)

И результат заключается в следующем:

Triangle rendered between first and last vertices

Не имеет значения, сколько вершин, которые я пытаюсь отобразить, или сколько индексов я помещаю в индексный список, он все еще присоединяет начало & к концу с треугольником. Я рисую с помощью 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); 


Что глупо я мог делать, чтобы вызвать такое поведение?

ответ

2

Указывает количество элементов, подлежащих визуализации.

glDrawElements(GL_TRIANGLE_STRIP, indexCount, GL_UNSIGNED_SHORT, 0); 
+0

Пятно на, спасибо. – Stuart

+0

Это число треугольников или число индексов? Или эти числа совпадают одинаково для треугольной полосы? – mrplants

+0

@mrplants Я задавал себе этот самый вопрос. Первые 3 индекса составляют первый треугольник, затем каждый следующий индекс составляет другой треугольник. Таким образом, вы получаете треугольники N-2, если у вас есть N индексов, но я до сих пор не понимаю, должно ли считаться число N или N-2, я думаю, что N является самым простым ответом, поскольку N-2 является результатом а не размер данных в буфере. Я еще не тестировал это. –