亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PyOpenGL如何選擇顏色來繪制每個形狀?

PyOpenGL如何選擇顏色來繪制每個形狀?

Smart貓小萌 2022-08-02 15:46:29
我正在一個PyQt5 PyOpenGL項目進行中。我正在嘗試用一堆彩色的實心立方體繪制一個白色線框立方體。線框立方體是從元組點列表和對這些點的元組引用列表中繪制的。實心立方體是從對點的元組引用列表中繪制的。下面是多維數據集代碼:class cube():    render = True    solid = False    color = (1, 1, 1)    def config(self, x, y, z, size = 0.1, solid = False, color = (1, 1, 1)):        self.solid = solid        self.color = color        self.size = size / 2        s = self.size        self.vertices = [                         (-s + x, s + y, -s + z),                         (s + x, s + y, -s + z),                         (s + x, -s + y, -s + z),                         (-s + x, -s + y, -s + z),                         (-s + x, s + y, s + z),                         (s + x, s + y, s + z),                         (s + x, -s + y, s + z),                         (-s + x, -s + y, s + z)                       ]        self.edges = [                      (0,1), (0,3), (0,4), (2,1),                      (2,3), (2,6), (7,3), (7,4),                      (7,6), (5,1), (5,4), (5,6)                     ]        self.facets = [                       (0, 1, 2, 3), (0, 1, 6, 5),                       (0, 3, 7, 4), (6, 5, 1, 2),                       (6, 7, 4, 5), (6, 7, 3, 2)                      ]    def show(self):        self.render = True    def hide(self):        self.render = False為了呈現多維數據集,我獲取類中保存的列表的大小,然后將多維數據集類的實例追加到該列表中。然后,我可以在追加之前使用大小來引用該實例。下面是渲染函數的代碼:mainWindowdef paintGL(self):    glLoadIdentity()    gluPerspective(45, self.width / self.height, 0.1, 110.0)    #set perspective?    glTranslatef(0, 0, self.zoomLevel)    #I used -10 instead of -2 in the PyGame version.    glRotatef(self.rotateDegreeV, 1, 0, 0)    #I used 2 instead of 1 in the PyGame version.    glRotatef(self.rotateDegreeH, 0, 0, 1)結果:
查看完整描述

1 回答

?
一只名叫tom的貓

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

http://img1.sycdn.imooc.com//62e8d68600019bc802420083.jpg

查看完整回答
反對 回復 2022-08-02
  • 1 回答
  • 0 關注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號