游戏程序设计3.docVIP

  • 0
  • 0
  • 约5.41千字
  • 约 5页
  • 2017-02-01 发布于重庆
  • 举报
游戏程序设计3

任课教师:桂江生 《游戏开发》 (2013-2014学年第1学期) 实 验 报 告 学号:2011329700130 姓名:张军伟 班级:11数媒1班 实验三:基于BSP技术的室内场景渲染 一、实验目的 掌握BSP的原理,熟悉Ogre中基于BSP技术的室内场景渲染的使用方法. 二、实验仪器 Visual Studio 2008 三、实验原理及过程 //网上检索BSP相关技术 BSP Trees英文全称为Binary Space Partioning trees,二维空间分割树,简称为二叉树。 BSP原理 建立BSP Trees的最初想法是获得一个图元的集合,这个集合是场景的一部分,然后分割这个图元集合为更小的子集合,这里必须注意子集合必须为“凸多边形”。这意味着子集合中任一个多边形都位于相同集合中其它多边形的“前面”。 BSP相关技术 隐藏面剔除 室内场景中光照运算 BSP树的预渲染 //利用Ogre实现基于BSP技术的室内场景渲染描述程序实现时的思路包括对每个调用的API进行详细说明。 关于Radiosity的算法最早是由Goral、Cindy M、Torrance、Kenneth E、Greenberg、Donald P、Battaile和Bennett在论文《Modelling the interaction of light between diffuse surfaces》提出的。他们使用Radiosity来模拟能量在漫反射表面之间进行传送,漫反射表面对照到表面上的光线在所有的方向上都进行相同的反射,和它相反的是镜面反射表面,它只在反射方向上传播反射光。由于漫反射表面的这个特性,这就意味着对于所有的观察角度而言看起来表面都是相同的,这样对于场景中的每一个表面只需要进行一次光照运算,而且可以在场景的预渲染时进行,因此这项技术被大量的3D游戏所采用。 下面我再简短的讲解一下Radiosity是如何工作的,而将主要的精力放在如何使用BSP树来加速Radiosity的计算,对于Radiosity的详细介绍请参考前面的章节。Radiosity技术是设计用来使场景中光照看起来更加真实和光滑,如果我们使用一个一直向前传播而不考虑反射的光照模型,那么当场景中的灯光照亮场景中的物体时,并不会计算远处经过反射过来的光线,这样场景中的阴影看起来非常尖锐而物体表面也看起来非常不真实。为了使用radiosity技术我们需要把场景分割成一块一块很小的部分,每一部分我们称它为patch,每一个patch都有一个初始化的能量级别,如果它不是一个灯光这样的发光体的话通常为0,有许多方法来分配场景中的能量,这里我们将要使用的方法称为交互式radiosity。这个方法的过程是我们从场景中未发送能量的级别最高的patch开始发送能量,能量经过传递后将不再发送能量的patch的等级设为0,重复这个过程直到场景中的每一个patch的能量等级都小于一个预定值为止。 当能量从一个patch(j)开始发送到另一个patch(i)时我们使用下面的公式: Bi = Bi + Bj * Fij * Ai / Aj 这里Bi = patch(i)的能量级别 Bj = patch(j)的能量级别 Ai= patch(i)的作用区域 Aj = patch(j)的作用区域 Fij = patch(i)与patch(j)之间的系数 在公式中系数Fij是由以下公式来确定的: Fij = (cos qi * cos qj) / d2 * Hij 这里Fij = patch(i)与patch(j)之间的系数 qi = patch(i)与patch(j)法线之间的夹角 qj = patch(i)与patch(j)法线之间的夹角 d = patch(i)与patch(j)之间的距离 Hij = patch(i)与patch(j)之间的可见性系数。如果在两个patch之间只有一条光线可以跟踪,这个值为1,如果没有光线可以跟踪为0。一般情况下由于每一个patch都不是一个点而是一个区域,因此光线有很多条。 从上面的公式中我们可以看到在场景中进行radiosity计算是非常耗费时间的。这个函数的复杂度为O(n3),这里的n为场景中patch的数量。由于对于场景中每一个patch你需要发送最少一条光线到其它patch上,因此需要对场景中的几乎所有的多边形都进行光线跟踪计算。在上面的公式中系数H的计算非常耗费时间,下面我们将看一下如何在BSP树中对它的计算进行优化。 BSP树中的radiosity计算 在进行场景中的光照计算之前需要把场景中的面分割为patch,一个方法是在开始的时候设定每一个patch为预定的大小,当计算每一个patch的能量时

文档评论(0)

1亿VIP精品文档

相关文档