2017-11-25 47 views
0

我只是图形开发的初学者。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,边缘disspears:

enter image description here

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

+0

我需要开放的gl级别的逻辑解释。不需要跳pyglet释放和它的细节。 –

回答

1

有不同类型的Primitives在OGL:

  • 点原语:GL_POINTS

  • 行原语:GL_LINESGL_LINE_STRIPGL_LINE_LOOP

  • 三角形图元:GL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FAN

点基元绘制单点,线基元绘制线。根据glPolygonMode

设置这意味着,如果要绘制的线帧三角形图元或者拉伸,点,线或填充多边形,则必须设置多边形模式如下:

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
+1

“三角形基元绘制实心三角形”这是不正确的。它们根据['glPolygonMode'](https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glPolygonMode.xhtml)的设置绘制点,线或实心三角形。 – derhass