1 回答

TA贡献1906条经验 获得超3个赞
OpenGL 是一个状态引擎。设置状态后,将一直保留该状态,直到再次更改状态,甚至在帧之外。当前颜色是全局状态。调用 glColor* 时,将设置当前颜色。
当调用 glVertex* 时,当前的颜色、法线和纹理坐标将与顶点相关联。
这意味着,在指定顶点之前,必须设置正确的颜色。在绘制线框立方体之前,您错过了设置颜色属性:
class mainWindow(QMainWindow): #Main class.
# [...]
def paintGL(self):
# [...]
if len(self.shapes) != 0:
glBegin(GL_LINES)
for s in self.shapes:
glColor3fv(s.color) # <------------------------
if s.render and not s.solid:
for e in s.edges:
for v in e:
glVertex3fv(s.vertices[v])
glEnd()
glBegin(GL_QUADS)
for s in self.shapes:
glColor3fv(s.color)
if s.render and s.solid:
for f in s.facets:
for v in f:
glVertex3fv(s.vertices[v])
glEnd()
请注意,在每次调用 之前不必设置当前颜色。更改当前颜色时,只需设置一次即可。新颜色与以下所有顶点相关联。glVertex3fv
添加回答
举报