局部光照 + zBuffer + 纹理

局部光照 + zBuffer + 纹理
    采用了最简单的局部光照模型,用opengl的光照方程:I = Ia * Ka + Id * Kd * (L dot N)  + Is * Ks * pow((R dot V),n)
    I,L为光照强度和材质参数,L,N,R,V分别是光线反方向,法线,视线反方向,反射光线方向,n为镜面反射因子,这条公式只考虑了环境光(ambient),镜面光(specularity),散射光(diffuse)的影响,实际上还有发射光(emission),不过对于局部光照模型来说,这种发射光没多大意义,稍微修正了下散射光部分,把光线和法线的点积值映射到了(0.0f,1.0f)范围,让背光部分不至于一团黑,公式变为:
  I = Ia * Ka + Id * Kd * (L dot N + 1.0) * 0.5 + Is * Ks * pow((R dot V),n)

 点光源效果:

  局部光照 + zBuffer + 纹理_第1张图片 局部光照 + zBuffer + 纹理_第2张图片
  
 另外把纹理和zbuffer也加上了,纹理采用的是仿射纹理映射,修正纹理映射涉及到浮点的精度问题,在z距离变化比较大的时候纹理跳跃比较严重,暂时还没想到一个合适的解决办法,纹理寻址方式固定范围,不做越界寻址处理,支持双线性纹理过滤,目前纹理图片格式完成了BMP图片的载入

关闭深度测试                                                                                                                          开启深度测试
局部光照 + zBuffer + 纹理_第3张图片 局部光照 + zBuffer + 纹理_第4张图片

你可能感兴趣的:(局部光照 + zBuffer + 纹理)