OpenGL:如果我将光指定为镜面反射和漫反射会发生什么?

时间:2010-12-01 15:52:56

标签: opengl lighting

在红皮书的球体照明示例中,我读到了这个:

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参数

据我所知,到目前为止,每个光源都有环境,漫反射和镜面参数的默认值,这三个数组指定了那些默认值,是正确的吗? 是否每个光源默认是漫反射,镜面反射和环境光源?

2 个答案:

答案 0 :(得分:4)

在OpenGL光照模型中,为对象计算4个独立的光照方程:环境光,漫反射光,镜面光和发射光。环境不考虑法线,漫反射和镜面反射,并且根本不考虑发射。

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

答案 1 :(得分:2)

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