CN105488844B - 一种三维场景中海量模型实时阴影的显示方法 - Google Patents
一种三维场景中海量模型实时阴影的显示方法 Download PDFInfo
- Publication number
- CN105488844B CN105488844B CN201510814953.6A CN201510814953A CN105488844B CN 105488844 B CN105488844 B CN 105488844B CN 201510814953 A CN201510814953 A CN 201510814953A CN 105488844 B CN105488844 B CN 105488844B
- Authority
- CN
- China
- Prior art keywords
- model
- shadow
- sunrise
- calculating
- hour
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/60—Shadow generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2215/00—Indexing scheme for image rendering
- G06T2215/12—Shadow map, environment map
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
- Photometry And Measurement Of Optical Pulse Characteristics (AREA)
Abstract
本发明提供了一种三维场景中海量模型的实时阴影处理方法。该方法通过充分解析三维模型数据结构,应用阴影形成理论以及底层渲染引擎的工作原理,对阴影的构建算法进行了改进,大幅提升了海量模型实时阴影的处理效率。本发明解决了在三维场景中,海量模型的实时阴影的生成、更新、绘制等过程效率较低的问题,同时可根据位置点的经纬度实时计算日出日落的时间,在三维场景中较真实地展现了海量模型的阴影。
Description
技术领域
本发明属于计算机三维态势显示处理领域,具体地说是一种三维场景中海量模型实时阴影的显示方法。
背景技术
实时阴影仿真技术是增加虚拟场景真实感的关键技术,在三维游戏、虚拟训练系统、三维地理信息系统等方面有着广泛的应用。其中,阴影是比较常用的一种仿真技术,近年来该技术提出的算法很多,整体性能在向好的方向发展,同时仿真的效果也越来越真实,但在海量模型的实时阴影处理方面均存在一些效率上的瓶颈。本发明通过充分解析三维模型数据结构,应用阴影形成理论以及底层渲染引擎的工作原理,对阴影的构建算法进行了改进,大幅提升了海量模型实时阴影的处理效率。
通常情况下,在三维场景中,传统的阴影计算算法都是直接遍历每个面,再记录并统计每个面的邻接边,后续再在邻接边中筛选出轮廓边,计算量大、效率低,如图4所示。另外当前通用的阴影处理都是按照统一的全球日出日落时间,从而导致在不同季节、不同地区的阴影显示与实际情况不相符,影响了阴影的真实性。
发明内容
本发明的目的在于提供一种三维场景中海量模型实时阴影的显示方法,该方法可以在三维场景中,根据模型的位置和时间,通过优化阴影的生成算法,提升阴影的生成效率,能快速地实现海量模型数据的实时阴影计算,能真实地表现模型的阴影效果。
本发明公开了一种三维场景中海量模型实时阴影的显示方法,包括:
步骤1,阴影创建;
步骤2,形成模型阴影体;
步骤3,构建阴影体;
步骤4,对阴影体进行渲染。
本发明步骤1阴影创建中,加载并解析模型,获取模型的网格节点,从网格节点中提取模型坐标空间的坐标信息(X、Y、Z)、点信息和面结构信息,计算每个面的法向量Normali,其中i表示面的索引序号,形成对应面结构信息,每个面最多有三个邻接面,若没有邻接面则法向量赋空,由此得到模型所处位置。
本发明步骤2形成模型阴影中,根据模型所处位置,计算太阳位置以及太阳光方向,将太阳位置坐标转换到模型坐标空间,对模型的每个面进行向光性计算,并进行共享边的计算,针对每个邻接边,构建阴影。
本发明步骤2包括:
步骤2.1,根据模型所在位置的经纬度信息Lng与Lat计算日出与日落时间,计算太阳位置以及太阳光方向,:
记当前时间为T,分别为年、月、日、时、分、秒,将T表示为:
T={Year,Month、Day、Hours、Minute、Second};
记当前时区为Tzone,Tzone由偏离率Bias与标准偏离率StandardBias组成,将Tzone表示为:
Tzone={Bias,StandardBias};
记日出时间为Tsunrise,日落时间为Tsunset,各由两个元素组成,分别为小时、分,将Tsunrise与Tsunset表示为:
Tsunrise={Hour,Minute},
Tsunrise.Hour=24.0*cos(Lat*PI/180)+Tzone.Bias/24.0+cos(Lat*PI/180)/360;
其中Tsunrise.Hour为日出时间中的小时项,PI为标准圆周率、Tzone.Bias为时区的偏离率;
日出时间中的分钟项Tsunrise.Minute=60.0*(Tsunrise.Hour/24);
Tsunset={Hour,Minute},
日落时间中的小时项Tsunset.Hour=24.0*cos(Lat*PI/180)+Tzone.Bias/24.0-cos(Lat*PI/180)/360;
日落时间中的分钟项Tsunset.Minute=60.0*(Tsunset.Hour/24);
若T的时、分均在日出与日落时间范围内,即Tsunset.Hour<T.Hours<Tsunrise.Hour,Tsunset.Hour<T.Minute<Tsunrise.Minute,则继续以下过程计算太阳位置:
记太阳位置Veclight={x,y,z},Veclight.x,Veclight.y,Veclight.z分别代表世界坐标下三个方向的分量,单位为米,则太阳光方向向量Dirlight的计算过程如下:
L=sqrt(Veclight.x*Veclight.x+Veclight.y*Veclight.y+Veclight.z*Veclight.z));
L为中间参数,sqrt为开根号;
步骤2.2,将太阳位置坐标转换到目标模型坐标空间:
记太阳位置向量为Veclight,进行如下步骤:
计算放缩转换矩阵Matscale,用于保持物体的大小与实际比例一致:
Scale为模型比例;
计算偏移矩阵Mattrans,用于使模型放置在正确的位置:
上式中V.x,V.y,V.z分别代表模型的空间坐标位置,单位为米;
根据模型的经经纬度计算旋转矩阵Matrotate,用于使模型保持正向:
上式中lng、lat分别为模型的经纬度;
记目标模型矩阵为Matmodel,目标模型矩阵的逆矩阵为MatInversemodel,
Matmodel=Matrotatel*Matscale*Mattrans,
Matinversemodel=Matmodel;
符号表示逆矩阵,;
进行赋值操作,将Veclight在Matinversemodel做转换,公式为;
Veclight=Veclight*MatInverseModel;
步骤2.3,计算轮廓边:
遍历每个基本面即原始模型的三角面片,计算其法向量与太阳光方向夹角,判断其向光性,依次计算基本面的三条边E1、E2、E3所对应的邻接面的向光性,若邻接面的向光性与基本面的向光性不一致,则判定两者之间的公共边为轮廓边;若基本面的指定边没有邻接面,则直接判定该边为轮廓边;
计算出当前面的法向量之后,根据光源位置判断当前面是否是背光面,如果当前面面对光源时,则cost(α)<0,即当前面法向量与入射光线方向向量的点积小于0;所以只有法向量与与入射光线的点积大于0,即cost(α)>0时,表示该面背对光源,记面的向光性为FaceLight:
上式中,j表示面的索引序号当太阳光入射角与面向量之间的夹角大于90度且小于180度时,其为向光面,否则为背光面;
步骤2.4,获取共享边:
如果三角面片A的三个顶点序号为{V0,V1,V2},三角面片A的邻接面的顶点序号为{AdjV0、AdjV1、AdjV2},则邻接边AdjEdge的计算算法如下:
上述公式中,k表示公共边索引,记三角面A的三个顶点为{V0,V1,V2},其相邻的三角面B的顶点为{AdjV0、AdjV1、AdjV2},在三角面A与B不重合的情况下,则两个三角面片之间最多只有一个公共边;若A与B重合,则二者有三个公共边,此时只取三角面A做向光性分析,对三角面B不做处理;若三角面A与B相离,则二者没有公共边。
本发明步骤3针对每个邻接边,构建阴影:
记每条轮廓边的两个顶点为V1、V2,光照方向向量为Vlight,则V1、V2分别在地面上的投影点V3、V4计算过程如下:
V3=V1-Vlight,
V4=V2-Vlight。
本发明步骤4对阴影进行渲染:对形成的阴影进行渲染,再通过模板技术对阴影着色。
本发明与现有技术相比具有以下的优点:
1)对阴影体的形成算法进行了简化,将向光性计算与轮廓边计算过程进行统一,大幅提升了效率;
2)不再使用统一的全球日出日落时间,而是根据阴影的实际位置计算日出日落时间,从而提升了阴影的真实性;
3)对阴影的颜色、透明度可调,从而增强了阴影的显示效果。
附图说明
图1是本发明的邻接面数据结构示意图。
图2是本发明的面与法向量示意图。
图3是本发明的向光性与背光性示意图。
图4是传统阴影轮廓边的生成过程示意图。
图5是本发明的阴影轮廓边的生成过程示意图。
图6是本发明的最终阴影示意图。
图7为本发明流程图。
具体实施方式
本发明提供了一种三维场景中海量模型的实时阴影处理方法。该方法通过充分解析三维模型数据结构,应用阴影形成理论以及底层渲染引擎的工作原理,对阴影的构建算法进行了改进,大幅提升了海量模型实时阴影的处理效率。本发明解决了在三维场景中,海量模型的实时阴影的生成、更新、绘制等过程效率较低的问题,同时可根据位置点的经纬度实时计算日出日落的时间,在三维场景中较真实地展现了海量模型的阴影。本发明首先对阴影进行创建,加载并解析模型,获取模型的网格节点,从网格中提取坐标信息(X、Y、Z)、点信息和面结构信息,计算每个面的法向量(Normali),形成特有的面结构信息,根据模型所处位置计算日出日落时间,形成阴影的轮廓边;对形成的阴影进行渲染,并通过模板技术对阴影着色。
如图7所示,实现本发明的技术解决方案步骤如下:
步骤1、阴影创建过程;
首先加载并解析模型,获取模型的网格节点,从网格中提取坐标信息(X、Y、Z)、点信息和面结构信息,计算每个面的法向量(Normal),形成特有的面结构信息,每个面最多有三个邻接面,若没有邻接面则赋空
步骤2、阴影形成过程;
根据模型所处位置计算日出日落时间,如当前时间点该位置点不具备阴影形成能力,则不进行计算;否则,计算太阳位置以及太阳光方向,并将太阳位置坐标转换到模型坐标空间,遍历每个基本面,计算其法向量与太阳光方向夹角,判断其向光性,再依次计算其三条边E1、E2、E3所对应的邻接面的向光性,若邻接面的向光性与基本面的向光性不一致,则记录两者之间的公共边为轮廓边;若基本面的指定边没有邻接面,则直接记录该边为轮廓边。
步骤3、阴影渲染过程;
步骤4对阴影进行渲染:对形成的阴影进行渲染,再通过模板技术对阴影着色。
步骤1中的模型简化过程能在保证阴影正确性的基础上,提升处理的效率。
将面的向光性计算与轮廓边计算过程统一,提升了实时阴影的计算效率。
实施例
如图6所示,本实施例提供一种三维场景中海量模型实时阴影体的显示方法,其具体实施步骤如下:
步骤1、三维模型的创建过程和方法:加载模型,获取网格节点,并进行简化,从网格中提取坐标信息(X、Y、Z)、点信息和面结构信息,计算每个面的法向量(Normali)。
Facei={V0,V1,V2}
Normali=(V2-V1)×(V1-V0)
上述公式中各参数如图2所示,形成特有的面结构信息,每个面最多有三个邻接面,若没有邻接面则法向量赋空,具体的面结构信息,如图1所示。
步骤2、形成模型的阴影:以基于步骤1所获得的数据值为基准,根据模型所处位置,计算太阳位置以及太阳光方向,将太阳位置坐标转换到模型坐标空间,对模型的每个面进行向光性计算,其向光性和逆光性如图3所示,并进行共享边的计算,针对每个邻接边,构建阴影,具体算法如下:
2.1根据模型所在位置的经纬度信息Lng与Lat计算日出与日落时间,计算太阳位置以及太阳光方向,:
记当前时间为T,分别为年、月、日、时、分、秒,将T表示为:
T={Year,Month、Day、Hours、Minute、Second};
记当前时区为Tzone,Tzone由偏离率Bias与标准偏离率StandardBias组成,将Tzone表示为:
Tzone={Bias,StandardBias};
记日出时间为Tsunrise,日落时间为Tsunset,各由两个元素组成,分别为小时、分,将Tsunrise与Tsunset表示为:
Tsunrise={Hour,Minute},
日出时间中的小时项Tsunrise.Hour=24.0*cos(Lat*PI/180)+Tzone.Bias/24.0+cos(Lat*PI/180)/360;(PI为标准圆周率、Tzone.Bias为时区的偏离率)
日出时间中的分钟项Tsunrise.Minute=60.0*(Tsunrise.Hour/24);
Tsunset={Hour,Minute},
日落时间中的小时项Tsunset.Hour=24.0*cos(Lat*PI/180)+Tzone.Bias/24.0-cos(Lat*PI/180)/360;
日落时间中的分钟项Tsunset.Minute=60.0*(Tsunset.Hour/24);
若T的时、分均在日出与日落时间范围内,即Tsunset.Hour<T.Hours<Tsunrise.Hour,Tsunset.Hour<T.Minute<Tsunrise.Minute,则继续以下过程计算太阳位置:
记太阳位置Veclight={x,y,z},Veclight.x,Veclight.y,Veclight.z分别代表世界坐标下三个方向的分量,单位为米,则太阳光方向Dirlight的计算过程如下:
L=sqrt(Veclight.x*Veclight.x+Veclight.y*Veclight.y+Veclight.z*Veclight.z));
2.2,将太阳位置坐标转换到目标模型坐标空间:
记太阳位置向量为Veclight,则有如下计算过程:
计算放缩转换矩阵Matscale,用于保持物体的大小与实际比例一致:
Scale为模型比例;
计算偏移矩阵Mattrans,用于使模型放置在正确的位置:
上式中V.x,V.y,V.z分别代表模型的空间位置,单位为米;
根据模型的经经纬度计算旋转矩阵Matrotate,用于使模型保持正向:
上式中lng、lat分别为模型的经纬度;
记目标模型矩阵为Matmodel,目标模型矩阵的逆矩阵为MatInversemodel,
Matmodel=Matrotatel*Matscale*Mattrans,
Matinversemodel=Matmodel;(表示逆矩阵),
Veclight=Veclight*MatInverseModel;(即将Veclight在Matinversemodel做转换,为赋值操作)。,
2.3计算轮廓边:
遍历每个基本面,计算其法向量与太阳光方向夹角,判断其向光性,再依次计算其三条边E1、E2、E3所对应的邻接面的向光性,若邻接面的向光性与基本面的向光性不一致,则记录两者之间的公共边为轮廓边;若基本面的指定边没有邻接面,则直接记录该边为轮廓边;
2.4面的向光性计算法:
计算出当前面的法向量之后,就可以根据光源位置判断当前面是否是背光面。如图3所示,如果当前面面对光源时,则cost(α)<0,即当前面法向量与入射光线方向向量的点积小于0。所以只有法向量与与入射光线的点积大于0,即cost(α)>0时,才表示该面背对光源。记面的相关性为FaceLight(i):
上式中,j表示面的索引序号,当太阳光入射角与面向量之间的夹角大于90度且小于180度时,其为向光面,否则为背光面。
2.5获取共享边
记当前面的顶点序号为V0、V1、V2、V3、V4、V5和V6,邻接面的顶点序号为AdjV0、AdjV1、AdjV2,参数如图5所示,则邻接边AdjEdge的计算算法如下:
上述公式中,k表示公共边索引,记三角面A的三个顶点为{V0,V1,V2},其相邻的三角面B的顶点为{AdjV0、AdjV1、AdjV2},在A与B不重合的情况下,则两个三角面片之间最多只有一个公共边;若A与B重合,则二者有三个公共边,在这种情况下,只需取A做向光性分析,对B不做处理;若A与B相离,则二者没有公共边。
3、针对每个邻接边,构建阴影体:
如图6所示(本实施例特性,为展示阴影形成过程,必须由灰度渐变的效果图表示),记每条轮廓边的两个顶点为V1、V2,光照方向向量为Vlight,则V1、V2分别在地面上的投影点V3、V4计算过程如下:
V3=V1-Vlight
V4=V2-Vlight
4、对阴影体进行渲染:
对形成的阴影进行渲染,再通过模板技术对阴影着色。
本发明提供了一种三维场景中海量模型实时阴影的显示方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (3)
1.一种三维场景中海量模型实时阴影的显示方法,其特征在于,包括:
步骤1,阴影创建;
步骤2,形成模型阴影体;
步骤3,构建阴影体;
步骤4,对阴影体进行渲染;
步骤1阴影创建中,加载并解析模型,获取模型的网格节点,从网格节点中提取模型坐标空间的坐标信息(X、Y、Z)、点信息和面结构信息,计算每个面的法向量Normali,其中i表示面的索引序号,形成对应面结构信息,每个面最多有三个邻接面,若没有邻接面则法向量赋空,由此得到模型所处位置;
步骤2形成模型阴影中,根据模型所处位置,计算太阳位置以及太阳光方向,将太阳位置坐标转换到模型坐标空间,对模型的每个面进行向光性计算,并进行共享边的计算,针对每个邻接边,构建阴影;
步骤2包括:
步骤2.1,根据模型所在位置的经纬度信息Lng与Lat计算日出与日落时间,计算太阳位置以及太阳光方向,:
记当前时间为T,分别为年、月、日、时、分、秒,将T表示为:
T={Year,Month、Day、Hours、Minute、Second};
记当前时区为Tzone,Tzone由偏离率Bias与标准偏离率StandardBias组成,将Tzone表示为:
Tzone={Bias,StandardBias};
记日出时间为Tsunrise,日落时间为Tsunset,各由两个元素组成,分别为小时、分,将Tsunrise与Tsunset表示为:
Tsunrise={Hour,Minute},
Tsunrise.Hour=24.0*cos(Lat*PI/180)+Tzone.Bias/24.0+cos(Lat*PI/180)/360;
其中Tsunrise.Hour为日出时间中的小时项,PI为标准圆周率、Tzone.Bias为时区的偏离率;日出时间中的分钟项Tsunrise.Minute=60.0*(Tsunrise.Hour/24);
Tsunset={Hour,Minute},
日落时间中的小时项Tsunset.Hour=24.0*cos(Lat*PI/180)+Tzone.Bias/24.0-cos(Lat*PI/180)/360;
日落时间中的分钟项Tsunset.Minute=60.0*(Tsunset.Hour/24);
若T的时、分均在日出与日落时间范围内,即Tsunset.Hour<T.Hours<Tsunrise.Hour,
Tsunset.Minute<T.Minute<Tsunrise.Minute,则继续以下过程计算太阳位置:
记太阳位置Veclight={x,y,z},Veclight.x,Veclight.y,Veclight.z分别代表世界坐标下三个方向的分量,单位为米,则太阳光方向向量Dirlight的计算过程如下:
L=sqrt(Veclight.x*Veclight.x+Veclight.y*Veclight.y+Veclight.z*Veclight.z));
<mrow>
<mi>D</mi>
<mi>i</mi>
<mi>r</mi>
<mi>l</mi>
<mi>i</mi>
<mi>g</mi>
<mi>h</mi>
<mi>t</mi>
<mo>=</mo>
<mo>{</mo>
<mfrac>
<mrow>
<mi>V</mi>
<mi>e</mi>
<mi>c</mi>
<mi>l</mi>
<mi>i</mi>
<mi>g</mi>
<mi>h</mi>
<mi>t</mi>
<mo>.</mo>
<mi>x</mi>
</mrow>
<mi>L</mi>
</mfrac>
<mo>,</mo>
<mfrac>
<mrow>
<mi>V</mi>
<mi>e</mi>
<mi>c</mi>
<mi>l</mi>
<mi>i</mi>
<mi>g</mi>
<mi>h</mi>
<mi>t</mi>
<mo>.</mo>
<mi>y</mi>
</mrow>
<mi>L</mi>
</mfrac>
<mo>,</mo>
<mfrac>
<mrow>
<mi>V</mi>
<mi>e</mi>
<mi>c</mi>
<mi>l</mi>
<mi>i</mi>
<mi>g</mi>
<mi>h</mi>
<mi>t</mi>
<mo>.</mo>
<mi>z</mi>
</mrow>
<mi>L</mi>
</mfrac>
<mo>}</mo>
<mo>;</mo>
</mrow>
L为中间参数,sqrt为开根号;
步骤2.2,将太阳位置坐标转换到目标模型坐标空间:
记太阳位置向量为Veclight,进行如下步骤:
计算放缩转换矩阵Matscale,用于保持物体的大小与实际比例一致:
Scale为模型比例;
计算偏移矩阵Mattrans,用于使模型放置在正确的位置:
<mrow>
<msub>
<mi>Mat</mi>
<mrow>
<mi>t</mi>
<mi>r</mi>
<mi>a</mi>
<mi>n</mi>
<mi>s</mi>
</mrow>
</msub>
<mo>=</mo>
<mfenced open = "(" close = ")">
<mtable>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mi>V</mi>
<mo>.</mo>
<mi>x</mi>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>V</mi>
<mo>.</mo>
<mi>y</mi>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>V</mi>
<mo>.</mo>
<mi>z</mi>
</mrow>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
</mtr>
</mtable>
</mfenced>
<mo>;</mo>
</mrow>
上式中V.x,V.y,V.z分别代表模型的空间坐标位置,单位为米;
根据模型的经纬度计算旋转矩阵Matrotate,用于使模型保持正向:
<mrow>
<msub>
<mi>Mat</mi>
<mrow>
<mi>r</mi>
<mi>o</mi>
<mi>t</mi>
<mi>a</mi>
<mi>t</mi>
<mi>e</mi>
</mrow>
</msub>
<mo>=</mo>
<mfenced open = "(" close = ")">
<mtable>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mrow>
<mi>c</mi>
<mi>o</mi>
<mi>s</mi>
<mrow>
<mo>(</mo>
<mi>L</mi>
<mi>a</mi>
<mi>t</mi>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>s</mi>
<mi>i</mi>
<mi>n</mi>
<mrow>
<mo>(</mo>
<mi>L</mi>
<mi>a</mi>
<mi>t</mi>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mrow>
<mo>-</mo>
<mi>s</mi>
<mi>i</mi>
<mi>n</mi>
<mrow>
<mo>(</mo>
<mi>L</mi>
<mi>a</mi>
<mi>t</mi>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>c</mi>
<mi>o</mi>
<mi>s</mi>
<mrow>
<mo>(</mo>
<mi>L</mi>
<mi>a</mi>
<mi>t</mi>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
</mtr>
</mtable>
</mfenced>
<mo>*</mo>
<mfenced open = "(" close = ")">
<mtable>
<mtr>
<mtd>
<mrow>
<mi>c</mi>
<mi>o</mi>
<mi>s</mi>
<mrow>
<mo>(</mo>
<mi>l</mi>
<mi>n</mi>
<mi>g</mi>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>s</mi>
<mi>i</mi>
<mi>n</mi>
<mrow>
<mo>(</mo>
<mi>ln</mi>
<mi>g</mi>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mi>s</mi>
<mi>i</mi>
<mi>n</mi>
<mrow>
<mo>(</mo>
<mi>l</mi>
<mi>n</mi>
<mi>g</mi>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>s</mi>
<mi>i</mi>
<mi>n</mi>
<mrow>
<mo>(</mo>
<mi>ln</mi>
<mi>g</mi>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
</mtr>
</mtable>
</mfenced>
<mo>,</mo>
</mrow>
上式中lng、lat分别为模型的经纬度;
记目标模型矩阵为Matmodel,目标模型矩阵的逆矩阵为MatInversemodel,
Matmodel=Matrotatel*Matscale*Mattrans,
Matinversemodel=Matmodel -;
符号-表示逆矩阵;
进行赋值操作,将Veclight在Matinversemodel做转换得到新的太阳位置VeclightNEW,公式为;
VeclightNEW=Veclight*MatInverseModel;
步骤2.3,计算轮廓边:
遍历每个基本面即原始模型的三角面片,计算其法向量与太阳光方向夹角,判断其向光性,依次计算基本面的三条边E1、E2、E3所对应的邻接面的向光性,若邻接面的向光性与基本面的向光性不一致,则判定两者之间的公共边为轮廓边;若基本面的指定边没有邻接面,则直接判定该边为轮廓边;
计算出当前面的法向量之后,根据光源位置判断当前面是否是背光面,如果当前面面对光源时,则cos(α)<0,即当前面法向量与入射光线方向向量的点积小于0;所以只有法向量与与入射光线的点积大于0,即cos(α)>0时,表示该面背对光源,记面的向光性为FaceLight:
<mrow>
<mi>F</mi>
<mi>a</mi>
<mi>c</mi>
<mi>e</mi>
<mi>L</mi>
<mi>i</mi>
<mi>g</mi>
<mi>h</mi>
<mi>t</mi>
<mrow>
<mo>(</mo>
<mi>j</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mfenced open = "{" close = "">
<mtable>
<mtr>
<mtd>
<mrow>
<mi>T</mi>
<mi>R</mi>
<mi>U</mi>
<mi>E</mi>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>c</mi>
<mi>o</mi>
<mi>s</mi>
<mrow>
<mo>(</mo>
<mi>&alpha;</mi>
<mo>)</mo>
</mrow>
<mo><</mo>
<mn>0</mn>
<mrow>
<mo>(</mo>
<mfrac>
<mi>&pi;</mi>
<mn>2</mn>
</mfrac>
<mo><</mo>
<mi>&alpha;</mi>
<mo>&le;</mo>
<mi>&pi;</mi>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mi>F</mi>
<mi>A</mi>
<mi>L</mi>
<mi>S</mi>
<mi>E</mi>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>c</mi>
<mi>o</mi>
<mi>s</mi>
<mrow>
<mo>(</mo>
<mi>&alpha;</mi>
<mo>)</mo>
</mrow>
<mo>></mo>
<mn>0</mn>
<mrow>
<mo>(</mo>
<mi>&alpha;</mi>
<mo>></mo>
<mi>&pi;</mi>
<mo>|</mo>
<mo>|</mo>
<mi>&alpha;</mi>
<mo>&le;</mo>
<mfrac>
<mi>&pi;</mi>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
</mtr>
</mtable>
</mfenced>
<mo>,</mo>
</mrow>
上式中,j表示面的索引序号,当太阳光入射角与面向量之间的夹角大于90度且小于等于180度时,其为向光面,否则为背光面;
步骤2.4,获取共享边:
如果三角面片A的三个顶点序号为{V0,V1,V2},三角面片A的邻接面的顶点序号为{AdjV0、AdjV1、AdjV2},则邻接边AdjEdge的计算算法如下:
上述公式中,k表示公共边索引,记三角面A的三个顶点为{V0,V1,V2},其相邻的三角面B的顶点为{AdjV0、AdjV1、AdjV2},在三角面A与B不重合的情况下,则两个三角面片之间最多只有一个公共边;若A与B重合,则二者有三个公共边,此时只取三角面A做向光性分析,对三角面B不做处理;若三角面A与B相离,则二者没有公共边。
2.根据权利要求1所述的方法,其特征在于,步骤3针对每个邻接边,构建阴影:记每条轮廓边的两个顶点为V1、V2,光照方向向量为Vlight,则V1、V2分别在地面上的投影点V3、V4计算过程如下:
V3=V1-Vlight,
V4=V2-Vlight。
3.根据权利要求2所述的方法,其特征在于,步骤4包括对阴影进行渲染:对形成的阴影进行渲染,再通过模板技术对阴影着色。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510814953.6A CN105488844B (zh) | 2015-11-19 | 2015-11-19 | 一种三维场景中海量模型实时阴影的显示方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510814953.6A CN105488844B (zh) | 2015-11-19 | 2015-11-19 | 一种三维场景中海量模型实时阴影的显示方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105488844A CN105488844A (zh) | 2016-04-13 |
CN105488844B true CN105488844B (zh) | 2018-01-09 |
Family
ID=55675808
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510814953.6A Active CN105488844B (zh) | 2015-11-19 | 2015-11-19 | 一种三维场景中海量模型实时阴影的显示方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105488844B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107705353B (zh) * | 2017-11-06 | 2020-02-11 | 太平洋未来科技(深圳)有限公司 | 应用于增强现实的虚拟对象光影效果的渲染方法和装置 |
CN109712211B (zh) * | 2018-12-21 | 2023-02-10 | 西安恒歌数码科技有限责任公司 | 基于osg的高效体阴影生成方法 |
CN112734899B (zh) * | 2021-01-20 | 2022-12-02 | 清华大学 | 物体表面局部自遮挡阴影的建模方法和装置 |
CN113592999B (zh) * | 2021-08-05 | 2022-10-28 | 广州益聚未来网络科技有限公司 | 一种虚拟发光体的渲染方法及相关设备 |
CN114022607B (zh) * | 2021-11-19 | 2023-05-26 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置以及可读存储介质 |
CN116757000B (zh) * | 2023-08-14 | 2023-11-14 | 山东捷瑞数字科技股份有限公司 | 基于三维引擎实时模拟太阳角度变化的方法、系统及设备 |
-
2015
- 2015-11-19 CN CN201510814953.6A patent/CN105488844B/zh active Active
Non-Patent Citations (7)
Title |
---|
Real-Time Projection Shadow with Respect to Sun’s Position in Virtual Environments;Hoshang Kolivand 等;《International Journal of Computer Science Issues》;20111130;第8卷(第3期);第80-84页 * |
三维实时阴影快速生成方法的研究;郁健琼;《电脑知识与技术》;20041231(第6期);第82-84页 * |
三维建筑模型日照阴影提取算法的研究与实现;姚瑾;《中国优秀硕士学位论文全文数据库工程科技Ⅱ辑》;20131215;第2013年卷(第S1期);摘要,第2.3节,第3.1.1-3.1.3节,图8-10 * |
基于三维GIS的建筑物日照分析研究;李黎;《中国优秀硕士学位论文全文数据库基础科学辑》;20120415;第2012年卷(第4期);第A008-48页 * |
基于三维城市模型的日照分析研究;张颖;《中国优秀硕士学位论文全文数据库基础科学辑》;20060531;第2006年卷(第5期);第A008-25页 * |
建筑日照分析与仿真系统的设计与实现;倪剑龙;《中国优秀硕士学位论文全文数据库信息科技辑》;20111215;第2011年卷(第S1期);第5.3.3节,第5.4.3节,图5-5 * |
虚拟城市仿真平台日照分析方法的研究和实现;李文 等;《计算机技术与发展》;20101130;第20卷(第11期);第189-192,196页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105488844A (zh) | 2016-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105488844B (zh) | 一种三维场景中海量模型实时阴影的显示方法 | |
CN102117497B (zh) | 一种三维地形建模方法及系统 | |
WO2019239211A2 (en) | System and method for generating simulated scenes from open map data for machine learning | |
CN104183016B (zh) | 一种快速的2.5维建筑物模型的构建方法 | |
CN113808261B (zh) | 一种基于全景图的自监督学习场景点云补全的数据集生成方法 | |
Zhao | Application of 3D CAD in landscape architecture design and optimization of hierarchical details | |
Liang et al. | Visualizing 3D atmospheric data with spherical volume texture on virtual globes | |
CN113436308B (zh) | 一种三维环境空气质量动态渲染方法 | |
CN107330964A (zh) | 一种复杂三维物体的显示方法及系统 | |
CN116070687B (zh) | 一种基于全局光线空间仿射变换的神经网络光场表示方法 | |
CN111104702A (zh) | 一种基于ue4的堤防工程可视化仿真的实现方法 | |
CN107832751A (zh) | 人脸特征点的标注方法、装置及计算设备 | |
CN115937461A (zh) | 多源融合模型构建及纹理生成方法、装置、介质及设备 | |
CN104463937A (zh) | 基于不规则物体的动画生成方法及装置 | |
CN116385619B (zh) | 对象模型渲染方法、装置、计算机设备和存储介质 | |
Williams et al. | A time-line approach for the generation of simulated settlements | |
CN104091318B (zh) | 一种中国手语视频过渡帧的合成方法 | |
CN112002019A (zh) | 一种基于mr混合现实的模拟人物阴影的方法 | |
CN116384209B (zh) | 一种用于应急模拟演练的灾害仿真方法 | |
CN111179398A (zh) | 基于3dgis的机动车尾气扩散模拟和体视化方法 | |
Zhu et al. | Simulation of rural landscape standardization effects by using 3D image reconstruction and virtual reality | |
Li | A Design Method of Virtual Folk Museum Roaming System Based on Visual Interaction Technology | |
Mian et al. | Generating Method of Planting Map for Three-Dimensional Rice Field Painting Based on Fixed Point Perspective | |
Rees et al. | Annual solar irradiation mapping and visualization for complex geometries | |
CN114549753A (zh) | 一种基于虚拟现实技术的园林生态环境模拟方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |