名称:
glLight —— 设置光源参数
函数原型:
void glLightf(GLenum light, GLenum pname, GLfloat param);
void glLightx(GLenum light, GLenum pname, GLfixed param);
函数参数:
light 指定一个光。光的数量要看具体的实现,但是至少要支持8个。标识符的形式如GL_LIGHTi,其中i大于等于0,小于GL_MAX_LIGHT。
pname 为light指定一个单值光源参数。可取的值有
GL_SPOT_EXPONENT,
GL_SPOT_CUTOFF,
GL_CONSTANT_ATTENUATION,
GL_LINEAR_ATTENUATION, 和
GL_QUADRATIC_ATTENUATIONparam 指定光源light的pname参数的值
函数原型:
void glLightfv(GLenum light, GLenum pname, const GLfloat * params);
void glLightxv(GLenum light, GLenum pname, const GLfixed * params);
函数参数:
light 指定一个光。光的数量要看具体的实现,但是至少要支持8个。标识符的形式如GL_LIGHTi,其中i大于等于0,小于GL_MAX_LIGHT。
pname 为light指定一个光源参数。可取的值有
GL_AMBIENT,
GL_DIFFUSE,
GL_SPECULAR,
GL_POSITION,
GL_SPOT_CUTOFF,
GL_SPOT_DIRECTION,
GL_SPOT_EXPONENT,
GL_CONSTANT_ATTENUATION,
GL_LINEAR_ATTENUATION, and
GL_QUADRATIC_ATTENUATION
param 指定光源light的pname参数的值或指向一组值的数组指针
描述:
glLight用来设置独立光源参数的值。light用来命名光,并且是形式如GL_LIGHTi的标识符,其中i大于等于0,小于GL_MAX_LIGHT。pname用来指定十种光源的某一种,光源也是使用标示符来表示的。params要么是一个单值要么是一个指向包含新值的数组指针。
调用带GL_LIGHTING参数的glEnable和glDisable函数来开启和关闭光照计算。初始时,光照是关闭的。光源i调用带GL_LIGHTi参数的glEnable和glDisable函数来开启和关闭。
十个光源参数如下:
GL_AMBIENT
params包含四个定点或浮点数值来指定环境RGBA光强度。初始环境光强度为(0,0,0,1)。
GL_DIFFUSE
params包含四个定点或浮点数值来指定漫反射RGBA光强度。GL_LIGHT0的初始值为(1,1,1,1),对于其它的光,初始值都是(0,0,0,0)。
GL_SPECULAR
params包含四个定点或浮点数值来指定镜面反射RGBA光强度。GL_LIGHT0的初始值为(1,1,1,1),对于其它的光,初始值都是(0,0,0,0)。
GL_POSITION
params包含四个定点或浮点数值来指定在奇次对象坐标系统中的光的位置。当glLight被调用时,由模型视图矩阵对点进行转换,并且存储在眼睛坐标系统(eye coordinates)中。如果位置的w组件的值为0,那么该光将被认为是定向光源。漫反射和镜面光照要使用到光的方向,但考虑到衰减被关闭,因此并不是它的真正的位置。否则,漫反射和镜面光照计算将基于眼睛坐标系统中的光的真实位置,此时要开启衰减。初始位置为(0,0,1,0),所以初始时光源是定向的,并且平行于z轴,在-z轴方向。
GL_SPOT_EXPONENT
params是一个指定光照强度的单定点或浮点数值。取值范围是[0, 128]。有效的光照强度是通过光照方向和光到被光照的顶点方向的夹角的cos值进行衰减得到的,直到点光指数的值。因此点光指数越大,聚光效果就越好,此处不考虑点光的切角问题。初始点光指数为0,得到的是一个均匀的光照分布。
GL_SPOT_DIRECTION
params包含三个定点或浮点数值来指定在奇次对象坐标系统中的光照方向。当glLight被调用时,点光的方向由上3*3模型视图矩阵来转换,并存储在眼睛坐标系统中。它只在GL_SPOT_CUTOFF不是180时才是有效的,这是初始设定的。初始方向是(0,0,-1)。
GL_SPOT_CUTOFF
params是一个单定点或浮点数值来指定一个光源的最大扩展角度。取值范围是[0, 90]和特定值180.如果光线方向和光到被照射顶点的方向之间的夹角比点光的切角大,那么,光照将被完全掩盖。否则,它的强度由点光指数和衰减因子控制。初始点光切角是180,得到的是一个均匀光照分布。
GL_CONSTANT_ATTENUATION,GL_LINEAR_ATTENUATION,GL_QUADRATIC_ATTENUATION
params是一个单定点或浮点数值来指定三个光照衰减因子之一。取值范围是非负数。如果光是可定位的而不是定向的,它的强度由常数因子总和的倒数来衰减,线性因子与光和被照射顶点之间的距离有关,平方因子与该距离的平方有关。初始衰减因子为(1,0,0),即没有衰减。
注意:
GL_LIGHTi = GL_LIGHT0 + i 。
错误:
GL_INVALID_ENUM 如果传入light或pname参数的值是不可接受的。