OpenGL 点光源 在OpenGL 场景描述中可以包含多个点光源,光源的各种属性设置使用函数: void glLight{if} (GLenum light, GLenum pname, TYPE param); void glLight{if}v (GLenum light, GLenum pname, TYPE *param); 指定
其中,参数light 指定进行参数设置的光源,其取值可以是符号常量GL_LIGHT0,GL_LIGHT1,…,GL_LIGHT7;参数pname 指定对光源设置何种属性,其取值参见表10-1;参数param 指定对于光源light 的pname 属性设置何值,非矢量版本中,它是一个数值,矢量版本中,它是一个指针,指向一个保存了属性值的数组
表10-1 参数pname 的取值及其含义 (1)点光源的颜色 点光源的颜色由环境光、漫反射光和镜面光分量组合而成,在OpenGL 中分别使用GL_AMBIENT、GL_DIFFUSE 和 GL_SPECULAR 指定
其中,漫反射光成分对物体的影响最大
(2)点光源的位置和类型 点光源的位置使用属性GL_POSITION 指定,该属性的值是一个由4 个值组成的矢量(x,y,z,w)
其中,如果 w 值为 0,表示指定的是一个离场景无穷远的光源,(x,y,z)指定了光源的方向,这种光源被称为方向光源,发出的是平行光;如果 w 值为 1,表示指定的是一个离场景较近的光源,(x,y,z)指定了光源的位置,这种光源称为定位光源
(3)聚光灯 当点光源定义为定位光源时,默认情况下,光源向所有的方向发光
但通过将发射光限定在圆锥体内,可以使定位光源变成聚光灯
属性GL_SPOT_CUTOFF 用于定义聚光截止角,即光锥体轴线与母线之间的夹角,它的值只有锥体顶角值的1/2
聚光截止角的默认值为180