原文: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)的更多相关文章

  1. Directx教程(29) 简单的光照模型(8)

    原文:Directx教程(29) 简单的光照模型(8)      现在我们新建一个工程myTutorialD3D_23,在这个工程中,对前面一章的代码进行一些整理: 1.我们在顶点属性中增加材质的的漫 ...

  2. Directx教程(28) 简单的光照模型(7)

    原文:Directx教程(28) 简单的光照模型(7)        现实生活中的点光源都是随着距离衰减的,比如一个电灯泡在近处会照的很亮,远处光线就很弱.本节中我们在前面光公式的基础上,再给漫反射和 ...

  3. Directx教程(27) 简单的光照模型(6)

    原文:Directx教程(27) 简单的光照模型(6)      从myTutorialD3D11_15到myTutorialD3D11_19的工程中,我们都只有一个光源,光源的位置在LightCla ...

  4. Directx教程(26) 简单的光照模型(5)

    原文:Directx教程(26) 简单的光照模型(5)     在前面的工程中,我们都是在vs中实现顶点光照计算,然后再把顶点颜色传到ps中.本章中我们尝试fragment光照(或者说叫ps光照),在 ...

  5. Directx教程(24) 简单的光照模型(3)

    原文:Directx教程(24) 简单的光照模型(3)      在工程myTutorialD3D11_17中,我们重新定义我们的cube顶点法向,每个三角形面的顶点法向都是和这个三角形的面法向是一致 ...

  6. Directx教程(23) 简单的光照模型(2)

    原文:Directx教程(23) 简单的光照模型(2)    在工程myTutorialD3D11_16中,我在文件light.vs中定义了一个材质光源属性常量缓冲. //const buffer最好 ...

  7. Directx教程(22) 简单的光照模型(1)

    原文:Directx教程(22) 简单的光照模型(1)      在前面的教程中,我们在顶点属性中直接给顶点赋颜色,这样生成的三维物体缺乏真实感,如下图中两个立方体,左边的是通过光照生成物体表面颜色的 ...

  8. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...

  9. [译]Vulkan教程(25)描述符布局和buffer

    [译]Vulkan教程(25)描述符布局和buffer Descriptor layout and buffer 描述符布局和buffer Introduction 入门 We're now able ...

随机推荐

  1. DFS-深度优先搜索与BFS-广度优先搜索

    1.DFS DFS是一个递归过程.(类似于二叉树的前序遍历) 参考:深度优先搜索(Depth-First-Search)精髓 2.BFS 可以理解为按层遍历,借助队列结构来实现.(类似于二叉树的层次遍 ...

  2. PipeCAD 简介

    PipeCAD 简介 PipeCAD的定位是中小型项目的管道设计软件,主要有管道建模.设备建模以及管道ISO图及平面图功能.程序的操作方式尽量参考PDMS,考虑灵活性.易于使用.如果用来和国内其他管道 ...

  3. 【agc013d】AtCoder Grand Contest 013 D - Piling Up

    题意 盒子里有n块砖,每块的颜色可能为蓝色或红色. 执行m次三步操作: 1.从盒子里随便拿走一块砖 2.放入一块蓝砖和红砖到盒子里 3.从盒子里随便拿走一块砖 给定n,m 问拿出来的砖,可能有多少种不 ...

  4. Django项目: 5.新闻主页

    一.功能需求分析 1.功能 轮播图 推荐文章列表 文章标签导航 文章列表 分页 二.模型设计 根据功能分析,我们需要如下表 1.表和字段分析 文章分类表 文章表 文章评论表 推荐文章表 轮播图表 2. ...

  5. Leetcode458.Poor Pigs可怜的小猪

    有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水.它们从外观看起来都一样.如果小猪喝了毒药,它会在15分钟内死去. 问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少 ...

  6. springcloud的服务提供者与服务消费者

    1.说明 springcloud中由服务消费者调用服务提供者一共有两种方法rest和feign 2.feign (1)使用feign的方式进行服务调,搭建服务提供者. 创建一个web项目(服务提供者) ...

  7. 使用jquery封装一个可以复用的提示框

    首先在html中 <div class="backcap"> <div class="diolag"> <div class=&q ...

  8. 【大数据】Hadoop常用启动命令

    Hadoop常用启停命令 最近在装大数据环境,不知由于年纪大的问题还是笨的缘故,老师记不住一些常用命令,在这里就单独记一下Hadoop常用的启停命令.Hadoop常用的启停命令都在hadoop/sbi ...

  9. union /union all/ intersect / minus

  10. golang学习资料必备

    核心资料库 https://github.com/yangwenmai/learning-golang