为什么GL_SPECULAR不起作用?

时间:2011-05-18 11:01:03

标签: opengl

我已经从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); With glDisable(GL_LIGHTING);

使用glDisable(GL_LIGHTING); With glEnable(GL_LIGHTING);

1 个答案:

答案 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);