openGL光照系统

来源:互联网 发布:网络语言的好处 编辑:程序博客网 时间:2024/04/27 21:59

openGL把光照系统分成了三部分:光源,材质和光照环境。(openGL没有考虑光的折射)

1.      控制光源:

第一个参数表示设置哪一个光源的属性,第二个参数表示设置这个光源的哪个属性,第三个参数则表示把该属性值设置为多少;

               glLightfv(GL_LIGHT0, GL_POSITION, sun_light_position);

 

GL_POSITION表示光源所处的位置,其值用(X,Y,Z,W)来表示,如果W0的话表示光源在无

 

    限远处,前三个值则表示了它的方向,这种光源叫做方向性光源。

 

        如果w不为0,则X/W, Y/W, Z/W表示光源的位置;这种光源叫做位置性光源;

glLightfv(GL_LIGHT0, GL_AMBIENT,  sun_light_ambient);

 

GL_AMBIENT表示光源发出的光经过很多次的反射后留在光照环境中的强度;

         glLightfv(GL_LIGHT0, GL_DIFFUSE,  sun_light_diffuse);

 

GL_DIFFUSE表示光源发出的光照射到粗糙表面时经过漫反射后得到的光的强度;


                   glLightfv(GL_LIGHT0, GL_SPECULAR, sun_light_specular);

 

                      GL_SPECULAR表示光源发出的光照射到光滑表面时经过镜面反射后得到的光的强度;

 

                           GL_SPOT_DIRECTIONGL_SPOT_EXPONENTGL_SPOT_CUTOFF属性。表示将光源作为聚光灯使用

 

(这些属性只对位置性光源有效)。

 

                           GL_CONSTANT_ATTENUATIONGL_LINEAR_ATTENUATION                                    GL_QUADRATIC_ATTENUATION

 

性。这三个属性表示了光源所发出的光线的直线传播特性(这些属性只对位置性光源有效)。

2.       控制材料:

第一个参数表示指定哪一面的属性(FRONT and BACK);

glMaterialfv(GL_FRONT, GL_AMBIENT,   earth_mat_ambient);
        glMaterialfv(GL_FRONT, GL_DIFFUSE,   earth_mat_diffuse);
        glMaterialfv(GL_FRONT, GL_SPECULAR,  earth_mat_specular);
        glMaterialfv(GL_FRONT, GL_EMISSION,  earth_mat_emission);

 

GL_EMISSION属性由四个值组成,表示一种颜色。OpenGL认为该材质本身就微微的向外发射光线,

 

以至于眼睛感觉到它有这样的颜色,但这光线又比较微弱,以至于不会影响到其它物体的颜色。


        glMaterialf (GL_FRONT, GL_SHININESS, earth_mat_shininess);

 

 

  GL_SHININESS属性只有一个字,叫做“镜面指数”,取值为0128;值越小表示材质越粗糙,光线

 

照在上面能形成较大的亮点。反之类似于镜面。

3.      选择光照模型:

      “光照模型”即相当于“光照环境”;

 

原创粉丝点击