我已经从NeHe教程下载了代码,一个关于照明的代码。原始代码不包括镜面光,我只是添加它。我定义了一个免费的彩色照明阵列,并关闭了其他灯光。
GLfloat LightBlack[] = { 0.0f, 0.0f, 0.0f, 1.0f };
GLfloat LightGreen[] = { 0.0f, 1.0f, 0.0f, 1.0f };
...
glLightfv(GL_LIGHT1, GL_AMBIENT, LightBlack); // add lighting. (ambient)
glLightfv(GL_LIGHT1, GL_SPECULAR, LightGreen); // THIS IS WHAT I ADDED
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightBlack); // add lighting. (diffuse).
glLightfv(GL_LIGHT1, GL_POSITION, LightPosition); // set light position.
...
glutSolidTeapot(0.8f);
然而,结果似乎所有的灯都关闭了,根本没有灯。似乎GL_SPECULAR不起作用。那是为什么?
使用glDisable(GL_LIGHTING);
使用glDisable(GL_LIGHTING);
答案 0 :(得分:4)
您还需要调整材质的镜面反射(乘以光的镜面反射)和光泽(调整热点的衰减)属性。这些的默认值为零。试试这个:
GLfloat white[] = { 1.0f, 1.0f, 1.0f, 1.0f };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 80.0f);