在OpenGL中绘制总是白色的

0 投票
2 回答
788 浏览
提问于 2025-04-18 11:19

我正在尝试在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

我解决了这个问题,方法是去掉了以下几行代码:

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

有人能告诉我为什么现在这样就能正常工作了吗?

2

当开启光照功能时,顶点颜色就不再被用来计算了。你需要设置一些叫做材质属性的东西。不过,顶点颜色还是挺方便的,所以有一种方法可以用顶点颜色来设置材质属性。

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

不过要注意,如果你想让光照正常工作,就必须提供顶点的法线,否则效果会很奇怪。暂时关闭光照可能是个好主意。

另外,别再使用过时的即时模式和固定功能管线的OpenGL了。应该学习现代的OpenGL。我推荐你从http://arcsynthesis.org/gltut开始。

撰写回答