在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
我解决了这个问题,方法是去掉了以下几行代码:
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开始。