autocad2010 64位序列号: 356-72378422 申请号: U2N9 75YL UF17 27R4 HX22 3WQ9 932N Z03Z 64位的。

游戏开发资源网授权发表

这个教程要面对的初学者文中代码说明分以中的为例进行讲解。如果没有矢量运算基础,或是对流程不熟悉的朋友推荐《游戏程序计入门》(翁云兵?译)这本电子文档,图书推荐《游戏开发导引》(?至军)作为入门读物另外的帮助文件永远是开发人的参考手册

阴影贴图)是年提出的,可以说是所有影处理中最简单的?法图展示了使用这一方法的渲效果。

:图中为一立方体在一聚光灯照射地面呈現的阴影效?

在阴影贴算法中,每个光源?相当于一个独立的摄像机,都有个一个独的阴影贴图。

(比如说景需要两盏灯光?么就需要建立三个摄像机,一号二号摄像的位置和朝向与两?灯光相同,三号摄像&为真正渲染成最终面的摄像机。)

这里的阴贴图不同于我们鉯往使ī的类型的彩色贴图而是即每点存储位灰度的格式。外每个阴影贴图还要使用深度模板

展示了一个局外视角观察的场景Φ摄机,物体灯光的?境。

:摄像机坐标系世界坐标系,灯光标系

立方体下阴影可以用如下方?描述:

首先以灯光为视点?渲染出一幅带深度缓冲的平面阴影贴图展示的是以灯光为视点我我看到的平面阴影?图。

:以灯光为摄像机位置我们所看到图像。

此平媔图是一张位灰度经过深度模版处理过的阴影贴灰度代表以灯光?点出发,穿过投影面&点形成的射线经$的所有场景中的点中最近的那個点地深度,把该值通过某种?射变为灰度值,并且该条射线所有穿过的灰度值都被设定为?这个灰度。

可以看到阴影贴图中我们是?不到任何阴影的,这符合我们的常识,图的颜色灰度记录了?灯光视角点出发一条&线上所有顶点的深度值信息我们把深度转换为灰度颜色渲染成圖这些度我们成为“深度相对灰度”,那些被遮挡的顶点恰恰是产生阴影点(有关深度解释请查看前面提供的参考书)

下面我们的任務就是要在正常坐标系找出这些被遮挡的?,然后把它们渲染成&色就完成了我门部的工作。我们发现这些在灯光摄像机下被遮挡点何其咜点?正常摄像机下的区别是:把正常摄像机坐系的点变换到灯光?标系,然后投影变换&得到了和图相同视角的图

:没有阴影贴图的囸常摄像机视角

那些被遮挡点代表?度相对灰度与阴影贴图的代表灰度的颜色比是大的而其它亮区的点经过正常摄像机到灯摄像机变换,燈光?像机投影变换这两次&标系变换后深度对灰度的颜色与阴影贴图的灰度的颜色相是相同的。

显示了这一比较渲染过程三点都是瑺摄像机可以看到?点,但在灯光摄像机下被投影成了一条线灰度相同为(均为点的深度相对灰度)的点,并被制成影贴图我们把正?攝像机下的点变换到&坐标系,投影化仍然保留了原来的?度相对灰度用原来的深度相对灰度阴影图同样点的灰?作比较就可以得出该&是否处在阴影中的

我们就可以用把这些点独处理成阴影。

我们主要析中的例子该源文件在

其中调用用户函数()()

()之前我们都可鉯加入我们自己的始化函数,比如

是为了让在该调用的时候调用我们己写的函数,比如()

()是测试硬件支持的用户函数

()是更妀设备调用的用户函数,之调用()

我们的主工作将集中在:

其中()调用()来辅助完成渲染

然后设定常摄像机的位置

设定灯光锥体張开角度大小

加载网格型并把模型顶点格ó变为顶点声明格式

设定正常像机和灯光摄像机?投影矩阵

把灯光的反射,张角传递给

更新模型位置更新摄像机位置

首先判断光是否为自用移动?态,为了便于说明,以下我们仅以自由灯为例

把灯光摄机变换矩阵赋予

然后把设下的舊的,和保存起来并把新?设为纹理下的表面,把设为我们要返回的?标,目的是把图像渲染到纹理中用保存深度信息,流程见图

开始渲染纹理和深度模版

这里我们原程序改一下以便?解

渲染时可以不进行""&""&的操作。(""&""&是第二次渲染正常?像机时候需要传读的参数)

矗接进行""然后以灯光摄像机为视点开始渲染深

&n 把深度两个分量相?,得到颜色灰度,这就是我们说的深度到度的映射关系

下面我们析一下玳码在做什?

假定输入点经过灯光摄像机?标系变化后的位置为

该灰度被染到了纹理中然后我们取出旧面,和深度模版面渲染常摄像機的场景

在调用前我们多了一个矩阵,这个矩阵目的是把正常像机坐标系中的点?换到世界坐标系下&变换到灯光摄像机标系下,在做投影变换

图中点是最下黑点的正常摄像机?标系下的向量,通过世界变换矩阵变到了向量,再过灯光摄像机矩阵?到了在通过投影矩阵變到了灯光摄像机的影空间。这个投影?间的深度灰度要比阴&贴图的深度灰度大A因为的长度大黑点在阴影贴图中?深度所以那个黑点是位於阴影域的

 输出投影变换后的顶点

 对法线进行摄像机坐标系换

把正常摄机坐标系的顶点变?灯光投影面中

如果这个向量在灯光主轴上的投影大一个值则说明这个?超出了照射范围

以下是投影空间到ń理空间的变换

以下分了四种情况?行灰度的判断。并进行了空域滤波

如果昰纯阴影的话?们可以知道的值是,如果是光照射面的话的值是如果是的边缘的话,值介于之间

如果在灯照范围之?的点进行下面处理

返回这个像素点在ń理贴图的像素颜色,并乘了一个代表明暗漫反射系数代表光?

如果不考空域滤波,我们可?让<

代码的意是阴影貼图上的该?素点的深度相应灰度&

正常摄像机变到灯光投影后分量相除结果。

就会发现们对进行了同样的深度?度映射,只不过我们没有再渲染纹理。这两个经过同样处理?值可以进行比较了。&较的结果就是该点否处于阴影区域的判据

然后我们阴影区域中的象素?漫反射乘渲染,在光区域中的象素点?反射乘渲染

到此为止的思想和核心代码已经讲完毕了。希望大家?研究研究代码还是有&处的越学会觉嘚!己知识越贫乏,这就对了

我要回帖

更多关于 autocad2010 64位 的文章

 

随机推荐