我创建了一个房间,实际上是长方形,有两个窗户和一扇门。我一直试图用它们的材料属性点亮matarials。我使用了下面的代码,但它不起作用;为什么呢?
注意:正如预期的那样,房间里有灯光
在myinit()中
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT1, GL_AMBIENT, light[0]);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light[1]);
glLightfv(GL_LIGHT1, GL_SPECULAR,light[2]);
glLightfv(GL_LIGHT1, GL_POSITION,light[3]); // position of the light
glEnable(GL_LIGHT1);
在抽奖室()
glMaterialfv ( GL_FRONT, GL_AMBIENT ,material[0] ) ;
glMaterialfv ( GL_FRONT, GL_DIFFUSE ,material[1] ) ;
glMaterialfv ( GL_FRONT, GL_SPECULAR ,material[2] ) ;
glBegin (GL_TRIANGLES);
glColor3f ( /*...*/ )
// ...
glEnd ( ) ;
在main()
中 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
答案 0 :(得分:3)
你启用了照明吗?只启用一个灯是不够的,你应该启用整个灯光系统(默认情况下它是关闭的)
它应该在初始化函数中发生:
glEnable(GL_LIGHTING);
另外,不要忘记:
glEnable(GL_COLOR_MATERIAL);
如果你想要材料颜色。 (你现在拥有它,但它是另一个可能导致问题的小旗帜)
为了理解GL中照明的工作原理,必须了解的另一个重要因素是normals。对于几何体中的每个顶点,您还必须告诉OpenGL它面向哪个方向,以便它可以计算相对于光线位置的方向,以确定它应该有多亮。 This看起来像是对OpenGL概念的一个不错的介绍。
当我第一次使用OpenGL时,我认为这些法线会自动从给定的三角形计算出来。 我错了。 OpenGL不会自动计算模型的法线,尽管从理论上讲,它可以(尽管有块状结果 - 可能更流畅的技术)。
另一个建议 - 避免使用固定管道功能(例如glBegin(...) ... glEnd()
块(也称为立即模式))是一个好主意。它已经过时且缓慢。查看this great tutorial series,了解现代游戏中现代技术的一个很好的介绍。