2017-11-25 91 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