我正在开发一个简单的opengl应用程序,我在其中绘制一串数据,表示为一行。出于性能原因,我将数据分成多个块并将它们上传到多个VOB中。后来,我单独渲染每个VBO。以下是一些示例代码:
n_COORDINATES_PER_VERTEX = 2
NBR_DATA_POINTS_PER_VBO = 1000
# plot each VBO
for segment in range(segments):
# bind the named buffer object so we can work with it.
glBindBuffer(GL_ARRAY_BUFFER, vbos[segment])
# specifies the location and data format of an array of vertex coordinates to use when rendering
glVertexPointer(n_COORDINATES_PER_VERTEX, GL_FLOAT, 0, 0)
# render primitives from array data
glDrawArrays(GL_LINE_STRIP, 0, NBR_DATA_POINTS_PER_VBO)
这非常有效,但不幸的是,前一个VBO的最后一点和下一个VBO的第一个点之间存在视觉差距。这是有道理的,因为GL_LINE_STRIP
仅为每个VBO中的数据创建。
因此,我的问题:如何实现多个VBO呈现为一条线,而不会跳到中间?
答案 0 :(得分:2)
您可以通过
执行此操作要制作完整的折线,你需要在VBOS上分享共同点(我没有看到其他选项),你可以选择任何你想要的方法。
n_COORDINATES_PER_VERTEX = 2
NBR_DATA_POINTS_PER_VBO = 1000
# One extra point that is the first vertex of the next batch
NBR_DATA_POINTS_REAL = NBR_DATA_POINTS_PER_VBO + 1
# Use GL_LINE_STRIP and duplicate vertices
# plot each VBO
for segment in range(segments):
# Duplicate
if (not_last_segment)
vbos[segment][NBR_DATA_POINTS_REAL - 1] = vbos[segment + 1][0];
# bind the named buffer object so we can work with it.
glBindBuffer(GL_ARRAY_BUFFER, vbos[segment])
# specifies the location and data format of an array of vertex coordinates to use when rendering
glVertexPointer(n_COORDINATES_PER_VERTEX, GL_FLOAT, 0, 0)
# render primitives from array data
glDrawArrays(GL_LINE_STRIP, 0, NBR_DATA_POINTS_REAL)
类似的东西 - 看起来你不能一次性渲染所有的点 - 所以我将跳过我的解决方案,其中涉及glDrawElements,你可以使用它来绘制一个索引网格。