2014-09-06 2 views
1

Во-первых, я получаю облако точек с OpenGL.glDrawElements не отображает все точки

// The object pointCloud wraps some raw data in different buffers. 

// At this point, everything has been allocated, filled and enabled. 

glDrawArrays(GL_POINTS, 0, pointCloud->count()); 

Это работает просто отлично.

Однако, мне нужно отображать сетку вместо точек. Для этого наиболее очевидным способом, по-видимому, является использование GL_TRIANGLE_STRIP и glDrawElements с хорошим набором индексов.

Итак, я начинаю с преобразования моего текущего кода тем, что должно отображать то же самое.

// Creates a set of indices of all the points, in their natural order 
std::vector<GLuint> indices; 
indices.resize(pointCloud->count()); 
for (GLuint i = 0; i < pointCloud->count(); i++) 
    indices[i] = i; 

// Populates the element array buffer with the indices 
GLuint ebo = -1; 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size(), indices.data(), GL_STATIC_DRAW); 

// Should draw the exact same thing as the previous example 
glDrawElements(GL_POINTS, indices.size(), GL_UNSIGNED_INT, 0); 

Но это не работает. Это рендеринг, который кажется только первой четвертью очков.
Если я испортил диапазон индексов, сделав его в 2 или 4 раза меньше, отображаются те же самые точки. Если он в 8 раз меньше, то только первая половина из них.
Если я заполняю его только четными индексами, отображается одна половина того же набора точек.
Если я начинаю его с половины набора, ничего не отображается.

Очевидно, что-то, чего мне не хватает, как ведет себя glDrawElement по сравнению с glDrawArrays.

Заранее за вашу помощь.

ответ

3

Размер, переданный как второй аргумент glBufferData(), находится в байтах. В опубликованном коде вместо этого указывается количество индексов. Вызов должен быть:

glBufferData(GL_ELEMENT_ARRAY_BUFFER, 
      indices.size() * sizeof(GLuint), indices.data(), GL_STATIC_DRAW); 
+0

Большое спасибо, я думаю, я был слишком слепым, чтобы посмотреть в нужное место! – etbh

Смежные вопросы