现在的位置: 首页 > 综合 > 正文

OpenGL ES之glLight函数

2014年01月19日 ⁄ 综合 ⁄ 共 2633字 ⁄ 字号 评论关闭

名称:

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_ATTENUATION

param    指定光源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参数的值是不可接受的。

抱歉!评论已关闭.