繁体   English   中英

如何在 OpenGL 中为我的对象上的每个面设置单独的颜色?

[英]How to have a separate color for each face on my object in OpenGL?

Total OpenGL noob here...我试图用不同的颜色为金字塔的每个面着色,如下所示:

    glBegin(GL_POLYGON)
    f1 = ((1,-1,-1),(1,-1,1),(0,1,0))
    f2 = ((1,-1,1),(-1,-1,1),(0,1,0))
    f3 = ((-1,-1,-1),(-1,-1,1),(0,1,0))
    f4 = ((1,-1,-1),(-1,-1,-1),(0,1,0))
    f5 = ((1,-1,-1),(1,-1,1),(-1,-1,-1),(-1,-1,1))
    for i in f1:
        glColor3f(0,255,255)
        glVertex3fv(i)
    for i in f2:
        glColor3f(255,0,0)
        glVertex3fv(i)
    for i in f3:
        glColor3f(0,255,0)
        glVertex3fv(i)
    for i in f4:
        glColor3f(255,255,0)
        glVertex3fv(i)
    for i in f5:
        glColor3f(255,0,255)
        glVertex3fv(i)
    glEnd()

但结果很糟糕......我做错了什么? 我现在的金字塔

原始类型GL_POLYGONglBegin / glEnd序列中的所有顶点中生成 1 个大多边形。 请注意,OpenGL 无法猜测有多少点组成一个多边形。 您需要在分开的glBegin / glEnd序列中绘制多边形:

faces = [
    ((1,-1,-1),(1,-1,1),(0,1,0)),
    ((1,-1,1),(-1,-1,1),(0,1,0)),
    ((-1,-1,-1),(-1,-1,1),(0,1,0)),
    ((1,-1,-1),(-1,-1,-1),(0,1,0)),
    ((1,-1,-1),(1,-1,1),(-1,-1,-1),(-1,-1,1))
]
colors = [(0,255,255), (255,0,0), (0,255,0), (255,255,0), (255,0,255)]

for face, color in zip(faces, colors):
    glColor3fv(color)
    
    glBegin(GL_POLYGON)
    for vertex in face:
        glVertex3fv(vertex)
    glEnd()

或者,您可以绘制GL_TRIANGLES并使金字塔底部由 2 个三角形组成:

tringles = [
    ((1,-1,-1),   (1,-1,1),   (0,1,0)),
    ((1,-1,1),   (-1,-1,1),  (0,1,0)),
    ((-1,-1,-1), (-1,-1,1),  (0,1,0)),
    ((1,-1,-1),  (-1,-1,-1), (0,1,0)),
    ((1,-1,-1),  (1,-1,1),   (-1,-1,-1)),
    ((1,-1,-1),  (-1,-1,-1), (-1,-1,1))
]
colors = [
    (0,255,255), (255,0,0), (0,255,0), (255,255,0), 
    (255,0,255), (255,0,255)
]

glBegin(GL_TRINAGLES)
for tringle, color in zip(tringles, colors):
    glColor3fv(color)
    for vertex in triangle:
        glVertex3fv(vertex)
glEnd()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM