一种基于模板阴影原理的通视分析渲染方法

文档序号:6368289阅读:114来源:国知局
专利名称:一种基于模板阴影原理的通视分析渲染方法
技术领域
本发明涉及一种基于模板阴影原理的通视分析渲染方法。
背景技术
一般通视分析分为两点通视分析和视域通视分析,传统的通视分析在定量分析的功能上做了很多工作,比如计算可视距离和不可视距离,计算可视范围和不可视范围的面积比等等。如今有了三维渲染功能,在三维场景直接渲染可视范围与不可视范围,可以大大增强对通视分析结果的感性认识,得到强烈的视觉效果。两种通视分析一、两点通视分析这种通视分析功能相对简单,只要判断起点与终点之间是否有遮挡物,即可判断两点是否通视。起点到终点的可视分析,将可视区域线置为绿色,不可视为红色。该方法功能单一,适用范围窄,只能表示两点的通视。二、视域通视分析这种通视分析的特点在于可以表示一个区域的可视与不可视区域,用在景区可视域分析,房地产视线遮挡分析等应用中居多。一般的视域通视分析的渲染渲染效果可能是一个扇面,这种方法只是在一个平面上表示的,无法表示出立体的效果
发明内容
本发明的目的是提供一种能够对通视分析区域进行高精度渲染的基于模板阴影原理的通视分析渲染方法。本发明提供了一种基于模板阴影原理的通视分析渲染方法,包括步骤对要进行通视分析区域的模型沿视线方向建立封闭的第一多面体;对所述第一多面体使用算法渲染一次,将模板缓存中不为第一数字的值设置成第二数字;构建视线范围封闭的第二多面体;对所述第二多面体使用所述算法渲染2次,所得到的模板缓存的值包括第一数字、第二数字、第三数字和第四数字;渲染模板缓存值为第三数字的区域,置可见颜色,渲染模板缓存值为第四数字的区域,置不可见颜色。本发明的基于模板阴影原理的通视分析渲染方法,进一步包括如下步骤对所述要进行通视分析区域的模型构建轮廓边界;对所述轮廓边界沿视线方向建立第一多面体,其中,第一多面体沿着视线方向的长度包含所要分析的其它模型和地形。本发明的基于模板阴影原理的通视分析渲染方法,所构建的轮廓边界线均在视线范围内。本发明的基于模板阴影原理的通视分析渲染方法,所述第一多面体是沿视线方向的轮廓边界的投影与轮廓边界构成的封闭多面体。本发明的基于模板阴影原理的通视分析渲染方法,所述第二多面体是一个在视线范围内沿垂直地面方向生成的封闭的多面体。
本发明的基于模板阴影原理的通视分析渲染方法,所述算法为Zfail算法。本发明的基于模板阴影原理的通视分析渲染方法,模板缓存值为第一数字和第二数字的区域为在视线范围外的区域,模板缓存值为第三数字的区域为在视线范围内且是可视范围内的区域,模板缓存值为第四数字的区域是在视线范围内且是不可视范围内的区域。本发明的技术效果在于,将视线范围内要进行通视分析区域的模型利用算法渲染几次,将视线范围外的区域、在视线范围内且是可视范围内的区域,以及在视线范围内且是不可视范围内的区域分开,对在视线范围内的不同区域进行不同的着色,从而达到对通视分析区域进行高精度渲染的效果。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进ー步的详细描述。


