在OpenGL中绘图总是白色的

时间:2014-06-27 12:12:45

标签: python opengl

我试图在OpenGL中绘制一些简单的三角形。 问题是我的三角形总是白色的,我用glColor3f函数添加了一些颜色:

def OnDraw(self):

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glClearColor(.1, 0.1, 0.1, 1.0)

    glBegin (GL_TRIANGLES)
    glColor3f (1.0, 0.0, 0.0)
    glVertex2f (0.25, 0.25)
    glColor3f (0.0, 1.0, 0.0)
    glVertex2f (0.12, 0.25)
    glColor3f (0.0, 0.0, 1.0)
    glVertex2f (0.25, 0.4)
    glEnd()

这是我的初始化:

def InitGL(self):
    # set viewing projection
    glMatrixMode(GL_PROJECTION)
    glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0)

    # position viewer
    glMatrixMode(GL_MODELVIEW)
    glTranslatef(0.0, 0.0, -2.0)

    glEnable(GL_DEPTH_TEST)
    glEnable(GL_LIGHTING)
    glEnable(GL_LIGHT0)

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

启用照明后,不再考虑使用顶点颜色进行计算。相反,您必须设置材料属性。然而,顶点颜色非常方便,因此有一种方法可以使用顶点颜色来设置材质属性。

glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);

但请注意,要使照明工作,您必须提供顶点法线,否则事情看起来很奇怪。暂时禁用照明可能是最好的。

另外注意:请停止使用老旧的立即模式,固定功能管道OpenGL。而是学习现代OpenGL。我建议http://arcsynthesis.org/gltut开始。

答案 1 :(得分:0)

我解决了我的删除问题:     glEnable(GL_DEPTH_TEST)     glEnable(GL_LIGHTING)     glEnable(GL_LIGHT0)

有人能解释我为什么现在有效吗?