所以我设法直接从VBO绘制了2条线(每条线由5个较小的“线段”组成),但它不连接两条线。
因此绘制线条的代码包括:
self.linelist = np.array([
# LINE 1 #
[ 50., 350., 150., 94.], #Segment 1
[ 150., 94., 250., 392.], #Segment 2
[ 250., 392., 350., 466.], #Segment 3
[ 350., 466., 450., 233.], #Segment 4
[ 450., 233., 550., 420.], #Segment 5
[ 550., 420., 50., 490.], #Joining Segment
# LINE 2 #
[ 50., 490., 150., 94.], #Segment 1
[ 150., 94., 250., 280.], #Segment 2
[ 250., 280., 350., 280.], #Segment 3
[ 350., 280., 450., 419.], #Segment 4
[ 450., 419., 550., 140.] #Segment 5
], dtype=np.float32)
self.linevbo = glvbo.VBO(self.linelist)
self.linevbo.bind()
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(2, GL_FLOAT, 0, self.linevbo)
self.faces = np.array(range((len(self.linelist)*2)), dtype=np.uint32)
glDrawArrays(GL_LINES, 0, len(self.linelist)*2)
glDisableClientState(GL_VERTEX_ARRAY)
如何阻止它加入这两行?
编辑:我想我需要使用glMultiDrawArrays,但我不知道如何...答案 0 :(得分:0)
我找到了答案。互联网上的文档似乎含糊不清或难以理解,但解决方案是向glDrawArrays添加第四个参数,指定要绘制的行数(在我的情况下为线段),以及删除自行中的行.linelist指定加入段。
即
self.linelist = np.array([
# LINE 1 #
[ 50., 350., 150., 94.], #Segment 1
[ 150., 94., 250., 392.], #Segment 2
[ 250., 392., 350., 466.], #Segment 3
[ 350., 466., 450., 233.], #Segment 4
[ 450., 233., 550., 420.], #Segment 5
# LINE 2 #
[ 50., 490., 150., 94.], #Segment 1
[ 150., 94., 250., 280.], #Segment 2
[ 250., 280., 350., 280.], #Segment 3
[ 350., 280., 450., 419.], #Segment 4
[ 450., 419., 550., 140.] #Segment 5
], dtype=np.float32)
glDrawArrays(GL_LINES, 0, len(self.linelist)*2, len(self.linelist))
编辑:实际上似乎不需要glDrawArrays的第四个参数,但是指定它可能是个好习惯吗?