PS:自己翻译的,转载请著明出处格
                                                              6-11 添加渐变的能力到你的Deferred Shading引擎
问题
                     虽然你已经掌握了基本的光照在实时的计算机图形中,可以注意你的对象不能蒙上阴影。这是因为你的象素着色器计算光照在一个象素中基于在光的方向和法线之间的角度。直到现在,你的象素着色器不能考虑任何在光和象素之间的对象。
解决方案
                     一个很好的技术为添加阴影到你的场景中是阴影映射技术。我已经详细的讨论这个技术。
                     总之,每一个象素的阴影映射技术比较真实的在象素和光照之间的距离,根据距离尽量被光照看见。如果真实的距离比光可以看见的距离大,必须有个对象在象素和灯之间,所以象素不应该被点亮。
                     允许这个比较,灯照射看见的场景应该首先被绘制,所以每一个象素它自己的距离到这灯能保成一个纹理。
                     如果你想要执行这个阴影映射的deferred 绘制版本技术,你首先需要生成一个深度图片为你每一个灯。一旦你已经做了这些,阴影影射比较应该运用于deferred绘制的第二步骤。
它如何工作的
                     这节将建成整个在前面的章节之上,确保你从这些代码开始。
                     前面章节的步骤1将不会变,因为你仍然需要颜色,法线和深度值为场景中的每一个象素。
Generating the Shadow Maps
XNA代码
                     在你可以定义你的灯的一个的lighting contribution在步骤2中,虽然,你需要生成阴影影射为这个灯。这个阴影影射包含场景到灯的距离。需要添加一个绘制目标和两个纹理变量:一个保存距离,一个返回图象你重新使用另外一个。

1 RenderTarget2D shadowTarget;
2 Texture2D shadowMap;
3 Texture2D blackImage;

初始化绘制目标和返回图象在你的LoadContent方法中:

1 shadowTarget=new RenderTarget2D(device,width,height,1,SurfaceFormat.Single);
2 blackImage=new Texture2D(device,width,height,1,TextureUsage.None,SurfaceFormat.Color); 

接下来,进入你的GenerateShadingMap方法中。这个方法被用来混合所有灯的lighting contribution成一个纹理使用alpha混合。这可以不在被处理,因为你需要生成一个新的阴影影射在两个混合操作之间。换句话说,这将导致在阴影地图混合成阴影影射。
                     而不是alpha混合,保存阴影影射在每个灯之后添加它自己的lighting contribution.首先,清除阴影映射通过使用返回的图象:

 1 private Texture2D GenerateShadingMap()
 2 {
 3     shadingMap=blackImage;
 4     for(int i=0;i<NumberOfLights;i++)
 5     {
 6          RenderShadowMap(spotLights[i]);
 7          AddLight(spotLights[i]);
 8     }
 9     return shadingTarget.GetTexture();
10 }

转载于:https://www.cnblogs.com/315358525/archive/2009/08/16/1547091.html

[翻译]XNA 3.0 Game Programming Recipes之forty-seven相关推荐

  1. [翻译]XNA 3.0 Game Programming Recipes之forty-eight

    PS:自己翻译的,转载请著明出处                                                                    7-1 播放,控制简单的.wav ...

  2. [翻译]XNA 3.0 Game Programming Recipes之twenty-one

    PS:自己翻译的,转载请著明出处格                                               4-4 使用加速控制速度 问题     您想使您的模型很好的加速,而不是 ...

  3. [翻译]Oreilly.Learning.XNA.3.0之eight

    PS:自己翻译的,转载请著明出处                                                                  第十七章   多人游戏        ...

  4. [翻译] C# 3.0语言规范 收藏

    [翻译] C# 3.0语言规范 收藏 http://lover_p.cstc.net.cn/lover_P/doc/t-csharp3/ 1 具有隐式类型的局部变量 2 扩展方法 2.1 声明扩展方法 ...

  5. 微软游戏开发工具XNA 2.0[转自驱动之家]

    微软游戏开发工具XNA 2.0[转自驱动之家] 今天,微软发布了其免费游戏开发工具的最新正式版"XNA Game Studio 2.0",可以更轻松地开发Windows和Xbox ...

  6. 中国一汽发布L4级智能驾驶技术,解放商用车率先使用;科大讯飞今日将发翻译机2.0版本;阿里巴巴已以50亿控股全球第二大WiFi芯片商乐鑫信息科技

    中国一汽发布L4级智能驾驶技术,解放商用车率先使用 4月18日, 中国一汽解放J7下线暨L4级系列智能车发布活动在山东青岛成功举行.一汽解放全新换代产品J7正式下线,并对外发布L4级系列智能车.未来, ...

  7. 匹马抢三关:讯飞翻译机3.0的破障之战

    技术和市场的两股气旋,正在催促翻译机加速奔跑. 根据中国旅游研究院统计,2018年全年中国出境游旅客达到1.4亿人次,比2017上涨1100万,同比增幅达到了13.5%.时至今日,我们已经可以确凿地说 ...

  8. [转]xna 3.1 to xna 4.0

    XNA 3.1 to XNA 4.0 Conversion Cheat Sheet 转自:http://nelxon.com/resources/xna-3-1-to-xna-4-0-cheatshe ...

  9. XNA 3.0小例子

    MS昨天发布了XNA Game Studio 3.0游戏开发工具的首个社区技术预览版(CTP),以下是一些相关信息. XNA Game Studio 3.0正式版预计到今年年底才会发布,目前的CTP预 ...

最新文章

  1. 2016年中国数据安全五大发展趋势
  2. 当sql 没有足够的内存执行程序利用命令执行
  3. jps,jstat,jinfo,jmap,jhat,jstack工具的使用/查看Linux磁盘信息
  4. jenkins安装 新建节点(5)
  5. 《精通javascript》几个简单的函数(二)
  6. 用Android Studio 出现的问题
  7. Linux进阶之进程与线程
  8. python画简便的图-python 实现在一张图中绘制一个小的子图方法
  9. 22计算机408考研—数据结构—线性表、栈、队列、数组
  10. it职位简称_IT行业常见职位英文缩写
  11. 计算机无法连接路由器上网,电脑连接路由器不能上网怎么办
  12. python如何调用pyd_C#调用pyd
  13. 姓氏头像框一键制作小程序源码
  14. F8BT, PFBT, PFO-BT cas:210347-52-7,齐岳提供聚合物光电材料
  15. PointNet++理解(PointNet++实现第2步)
  16. const violate
  17. 【web渗透思路】框架敏感信息泄露(特点、目录、配置)
  18. calico 打通研发电脑到POD的访问
  19. 如何关闭iPhone打电话时音频里面的Mac选项
  20. SRRC认证样品要求 - 无线电发射设备型号核准设备类型及样...

热门文章

  1. 数据库设计:范式与反范式
  2. amazon linux 用户名,如何在Amazon AWS上设置一台Linux服务器
  3. mysql5.7.11解压安装_mysql 5.7.11解压安装教程
  4. 【Luogu 3389】【模板】高斯消元法(用高斯消元求解线性方程组)
  5. 【CCCC】L2-021 点赞狂魔 (25分),,模拟水题,map数组,间接排序
  6. C++奥赛一本通贪心题解
  7. 【编辑器】Vim学习笔记
  8. mysql 小时数列,MySql时区问题
  9. jquery选择器之过滤选择器
  10. 数据结构—线索二叉树