在场景中添加光线——概述

给场景添加光照听起来很简单:设置3D世界中物体的位置,定义光源的位置就可以了。但是,虽然看起来让显卡实现光照很简单,其实不是。

对物体的每个表面,显卡需要计算表面接受光照的数量,这个光照数量是基于光线方向和表面法线方向的夹角的。幸运的是,XNA框架拥有BasicEffect,它可以为你进行所有的计算。本章第一部分解释如何使用BasicEffect给场景添加光照。

但是,如它的名称所示,BasicEffect只能用来计算基本的光照。如果你想在场景中添加点光源该怎么办呢,例如一个蜡烛?或许你还想在场景中添加多个光源,给物体添加阴影。

要解决这些问题,你需要在HLSL中编写自己的effect。本章的第二部分首先介绍创建与BasicEffect相同功能的HLSL effects。

然后你要学习如何实现额外的功能,诸如支持点光源和聚光灯。最后一个教程介绍延迟绘制(deferred rendering),让你可以同时使用大量的光源照亮场景,你还将学习如何使用延迟绘制组合阴影映射技术让物体产生阴影。
本章的教程包含以下内容:

  • 学习XNA 3.0中光照的基本知识,包括正确的光照需要什么以及为什么需要(教程6-16-2).
  • 使用BasicEffect计算屏幕上所有像素的光照,在反光表面添加镜面高光(教程6-36-4)
  • 当BasicEffect功能不足时编写自己的HLSL effect。首先实现BasicEffect的基本功能(教程6-5, 6-76-9)
  • 实现额外的功能,诸如支持点光源和聚光灯(教程6-66-8)
  • 使用多个光源让场景更生动。因为基本方法不够用,你需要使用延迟绘制在屏幕中添加光照(教程6-10)
  • 使用阴影映射技术添加阴影。你使用延迟绘制方法实现这个效果,让你可以实现多个光源的阴影(教程6-11)
原文地址:https://www.cnblogs.com/AlexCheng/p/2120103.html