OpenGL只从顶点数组中绘制一些索引

时间:2015-10-02 16:02:58

标签: c++ opengl

我怎样才能在OpenGL中从顶点数组中绘制选定的索引?

例如,我正在绘制像点一样的顶点,其中一些变量m_pointCloud包含我的点云顶点(点):

glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);

glPointSize(m_pointSize * point_scale);

glColorPointer(4, GL_UNSIGNED_BYTE,
    static_cast<GLsizei>(sizeof(DensePoint)), &((*m_pointCloud)[0].r));
// glNormalPointer(GL_FLOAT,
//  static_cast<GLsizei>(sizeof(DensePoint)), &((*m_pointCloud)[0].n_x));
glVertexPointer(3, GL_FLOAT,
    static_cast<GLsizei>(sizeof(DensePoint)), &((*m_pointCloud)[0].x));

glDrawArrays(GL_POINTS, 0, static_cast<GLsizei>(m_pointCloud->size()) - 1);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

但我有一些std::vector<size_t> indices包含我想要绘制的m_pointCloud的索引。这是怎么做到的?

1 个答案:

答案 0 :(得分:2)

使用glDrawElements

代替glDrawArrays

例如:

std::vector<GLuint> indices;

// populate vertices

glDrawElements(GL_POINTS, indices.size(), GL_UNSIGNED_INT, reinterpret_cast<void*>(indices.data()));

另请注意,您不能将size_t用作索引类型,因为OpenGL只允许8,16和32位索引。