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
添加回答
舉報