OpenGL光线

一、OpenGL光照系统

OpenGL光照系统分为3部分:光源、材质、光照环境

  • 光源-光的来源

    //TODO:插入图片讲解

    光的来源可以是太阳、电灯等

  • 材质-接受光照物体的表面

    物体的表面决定了物体反射光线的特点

    //TODO:插入图片讲解

  • 光照环境-包括了一些额外的参数

        //光照环境的参数等以后再列出来,现在还不清楚

        //TODO:插入图片讲解

顶点颜色计算

  • 顶点颜色计算公式

公式中的变量说明:

        emission_material:物体发射光(对应OpenGL属性为:GL_EMISSION)

        ambient_material:反射(光线的ambient成分)系数

        diffuse_material:反射(光线的diffuse成分)系数

        specular_material:反射(光线的specular成分)系数

        shininess:物体表面的镜面反射指数(对应OpenGL属性为:GL_SHININESS)

 

        ambient_lightmodel:全局环境光线强度(对应OpenGL属性为:GL_LIGHT_MODEL_AMBIENT)

 

        k_c:位置光源的常量衰减系数(对应OpenGL属性为:GL_CONSTANT_ATTENUATION)

        k_l:位置光源的线性衰减系数(对应OpenGL属性为:GL_LINEAR_ATTENUATION)

        k_q:位置光源的二次方衰减系数(对应OpenGL属性为:GL_QUADRATIC_ATTENUATION)

        ambient_light:光线的ambient成分

        diffuse_light:光线的diffuse成分

        specular_light:光线的specular成分

 

        l:视线方向

        n:顶点的法线方向

        s:入射光方向

 

        spotlight effect://TODO:暂时不知道,以后补上

注意事项://TODO:如果使用了glEnable(GL_LIGHTING);,则此处glColor3f()设置的颜色无效,Fuck,我不知道为什么.写在这里提醒一下自己

二、控制光照系统

  • 控制光源

    OpenGL支持至少8个光源(名字分别是:GL_LIGHT0-GL_LIGHT7)

    每个光源都有如下10个属性:

              (1)GL_AMBIENT

              (2)GL_DIFFUSE

              (3)GL_SPECULAR

              (4)GL_POSITION

              (5)GL_SPOT_DIRECTION

              (6)GL_SPOT_EXPONENT

              (7)GL_SPOT_CUTOFF

              (8)GL_CONSTANT_ATTENUATION

              (9)GL_LINEAR_ATTENUATION

              (10)GL_QUADRATIC_ATTENUATION

  • 控制材质

        每个物体的材质都有如下7个属性

              (1)GL_AMBIENT

              (2)GL_DIFFUSE

              (3)GL_AMBIENT_DIFFUSE

              (4)GL_SPECULAR

              (5)GL_SHININESS

              (6)GL_EMISSION

              (7)GL_COLOR_INDEX

  • 控制光照环境

        光照环境有如下3个属性

              (1)GL_LIGHT_MODEL_AMBIENT

              (2)GL_LIGHT_MODEL_LOCAL_VIEWER

              (3)GL_LIGHT_MODEL_TWO_SIDE

三、代码示例

//TODO:我会将代码一点一点添加用于说明以上概念,请耐心等待

posted @ 2012-12-19 19:45  a-ir  阅读(323)  评论(0)    收藏  举报