首页 > 其他 > 详细

Directx教程(25) 简单的光照模型(4)

时间:2019-05-06 10:25:11      阅读:126      评论:0      收藏:0      [点我收藏+]
原文:Directx教程(25) 简单的光照模型(4)

     在本篇日志中,我们尝试用不带衰减的点光源来计算漫反射颜色。

    前面的三个工程,我们都用的是方向光源(directional light),它的特点是没有光源位置或者说光源位置位于无穷远处,且光线在各个方向都是平行的,所以在工程myTutorialD3D11_17中,我们看到的程序界面上,cube每个面上的颜色都是一样的[因为diffuse光占颜色的大部分]。

    方向光原理可用以下图表示:

技术分享图片

     现在我们尝试点光源,点光源原理如下:

技术分享图片

    因为计算漫反射时候,每个顶点的漫反射颜色都和到光源位置向量有关,所以我们可以修改light.vs如下:

   //自发射颜色
    float4 emissive = Ke;
   
    //计算环境光
    float4 ambient = Ka * globalAmbient;
   
    //计算漫反射光
    //用LightDirection就是纯平行光
    //光源位置减顶点位置,是不考虑衰减的点光源
     float3 L = normalize(lightPosition.xyz - P);
     float diffuseLight = max(dot(N, L), 0);
     float4 diffuse = Kd * lightColor * diffuseLight;

     //计算高光
     float3 V = normalize(cameraPosition.xyz - P);
     float3 H = normalize(L + V);
     float specularLight = pow(max(dot(N, H), 0), shininess);
 
      if ( diffuseLight <= 0)
          specularLight = 0;
      float4 specular = Ks * lightColor * specularLight;

      output.color = emissive + ambient + diffuse + specular;

注意L的计算,我们这儿取归一化的光源顶点->光源向量。

程序的最终效果如下,看以看出比前一个工程中的方向光的效果要好一些:

技术分享图片

完整的代码请参考:

工程文件myTutorialD3D11_18

代码下载:

http://files.cnblogs.com/mikewolf2002/myTutorialD3D11.zip

Directx教程(25) 简单的光照模型(4)

原文:https://www.cnblogs.com/lonelyxmas/p/10817602.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!