一种基于阴影图的软阴影绘制方法技术

技术编号:15748017 阅读:57 留言:0更新日期:2017-07-03 06:42
本发明专利技术公开一种基于阴影图的软阴影绘制方法,包括如下步骤:S1、选取并组合模型面向光源的轮廓边,得到模型面向光源的轮廓;S2、扩充模型面向光源的轮廓,得到模型面向光源的轮廓的平滑面;S3、在模型面向光源的轮廓的平滑面中绘制软阴影。本发明专利技术所述技术方案提高了阴影渲染速度,为实时阴影绘制提供了新的途径,提高了三维场景绘制的逼真度。

【技术实现步骤摘要】
一种基于阴影图的软阴影绘制方法
本专利技术涉及一种软阴影绘制方法。更具体地,涉及一种基于阴影图的软阴影绘制方法。
技术介绍
随着基本的图形处理趋于完善,越来越多的人将注意力聚集在图形表现的真实性上,阴影在提升3D图形的真实感方面发挥着极大的作用,阴影不但可以帮助人们理解物体相对场景的位置,阴影接受者的表面特征和阴影投射者的几何特征,还可以反映出场景中光源所在的位置。相对于硬阴影而言,软阴影考虑了更为真实的情况,更加真实的模拟了光照中的阴影,它将影子分为本影和半影,通过改进计算半影所在的光照强度,实现半影到本影的渐变过程,达到真实感绘制的效果。传统的基于阴影图的软阴影算法在逼真显示及效率方面存在矛盾,若要保证高显示质量,则其效率有限,无法满足大型复杂场景的实时渲染需求,若保证效率,但阴影的精确性不高,因此,无法满足当今计算机图形应用的要求,急需对传统的基于阴影图的软阴影算法进行改进。因此,需要提供一种基于阴影图的软阴影绘制方法。
技术实现思路
本专利技术的目的在于提供一种基于阴影图的软阴影绘制方法。为达到上述目的,本专利技术采用下述技术方案:一种基于阴影图的软阴影绘制方法,包括如下步骤:S1、选取并组合模型面向光源的轮廓边,得到模型面向光源的轮廓;S2、扩充模型面向光源的轮廓,得到模型面向光源的轮廓的平滑面;S3、在模型面向光源的轮廓的平滑面中绘制软阴影。优选地,步骤S1进一步包括如下子步骤:S1.1、遍历所有构成模型的三角形面,选取其中面向光源的三角形面;S1.2、遍历选取的面向光源的三角形面的边,选取模型面向光源的轮廓边;S1.3、组合模型面向光源的轮廓边,得到模型面向光源的轮廓。优选地,步骤S1.1中选取面向光源的三角形面的方法为:计算光源方向的法向量与遍历的所有构成模型的三角形面法向量的点积,如果点积大于0,则这个三角形面面向光源,如果点积小于等于0,则这个三角形面背向光源。优选地,步骤S1.2进一步包括如下子步骤:S1.2.1、建立堆栈并把遍历的第一条面向光源的三角形面的边加入堆栈;S1.2.2、依次把面向光源的三角形面的边压入堆栈并且比较堆栈中的边与当前遍历的边,如果堆栈中存在与当前遍历的边相同的边,则不把该边加入堆栈且把在堆栈中的与该边相同的边删除;如果堆栈中不存在与当前遍历的边相同的边,则把当前遍历的边加入堆栈;S1.2.3、依次遍历完所有的面向光源的三角形面的边之后,堆栈中的边即为模型面向光源的轮廓边。优选地,步骤S3中绘制软阴影的方法为:利用模型平滑面生成半影深度图和半影Alpha纹理图,完成模型的软阴影的绘制。本专利技术的有益效果如下:本专利技术所述技术方案提高了阴影渲染速度,为实时阴影绘制提供了新的途径,提高了三维场景绘制的逼真度。附图说明下面结合附图对本专利技术的具体实施方式作进一步详细的说明。图1示出基于阴影图的软阴影绘制方法的流程图。图2示出模型多边形轮廓边示意图。图3示出以边V2-V3为例的模型多边形扩充示意图。具体实施方式为了更清楚地说明本专利技术,下面结合优选实施例和附图对本专利技术做进一步的说明。附图中相似的部件以相同的附图标记进行表示。本领域技术人员应当理解,下面所具体描述的内容是说明性的而非限制性的,不应以此限制本专利技术的保护范围。如图1所示,本实施例提供的基于阴影图的软阴影绘制方法的具体步骤为:S1、选取并组合模型面向光源的轮廓边,得到模型面向光源的轮廓:选取并组合模型面向光源的轮廓边的方法为:选取模型的轮廓边即为选取面向光源的构成模型面向光源的多边形的面的边,模型面向光源的轮廓边是在遍历构成模型面向光源的多边形面(此实施例中为三角形面)时出现且仅出现一次的边,因此两个面共享的边肯定不是轮廓边,如图2所示。面向光源的相邻的三角形面V1-V5-V4和V4-V5-V3有一条公共边,因方向不同,分别命名为边1和边2。在一个封闭的曲面中,任何两个三角形面共享的边肯定不是轮廓边,因此,在遍历完整个曲面之后,那些不是共享的边,即仅仅出现一次的边,就是轮廓边。把这些仅仅出现一次的边逆时针连接,就得到了轮廓边,然后组合面向光源的轮廓边,得到模型面向光源的轮廓。S2、扩充模型面向光源的轮廓,得到模型面向光源的轮廓的平滑面:多边形扩充是一种常用的几何处理方法,大量使用在工程实施和计算机图形学方面,如图3所示。开放图形库0penGL中,逆时针方向的三角形面为正面三角形面,即为面向光源的三角形面,以边V2-V3为例,延长点V2至点V6、点V3至点V7,就可以得到平滑面上的两个三角形面V2-V7-V3和V2-V6-V7,而且这两个三角形面也是面向光源的。为了得到平滑的具有渐变特点的平滑面,使用高洛德着色方式,把V2-V3上的点,即轮廓边上的点设置为黑色绘制为黑色,把V6-V7上的点,即平滑面外侧的边上的点绘制成白色,这样可以得到由内到外光照值依次增强的平滑面了。S3、在模型面向光源的轮廓的平滑面中绘制软阴影:利用模型平滑面生成半影深度图和半影Alpha纹理图,完成模型的软阴影的绘制。半影深度图是指由平滑面在光源下所生成的深度纹理图,其原理与本影纹理生成方法相同,半影Alpha纹理图是指直接渲染平滑面的颜色到纹理产生的纹理,其原理为平滑面运用高洛德着色模式生成的一张从内到外有渐变特点的纹理,这张纹理从内到外的光照强度渐次增强。半影深度图和半影Alpha纹理图都是在光源空间的坐标下生成的。其中步骤S1“选取并组合模型面向光源的轮廓边,得到模型面向光源的轮廓”具体包括如下子步骤:S1.1、遍历所有构成模型的三角形面,选取其中面向光源的三角形面,具体方法为:计算光源方向的法向量与遍历的所有构成模型的三角形面法向量的点积,如果点积大于0,则这个三角形面面向光源,如果点积小于等于0,则这个三角形面背向光源;S1.2、遍历选取的面向光源的三角形面的边,选取模型面向光源的轮廓边;S1.3、组合模型面向光源的轮廓边,得到模型面向光源的轮廓。步骤S1.2“遍历选取的面向光源的三角形面的边,选取模型面向光源的轮廓边”具体包括如下子步骤:S1.2.1、建立堆栈并把遍历的第一条面向光源的三角形面的边加入堆栈;S1.2.2、依次把面向光源的三角形面的边压入堆栈并且比较堆栈中的边与当前遍历的边,如果堆栈中存在与当前遍历的边相同的边,就可以证明当前遍历的边是共享的边,不把该边加入堆栈且把在堆栈中的与该边相同的边删除,如果堆栈中不存在与当前遍历的边相同的边,则把当前遍历的边加入堆栈;S1.2.3、依次遍历完所有的面向光源的三角形面的边之后,堆栈中的边即为模型面向光源的轮廓边。步骤S2“扩充模型面向光源的轮廓,得到模型面向光源的轮廓的平滑面”的具体过程为:在给一个模型添加平滑面时,用模型的中心点向这个模型的轮廓边连线并延长,形成平滑面。延长连线时设定系数t来决定延长线的长短,系统t的取值范围为[0,1],系数t取值为0时只有硬阴影,而取值越大,其软阴影的范围越大,具体的数值根据实际需求而定,同时,延长线的长短决定了平滑面的大小,也就决定了生成的伪半影的大小。设轮廓边上的点为A(i),i=1,2,…,n,n构成轮廓边的点的个数,点A(i)在模型的坐标系中的位置为VA(i),c为模型的中心点位置;点A(i)经过延长后的点为B(i),点B(i本文档来自技高网...
一种基于阴影图的软阴影绘制方法

【技术保护点】
一种基于阴影图的软阴影绘制方法,其特征在于,该方法包括如下步骤:S1、选取并组合模型面向光源的轮廓边,得到模型面向光源的轮廓;S2、扩充模型面向光源的轮廓,得到模型面向光源的轮廓的平滑面;S3、在模型面向光源的轮廓的平滑面中绘制软阴影。

【技术特征摘要】
1.一种基于阴影图的软阴影绘制方法,其特征在于,该方法包括如下步骤:S1、选取并组合模型面向光源的轮廓边,得到模型面向光源的轮廓;S2、扩充模型面向光源的轮廓,得到模型面向光源的轮廓的平滑面;S3、在模型面向光源的轮廓的平滑面中绘制软阴影。2.根据权利要求1所述的基于阴影图的软阴影绘制方法,其特征在于,步骤S1进一步包括如下子步骤:S1.1、遍历所有构成模型的三角形面,选取其中面向光源的三角形面;S1.2、遍历选取的面向光源的三角形面的边,选取模型面向光源的轮廓边;S1.3、组合模型面向光源的轮廓边,得到模型面向光源的轮廓。3.根据权利要求2所述的基于阴影图的软阴影绘制方法,其特征在于,步骤S1.1中选取面向光源的三角形面的方法为:计算光源方向的法向量与遍历的所有构成模型的三角形面法向量的点积,如果点积大于0,则这个三角...

【专利技术属性】
技术研发人员:吴增巍
申请(专利权)人:北京仿真中心
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1