更改 OpenGL 中线条的颜色

问题描述 投票:0回答:1

我是 OpenGl 的新手,我尝试创建一个工字梁,现在我尝试将线条更改为不同的颜色(例如:可见的线条为绿色,那些不应该可见的线条为粉红色) ,但是是否可以在不对该函数进行太多更改的情况下做到这一点?谢谢

    glBegin(GL_LINES)
    #glColor3f(1,0,1)
    for edge in edges:
        for vertex in edge:
            glVertex3fv(vertices[vertex])
    glEnd()

如有需要,请提供完整代码

import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *

m = 2

vertices = (# up
            (-0.4 * m, 0.2 * m, 0),  # A0
            (0.3 * m, 0.48 * m, 0),  # G1
            (0.1 * m, 0.2 * m, 0),   # M2
            (0.8 * m, 0.48 * m, 0),  # N3
            # down
            (-0.4 * m, -0.25 * m, 0),  # F4
            (0.3 * m, 0.05 * m, 0),   # Z5
            (0.1 * m, -0.25 * m, 0),   # K6
            (0.8 * m, 0.05 * m, 0),   # S7
            # front
            (-0.4 * m, 0.12 * m, 0),   # B8
            (-0.2 * m, 0.12 * m, 0),   # C9
            (-0.2 * m, -0.15 * m, 0),  # D10
            (-0.4 * m, -0.15 * m, 0),  # E11
            (0.1 * m, 0.12 * m, 0),    # L12
            (-0.1 * m, 0.12 * m, 0),   # H13
            (-0.1 * m, -0.15 * m, 0),  # I14
            (0.1 * m, -0.15 * m, 0),    # J15
            # back
            (0.3 * m, 0.4 * m, 0),  # O16
            (0.5 * m, 0.4 * m, 0),  # Q17
            (0.5 * m, 0.15 * m, 0),  # V18
            (0.3 * m, 0.15 * m, 0),  # W19
            (0.8 * m, 0.4 * m, 0),  # P20
            (0.6 * m, 0.4 * m, 0),  # R21
            (0.6 * m, 0.15 * m, 0),  # U22
            (0.8 * m, 0.15 * m, 0),  # T23
            )

edges = ((0, 1),
         (0, 2),
         (0, 8),
         (1, 3),
         (1, 16),
         (2, 3),
         (2, 12),
         (3, 20),
         (4, 5),
         (4, 6),
         (4, 11),
         (5, 7),
         (5, 19),
         (6, 7),
         (6, 15),
         (7, 23),
         (8, 16),
         (8, 9),
         (9, 17),
         (9, 10),
         (10, 18),
         (10, 11),
         (11, 19),
         (12, 20),
         (12, 13),
         (13, 21),
         (13, 14),
         (14, 22),
         (14, 15),
         (15, 23),
         (16, 17),
         (17, 18),
         (18, 19),
         (20, 21),
         (21, 22),
         (22, 23),)

def I_beam():
    glBegin(GL_LINES)
    glColor3f(1,0,1)
    for edge in edges:
        for vertex in edge:
            glVertex3fv(vertices[vertex])
    glEnd()

def main():
    pygame.init()
    display = (900,600)
    pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

    gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)

    glTranslatef(0.0,0.0, -5)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
        I_beam()
        pygame.display.flip()
  
main()

我尝试使用 glColor() 进行更改,但它改变了所有图形的颜色。我尝试搜索但还没找到

python opengl
1个回答
0
投票

在立即模式 OpenGL 中,

glColor
glNormal
glTexCoord
等都是逐顶点属性。它们的值在顶点之间插值。

您可以简单地这样做:

glBegin(GL_LINES)
for edge in edges:
    for vertex in edge:
        glColor3fv(colors[vertex])
        glVertex3fv(vertices[vertex])
glEnd()
© www.soinside.com 2019 - 2024. All rights reserved.