Во-первых, я получаю облако точек с 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.
Заранее за вашу помощь.
Большое спасибо, я думаю, я был слишком слепым, чтобы посмотреть в нужное место! – etbh