2

在红皮书的球体照明示例中,我读到了以下内容:

GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);

然后它说:

在此示例中,对 glLightfv() 的前三个调用是多余的,因为它们用于指定 GL_AMBIENT、GL_DIFFUSE 和 GL_SPECULAR 参数的默认值

据我所知,每个光源都有其环境、漫反射和镜面反射参数的默认值,这三个数组指定了这些默认值,对吗? 默认情况下是否每个光源都是漫反射、镜面反射和环境光?

4

2 回答 2

4

在 OpenGL 光照模型中,为一个对象计算 4 个单独的光照方程:环境光、漫反射、镜面反射和发射。Ambient 不考虑法线,Diffuse 和 Specular 考虑,而 Emission 根本不考虑光。

将所有这些不同的光照值相加得出对象的最终颜色。

于 2010-12-01T16:43:57.623 回答
2

是的,这些是 Light0 的默认值:http ://www.opengl.org/sdk/docs/man/xhtml/glLight.xml

于 2010-12-01T16:34:19.317 回答