OpenGL光照的计算模型

前言

OpenGL中的关照分为Ambient, Diffuse, Specular, Emiiter(模型的)部分,这里将介绍几种计算的模型。最终给出OpenGL的光照计算公式.

 

 

=======

Diffuse分量

Lambertian Reflection模型是针对diffuse分量的, diffuse假定接收到得光的密度跟观察者的位置无关, 它正比于lights diffuse intensity 和material's diffuse reflection 系数, 同时还正比于光线与表面法线的夹角.

                 Diffuse        计算公式为:          

 

下面的一段是Lambert的历史:

          This is known as Lambertian Reflection. 'Lambert's cosine law' states that the brightness of a diffusely radiating plane surface is proportional to the cosine of the angle formed by the line of sight and the normal to the surface. This was more than 200 years ago (Johann Heinrich Lambert, 1728-1777)!

 

 

========

Specular分量

1. Phong model

phong model表明specular分量正比于反射光与观察点向量的夹角的余弦值(cosine).

                

               L向量: 光源--->顶点.     N: 法向量      Eye向量: 顶点--->Eye.   R: 反射光

       当Eye与R的夹角越大,specular越衰减, 衰减系数由shininess控制。shininess越大,衰减越快。

      

 

2. Blinn-Phong model (Or Blinn)

该模型是Phong的简化版, 它是基于Half-Vector的,Half-Vector是入射光与Eye的中间向量。如下图:

                             

          Specular的计算如下:

 


==============

完整的OpenGL光照计算

==============

在光的传播过程中会出现衰减,在OpenGL中有两种情况:1.点光源;2.椎体光.  最终落到顶点时光的各个分量为:

               LAmbient  = 衰减系数 * 椎体光影响 * 初始的ambient;

               LDiffuse    = 衰减系数 * 椎体光影响 * 初始的diffuse;

       LSpecular = 衰减系数 * 椎体光影响 * 初始的specular;

然后和材质进行计算公式为:

        顶点Color =  全局环境光*全局环境光材质  + 各个光源的作用{ Ma * LAmbient) + DFactor * Md * LDiffuse) + SFactor * Ms * LSpecular)}

将上面的等式代入得:

        顶点Color = 全局环境光*全局环境光材质 +

        各个光源的作用{衰减系数 * 椎体光影响 * (Ma * 初始的ambient + DFactor * Md * 初始的diffuse + SFactor * Ms * 初始的specular)}

 

下面逐个介绍一些变量的计算(全部在下图中)

 

 

结束!!


  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值