Pyglet,为什么三角形边缘没有在线框模式中显示?

时间:2017-11-25 15:23:11

标签: python opengl pyglet

我只是图形开发的初学者。

现在我正在尝试扩展cocos2d python(pyglet)功能。

我的目标是制作平台游戏的矩形对象类。

一切都好。但是当在线框模式下切换时 - 我看不到矩形的边缘,我需要它。

有人能用我的解决方案描述如何支持线框模式吗?

代码示例:

class ExtRect(cocos.cocosnode.CocosNode):

    def __init__(self, x, y, width, height):
        super(ExtRect, self).__init__()
        self.rect = cocos.rect.Rect(x, y, width, height)

    def draw(self):

        gl.glPushMatrix()

        self.transform()

        gl.glColor4f(0, 0, 0, 1)

        #...draw...

        pyglet.graphics.draw_indexed(4, pyglet.gl.GL_TRIANGLE_STRIP,
            [0, 1, 2, 1, 2, 3],
            ('v2i', (
                self.rect.x, self.rect.y,
                self.rect.x + self.rect.width, self.rect.y,
                self.rect.x, self.rect.y + self.rect.height,
                self.rect.x + self.rect.width, self.rect.y + self.rect.height
            ))
        )

        gl.glPopMatrix()

如果没有填充颜色,它可以根据需要使用:

enter image description here

但是当我使用glColor4f应用颜色时,边缘会消失:

enter image description here

我还尝试将颜色值添加到索引的顶点列表数据('c3B',(0,0,255,0)* 4) - 结果是相同的。

1 个答案:

答案 0 :(得分:1)

OGL中有不同类型的Primitives

  • 点基元:GL_POINTS

  • 行原语:GL_LINESGL_LINE_STRIPGL_LINE_LOOP

  • 三角形基元:GL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FAN

点基元绘制单个点,线基元绘制线条。三角形图元根据glPolygonMode

的设置绘制,点,线或填充多边形

这意味着,如果要绘制线框,则必须按如下方式设置多边形模式:

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);