OpenGL中的颜色、光照和材质(一)——OpenGL的光照模型

一、 OpenGL的光照模型
       OpenGL的光照模型模拟了现实生活中的光照。它根据顶点的法向量和光源的位置,决定顶点的明暗程度;根据顶点的材质和光源的颜色,决定顶点的颜色。
       光照计算时,OpenGL采用的是简单光照模型,只考虑环境光和光源直接入射光,不考虑物体间的反射光和透射光。且不考虑物体间的相互遮挡,因此没有阴影。
 
  1. 环境光
       环境光是指光源间接对物体的影响,是在物体和环境之间多次反射,最终达到平衡时的一种光。我们近似地认为同一环境下的环境光,其光强分布是均匀的,它在任何一个方向上的分布都相同。例如,透过厚厚云层的阳光就可以称为环境光。在简单光照模型中,我们用一个常数来模拟环境光:
       I e= I a·K a
       其中: Ia为环境光的光强,Ka为物体对环境光的反射系数。
                                                              
 
  2.全局环境光 (场景环境光)
       全局环境光不依赖于任何特定光源。
       全局环境光概念的提出使得即使场景中没有任何光源,观察者也可以看到物体。
 
  3. 漫射光(Lambert模型)
        漫反射由表面的粗糙不平引起,它均匀地向各方向传播,与视点无关。记入射光强为Ip,物体表面上点P的法向为N,从点P指向光源的向量为L,两者间的夹角为θ,则漫反射光强为:
       Id = Ip*Kd*cos(θ) θ∈(0,π/2)
       其中,Kd是与物体有关的漫反射系数, 0<Kd<1 。
       当L、N为单位向量时: Id = Ip*Kd* (L·N)
                                                                                                    
  4. 镜面光(Phong模型)
       对于理想镜面,反射光集中在一个方向,并遵守反射定律。对一般的光滑表面,反射光集中在一个范围内,且由反射定律决定的反射方向光强最大。因此,对于同一点来说,从不同位置所观察到的镜面反射光强是不同的。镜面反射光强可表示为:
       Is = Ip*Ks*cosn(α), α∈(0,π/2)
       其中Ks是与物体有关的镜面反射系数,α为视线方向V与反射方向R的夹角,n为反射指数,反映了物体表面的光泽程度,一般为1~2000,数目越大物体表面越光滑。镜面反射光会在反射方向附近形成很亮的光斑,称为高光现象。
       同样,将V和R都格式化为单位向量,镜面反射光强可表示为:
       Is = Ip*Ks*(R· V ) n
       镜面反射光产生的高光区域只反映光源的颜色,镜面反射系数Ks是一个与物体的颜色无关的参数(与光洁程度有关)。综合前面已经提到的,在简单光照模型中,我们只能通过改变物体的漫反射系数来控制物体的颜色。
                                                        
 
  5.OpenGL 中的顶点颜色计算公式
           
 
     未完待续......
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值