【问题标题】:Pyopengl - How to separate lines drawn from single VBOPyopengl - 如何分离从单个 VBO 绘制的线条
【发布时间】:2013-11-30 07:49:12
【问题描述】:

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

【问题讨论】:

    标签: python line vbo pyopengl


    【解决方案1】:

    我找到了答案。互联网上的文档似乎含糊不清或难以理解,但解决方案是在 glDrawArrays 中添加第四个参数,指定要绘制的行数(在我的情况下为线段),并删除 self 中的行.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 的第四个参数似乎不是必需的,但是指定它也许是个好习惯?

    【讨论】:

      猜你喜欢
      • 2013-12-14
      • 2012-12-07
      • 2019-02-05
      • 2013-08-01
      • 2018-04-15
      • 2020-08-25
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      相关资源
      最近更新 更多