我只是图形开发的初学者。
现在我正在尝试扩展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()
如果没有填充颜色,它可以根据需要使用:
但是当我使用glColor4f应用颜色时,边缘会消失:
我还尝试将颜色值添加到索引的顶点列表数据('c3B',(0,0,255,0)* 4) - 结果是相同的。
答案 0 :(得分:1)
OGL中有不同类型的Primitives:
点基元:GL_POINTS
行原语:GL_LINES
,GL_LINE_STRIP
,GL_LINE_LOOP
三角形基元:GL_TRIANGLES
,GL_TRIANGLE_STRIP
,GL_TRIANGLE_FAN
点基元绘制单个点,线基元绘制线条。三角形图元根据glPolygonMode
这意味着,如果要绘制线框,则必须按如下方式设置多边形模式:
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);