附图用来提供对本发明的进ー步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中图I为本发明的ー个具体实施例的示意图;图2为生成模型沿视线方向的多面体示意图。
具体实施例方式以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。本发明提供了一种基于模板阴影原理的通视分析渲染方法,包括步骤对要进行通视分析区域的模型沿视线方向建立封闭的第一多面体;对所述第一多面体使用算法渲染一次,将模板缓存中不为第一数字的值设置成第二数字;构建视线范围封闭的第二多面体;对所述第二多面体使用所述算法渲染2次,所得到的模板缓存的值包括第一数字、第二数字、第三数字和第四数字;渲染模板缓存值为第三数字的区域,置可见颜色,渲染模板缓存值为第四数字的区域,置不可见颜色。以下将结合说明书附图,详细描述本发明。作为本发明的ー个具体实施例,在Visual Studio 2008平台下,结合OGRE渲染引擎来开发实现的,其中开发语言为C++。在该实施例中,第一数字是O、第二数字是I、第三数字是2、第四数字是3。如图I所示,具体包括以下步骤I)对要进行通视分析区域的模型构建轮廓边界;将视线区域的模型搜索出来,搜索方法利用OGRE中的区域搜索方法。搜索出来的模型,调用buildEdgeList O方法建立轮廓边界。2)对步骤I)中得到的轮廓边界沿着视线方向建立封闭的多面体,且多面体沿着视线方向的长度必须足够长,包含所要分析的其它模型和地形;在这ー步中利用OGRE中已经提供的模板阴影的方法,建立阴影锥。具体方法为建立一个点光源It,光源的位置是在视点位置,调用getShadowVolumeRenderablelterato
r方法,该方法的定义为
ShadowRenderableListIterator getShadowVolumeRenderablelterator、
Snaaowlechmque shadowTechnique,
const Light氺 light,
HardwareIndexBufferSharedPtr* indexBuffer, bool extrudeVertices, Real extrusionDistance,unsigned long flags = 0 );其中的第一个參数shadowTechnique 必须为 SHADOWTYPE_STENCIL_MODULATIVE,保证其是在使用模板阴影的方法。參数light即为之前定义的It。參数extrusionDistance应该足够大已能包含和影响到其他模型。參数flags必须为SRF_INCLUDE_LIGHT_CAP | SRF_INCLUDE_DARK_CAP保证阴影锥是前后封闭的。3)对步骤2)中得到的封闭的多面体进行zfail方法渲染,将模板缓存中不为O的值置I ;对步骤2)中得到的ShadowRenderableListIterator遍历,逐个渲染得到的阴影维 Renderable。关于 zfail 算法可以利用 OGRE 中提供的 setShadowVolumeStenciIState方法,来重写ー个zfail算法。渲染完毕后,设置模板缓存渲染方式为值不为O的置1,重新渲染场景。4)将视线范围(一般为ー个扇面)垂直地面方向生成一个封闭的多面体,即可视区域多面体;利用OGRE中的ManualObject,创建视线范围内的封闭的多面体。5)对步骤4)中生成的多面体进行zfail方法渲染2次,此时模板缓存的值只有
0,1,2,3 ;对步骤4)中建立的多面体进行zfail方法渲染2次,类似步骤3。6)渲染模板缓存值为2的区域,该区域为可视区域,置可见颜色。渲染模板缓存值为3的区域,该区域为不可视区域,置不可见颜色。分别定义不同的通道pass,可视区域通道passl,不可视区域通道pass2。设置模板缓存 宣染条件,setStenciIBufferParams (Ogre: : CMPF_EQUAL, 2),设置 宣染通道为 passl 宣染整个场景;setStenciIBufferParams (Ogre: : CMPF_EQUAL, 2),设置 宣染通道为 pass3渲染整个场景;得到最終結果。其中,关于生成模型沿视线方向封闭的多面体方法,可以參考图2。其中ABC是ー个模型,视点的上方的空心圆处,那么所建立的封闭的多面体就为ABC-DFE。 zfail算法基本原理如下I.先将整个场景渲染一遍,获得深度值;2.关闭深度写,渲染阴影体的背面,深度测试失败则模板值加I ;
3.渲染阴影体的正面,深度测试失败则模板值减I ;4.最后模板值不为O的面便处于阴影体中,开启深度写;5.用模板手法重新渲染一次场景即可,阴影部分不渲染色度;6.注意,该算法要求阴影体积是闭合的,即需要前后封ロ。zfail算法是三维渲染中生成模板阴影所用到的ー种方法,在本发明中,利用该算法来渲染的模型沿视线方向生成的封闭的多面体,相当于上述原理中所提到的“阴影体”。因为多个模型所构建的“阴影体”不同,故经过多次zfail算法之后,模板缓存中不为O的值并不统一,为了能够区分开来,必须重新渲染整个场景,将不为O的值置I。经过zfail方法渲染后,不为O的一定是在多面体内,但是其值不统一,无法进行下步判断,将模板缓存 不为O的值置I后解决了该问题,经过该步后模板缓存中为O的就是在多面体外,I就是多面体内。这样能够避免视线进入多面时造成模板缓存值出错,进而影响渲染效果。在采用zfail算法渲染2次视线范围扇面体的目的是为了能够区分在视线范围内的可视和不可视区域,因为依照zfail算法的原理,渲染一次则模板缓存的值会变为0,1,2,其中I可以表示是在视线范围内,也可以表示在视线范围外,没办法区分。经过再次渲染则模板缓存值变为0,1,2,3,其中,2,3所表示的就是视线范围内的可视和不可视范围,分别渲染模板缓存值为2,3的区域,并赋予不同的顔色,能够完美的区分开可视与不可视区域。所述构建轮廓边界线,只是在视线范围内才构建,不一定是整个模型都构建,这样能减少数据量。所述建立封闭的多面体相当于沿着视线方向的轮廓边界的投影与轮廓边界构成的封闭多面体。所述第ニ多面体是ー个在视线范围内沿垂直地面方向生成的封闭的多面体。通过ー个例子来说明本发明的ー个具体实施例所述的方法。比如所选用的屏幕是16*1,有16个像素。观测人的视野范围封闭体是2 10像素,物体范围是5 7范围,物体阴影体是8 14,那么模板缓存值的变化如下每ー帧开始,模板缓存归O0000 0000 0000 0000zfail渲染物体阴影体(因为阴影体不规则,所以阴影处的模板值不一定ー样)0000 0002 3123 1100再次渲染一次,将模板缓存中不为O的置I0000 0001 1111 1100Zfail渲染视野范围封闭体(视野范围封闭多面体是规则的凸面体,对在体内的加I,不在的不变)0111 1112 2211 1100再次Zfail渲染视野范围体0222 2223 3311 1100渲染值为2的为可视顔色渲染值为3的为不可视颜色这ー帧结束。
由于采用了上述技术方案,使得本发明具备如下技术效果(I)本发明利用了模板阴影原理,来生成不可视区域,根据模板阴影的优点,生成的区域棱角分明,不会失真,确保了分析结果的精度;(2)本发明所渲染生成的可视区域与不是区域是用显卡进行模板缓存运 算得到的,直接在显卡硬件上进行运算,大大提高了计算效率。(3)本发明渲染生成的可视区域与不可视区域范围明了,色彩自然,轮廓清晰;(4)本发明能够精确的对视线范围内的模型进行分析,就算是模型不全部包含在视线范围内,该方法也能对只在视线范围的部分进行分析渲染,突出用户关心的视线范围;总之,通过本发明方法得到的通视分析渲染结果,轮廓清晰自然,精度高,层次分明,视觉感受极佳。
权利要求
1.一种基于模板阴影原理的通视分析渲染方法,其特征在于,包括步骤 对要进行通视分析区域的模型沿视线方向建立封闭的第一多面体; 对所述第一多面体使用算法渲染一次,将模板缓存中不为第一数字的值设置成第二数字; 构建视线范围封闭的第二多面体; 对所述第二多面体使用所述算法渲染2次,所得到的模板缓存的值包括第一数字、第二数字、第三数字和第四数字; 渲染模板缓存值为第三数字的区域,置可见颜色,渲染模板缓存值为第四数字的区域,置不可见颜色。
2.如权利要I所述的方法,其特征在于,进一步包括如下步骤 对所述要进行通视分析区域的模型构建轮廓边界; 对所述轮廓边界沿视线方向建立第一多面体,其中,第一多面体沿着视线方向的长度包含所要分析的其它模型和地形。
3.如权利要2所述的方法,其特征在于,所构建的轮廓边界线均在视线范围内。
4.如权利要1、2或3所述的方法,其特征在于,所述第一多面体是沿视线方向的轮廓边界的投影与轮廓边界构成的封闭多面体。
5.如权利要I、2或3所述的方法,其特征在于,所述第二多面体是一个在视线范围内沿垂直地面方向生成的封闭的多面体。
6.如权利要1、2或3所述的方法,其特征在于,所述算法为zfail算法。
7.如权利要6所述的方法,其特征在于,模板缓存值为第一数字和第二数字的区域为在视线范围外的区域,模板缓存值为第三数字的区域为在视线范围内且是可视范围内的区域,模板缓存值为第四数字的区域是在视线范围内且是不可视范围内的区域。
全文摘要
本发明公开了一种基于模板阴影原理的通视分析渲染方法,包括步骤对要进行通视分析区域的模型沿视线方向建立封闭的第一多面体;对所述第一多面体使用算法渲染一次,将模板缓存中不为第一数字的值设置成第二数字;构建视线范围封闭的第二多面体;对所述第二多面体使用所述算法渲染2次,所得到的模板缓存的值包括第一数字、第二数字、第三数字和第四数字;渲染模板缓存值为第三数字的区域,置可见颜色,渲染模板缓存值为第四数字的区域,置不可见颜色。本发明利用模板阴影原理,来生成不可视区域,生成的区域棱角分明,不会失真,确保了分析结果的精度,从而对通视分析区域进行高精度渲染。
文档编号G06T15/60GK102663807SQ20121011697
公开日2012年9月12日 申请日期2012年4月19日 优先权日2012年4月19日
发明者关鸿亮, 刘巍, 单文, 秦春 申请人:北京天下图数据技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1