Pyopengl - 如何分离从单个VBO中提取的线条

时间:2013-11-17 01:35:45

标签: python line vbo pyopengl

所以我设法直接从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,但我不知道如何...

1 个答案:

答案 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的第四个参数,但是指定它可能是个好习惯吗?