一种实时视景生成方法及装置与流程

文档序号:11729533阅读:267来源:国知局
一种实时视景生成方法及装置与流程

本发明涉及视景仿真领域,具体而言,涉及一种实时视景生成方法及装置。



背景技术:

随着计算机技术、通信技术及其他相关技术的飞速发展,航道进入了以数字航道为基础的现代化智能航道高速建设与发展阶段,信息的可视化成为新的应用发展方向,基于虚拟现实的场景漫游技术成为当前研究的热点。现有技术通常是利用multigencreator建立船舶虚拟机舱环境的模型,并利用vega软件实时生成船舶虚拟机舱环境的视景图,实现船舶虚拟机舱环境的漫游。然而,vega软件仅仅包含了十几种不同模块的函数集,虽然vega的函数库中提供了一些窗口和事件管理的函数,但这些函数在实际应用中难以满足需要。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种实时视景生成方法及装置,以解决上述问题。

为了实现上述目的,本发明实施例采用的技术方案如下:

第一方面,本发明实施例提供了一种实时视景生成方法,应用于船舶视景漫游系统,所述方法包括:创建一个基于mfc的单文档工程;将一个vega提供的zsvegaview类导入所述单文档工程中,所述zsvegaview类与预先建立的船舶虚拟机舱模型对应;调用在mfc应用程序cview类中的zsvegaview::runvega()函数开启线程;调用vginitwinsys()函数、vgdefinesys()函数及vgconfigsys()函数分别对vega系统进行初始化、定义及配置;调用vega主循环函数,在所述vega主循环函数的每次循环时获取当前时刻的船舶视景图,所述当前时刻的船舶视景图与所述船舶虚拟机舱模型中的多个节点对应。

第二方面,本发明实施例提供了一种实时视景生成装置,应用于船舶视景漫游系统,所述装置包括:创建模块,用于创建一个基于mfc的单文档工程;导入模块,用于将一个vega提供的zsvegaview类导入所述单文档工程中,所述zsvegaview类与预先建立的船舶虚拟机舱模型对应;第一调用模块,用于调用在mfc应用程序cview类中的zsvegaview::runvega()函数开启线程;第二调用模块,用于调用vginitwinsys()函数、vgdefinesys()函数及vgconfigsys()函数分别对vega系统进行初始化、定义及配置;第三调用模块,用于调用vega主循环函数,在所述vega主循环函数的每次循环时获取当前时刻的船舶视景图,所述当前时刻的船舶视景图与所述船舶虚拟机舱模型中的多个节点对应。

与现有技术相比,本发明实施例提供的一种实时视景生成方法及装置,通过创建基于mfc的单文档工程,并将一个vega提供的与预先建立的船舶虚拟机舱模型对应的zsvegaview类导入所述单文档工程中,然后调用在mfc应用程序cview类中的zsvegaview::runvega()函数开启线程,调用vginitwinsys()函数、vgdefinesys()函数及vgconfigsys()函数分别对vega系统进行初始化、定义及配置,最后调用vega主循环函数,在所述vega主循环函数的每次循环时获取当前时刻的船舶视景图。所述方法通过采用mfc与vega相结合的方式生成船舶的实时视景图,由于mfc中提供了强大的基于windows的应用框架,以及丰富的窗口和事件管理函数,能够充分地满足船舶视景漫游系统的需要。

本发明的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明实施例了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1是本发明实施例提供的服务器的结构示意图。

图2是本发明第一实施例提供的一种实时视景生成方法的流程图。

图3是本发明第一实施例提供的一种实时视景生成方法中步骤s340的一种详细流程图。

图4是本发明第二实施例提供的一种实时视景生成装置的结构框图。

图5是本发明第二实施例提供的一种实时视景生成装置中第二调用模块440的一种详细结构框图。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

本发明实施例提供的实时视景生成方法可以应用于服务器中。图1示出了服务器100的结构示意图,请参阅图1,所述服务器100包括存储器110、处理器120以及网络模块130。

存储器110可用于存储软件程序以及模块,如本发明实施例中的实时视景生成方法及装置对应的程序指令/模块,处理器120通过运行存储在存储器110内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现本发明实施例中的实时视景生成方法。存储器110可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。进一步地,上述存储器110内的软件程序以及模块还可包括:操作系统111以及服务模块112。其中操作系统111,例如可为linux、unix、windows,其可包括各种用于管理系统任务(例如内存管理、存储设备控制、电源管理等)的软件组件和/或驱动,并可与各种硬件或软件组件相互通讯,从而提供其他软件组件的运行环境。服务模块112运行在操作系统111的基础上,并通过操作系统111的网络服务监听来自网络的请求,根据请求完成相应的数据处理,并返回处理结果给客户端。也就是说,服务模块112用于向客户端提供网络服务。网络模块130用于接收以及发送网络信号。上述网络信号可包括无线信号或者有线信号。

可以理解,图1所示的结构仅为示意,服务器100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。另外,本发明实施例中的服务器还可以包括多个具体不同功能的服务器。

图2示出了本发明第一实施例提供的一种实时视景生成方法的流程图,请参阅图2,所述方法包括:

步骤s310,创建一个基于mfc的单文档工程。

其中,所述mfc是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windowsapi函数。mfc除了是一个类库以外,还是一个框架,提供了强大的基于windows的应用框架,以及丰富的窗口和事件管理函数。

步骤s320,将一个vega提供的zsvegaview类导入所述单文档工程中,所述zsvegaview类与预先建立的船舶虚拟机舱模型对应。

由于vega提供了与c语言的应用程序接口,为软件设计人员提供了最大限度的软件控制和灵活性,因此设计人员常常使用标准win32控制台程序(consoleapplication)进行编程。

其中,所述zsvegaview类是mfc应用程序cview类的继承类,所述zsvegaview类的基本功能是开启一个线程,并将vega着色放进基于mfc应用程序的view窗口中。

步骤s330,调用在mfc应用程序cview类中的zsvegaview::runvega()函数开启线程。

步骤s340,调用vginitwinsys()函数、vgdefinesys()函数及vgconfigsys()函数分别对vega系统进行初始化、定义及配置。

作为一种具体的实施方式,请参阅图3,步骤s340可以包括:

步骤s341,调用vginitwinsys()函数,通过创建共享的内存区和信号区对vega系统进行初始化。

步骤s342,调用vgdefinesys()函数,通过调用定义文件,读取所述定义文件中的数据并装载相关的数据库,创建需要的类和事件对vega系统进行定义。

步骤s343,调用vgconfigsys()函数配置所述需要的类的实例。

步骤s350,调用vega主循环函数,在所述vega主循环函数的每次循环时获取当前时刻的船舶视景图,所述当前时刻的船舶视景图与所述船舶虚拟机舱模型中的多个节点对应。

其中,所述船舶虚拟机舱模型可以是由creator工具建立的船舶虚拟机舱的三维模型,所述船舶虚拟机舱模型可以采用openflight格式并运用层次化的结构来进行存储,因此所述船舶虚拟机舱模型中包括了许多节点,如根节点、组节点、体节点、面结点、点节点等。以船舶机舱为例,船舶机舱为体节点,两个主机归并为主机组节点,所有管道归并为管道组节点。

作为一种具体的实施方式,步骤s350可以包括:

调用vega主循环函数,在所述vega主循环函数的每次循环时调用vgsyncframe()函数,查询退出标志位,若所述退出标志位为0则进行当前时刻的应用进程处理,获取当前时刻的船舶场景图,所述当前时刻的应用进程处理过程与预设的帧频率同步,调用vgframe()函数对所述当前时刻的船舶场景图进行剔除及绘制,获取当前时刻的船舶视景图。

可以理解的是,为了使显示的实时视景图平滑流畅,视景图的刷新频率,也即所述预设的帧频率应取较大的值,通常所述预设的帧频率应大于24帧每秒。此外,所述当前时刻的应用进程处理过程与预设的帧频率同步可以通过各类同步回调函数来实现。

其中,所述若所述退出标志位为0则进行当前时刻的应用进程处理,获取当前时刻的船舶场景图,可以包括:

若所述退出标志位为0则接收输入设备发送的输入信息,根据所述输入信息更新当前的视点信息,根据所述当前的视点信息获取当前时刻的船舶场景图,其中,所述当前的视点信息包括当前视点在所述船舶虚拟机舱模型中的位置和方向,所述船舶场景图是一种由所述船舶虚拟机舱模型中的多个节点组成的有向无环图。

所述输入信息,可以为鼠标的点击信息、键盘的按键信息或触摸屏对应的手势信息等。

此外,若所述退出标志位为1则可以不再进行后续的实时视景图的获取,直接退出所述船舶视景漫游系统。

其中,所述vgframe()函数中包括pfcull()函数及pfdraw()函数,所述调用vgframe()函数对所述当前时刻的船舶场景图进行剔除及绘制,获取当前时刻的船舶视景图,可以包括:

调用pfcull()函数,剔除所述当前时刻的船舶场景图中在所述当前的视点信息对应的视线范围外的节点,并将剩余的所述当前时刻的船舶场景图中的每个节点及其对应的渲染指令关联存储;调用pfdraw()函数,根据所述渲染指令及数据库中的相关数据分别渲染剩余的所述当前时刻的船舶场景图中对应的节点,并将渲染后的所述当前时刻的船舶场景图作为所述当前时刻的船舶视景图绘制到显示设备上。

其中,剔除所述当前时刻的船舶场景图中在所述当前的视点信息对应的视线范围外的节点时,可以遍历所述当前时刻的船舶场景图的各个节点,通过判断所述当前时刻的船舶场景图中的节点是否在观测体(用于表示视点信息对应的视线范围的假想几何体)内部,以确定哪些节点对当前视点而言是可见的,剔除调当前视点视线范围内不可见的节点即可。此外,将剩余的所述当前时刻的船舶场景图中的每个节点及其对应的渲染指令关联存储时,可以以列表的形式存储在内存中,并且该列表只在本次循环中有效,在执行下一次循环时即被清除。可以理解的是,存储的方式并不构成对本发明实施例的限制。

所述数据库中的相关数据可以包括与所述船舶虚拟机舱模型中的各个节点对应存储的多边形、纹理、颜色、光影效果等数据。

本发明实施例提供的实时视景生成方法,通过创建基于mfc的单文档工程,并将一个vega提供的与预先建立的船舶虚拟机舱模型对应的zsvegaview类导入所述单文档工程中,然后调用在mfc应用程序cview类中的zsvegaview::runvega()函数开启线程,调用vginitwinsys()函数、vgdefinesys()函数及vgconfigsys()函数分别对vega系统进行初始化、定义及配置,最后调用vega主循环函数,在所述vega主循环函数的每次循环时获取当前时刻的船舶视景图。所述方法通过采用mfc与vega相结合的方式生成船舶的实时视景图,由于mfc中提供了强大的基于windows的应用框架,以及丰富的窗口和事件管理函数,能够充分地满足船舶视景漫游系统的需要。

图4是本发明第二实施例提供的一种实时视景生成装置400的结构框图,请参阅图4,所述实时视景生成装置400包括创建模块410、导入模块420、第一调用模块430、第二调用模块440以及第三调用模块450。

所述创建模块410,用于创建一个基于mfc的单文档工程。

所述导入模块420,用于将一个vega提供的zsvegaview类导入所述单文档工程中,所述zsvegaview类与预先建立的船舶虚拟机舱模型对应。

所述第一调用模块430,用于调用在mfc应用程序cview类中的zsvegaview::runvega()函数开启线程。

所述第二调用模块440,用于调用vginitwinsys()函数、vgdefinesys()函数及vgconfigsys()函数分别对vega系统进行初始化、定义及配置。

作为一种具体的实施方式,请参阅图5,所述第二调用模块440可以包括初始化模块441、定义模块442以及配置模块443。

所述初始化模块441,用于调用vginitwinsys()函数,通过创建共享的内存区和信号区对vega系统进行初始化。

所述定义模块442,用于调用vgdefinesys()函数,通过调用定义文件,读取所述定义文件中的数据并装载相关的数据库,创建需要的类和事件对vega系统进行定义。

所述配置模块443,用于调用vgconfigsys()函数配置所述需要的类的实例。

所述第三调用模块450,用于调用vega主循环函数,在所述vega主循环函数的每次循环时获取当前时刻的船舶视景图,所述当前时刻的船舶视景图与所述船舶虚拟机舱模型中的多个节点对应。

作为一种具体的实施方式,所述第三调用模块,具体用于调用vega主循环函数,在所述vega主循环函数的每次循环时调用vgsyncframe()函数,查询退出标志位,若所述退出标志位为0则进行当前时刻的应用进程处理,获取当前时刻的船舶场景图,所述当前时刻的应用进程处理过程与预设的帧频率同步,调用vgframe()函数对所述当前时刻的船舶场景图进行剔除及绘制,获取当前时刻的船舶视景图。

作为另一种具体的实施方式,所述第三调用模块,还用于若所述退出标志位为0则接收输入设备发送的输入信息,根据所述输入信息更新当前的视点信息,根据所述当前的视点信息获取当前时刻的船舶场景图,其中,所述当前的视点信息包括当前视点在所述船舶虚拟机舱模型中的位置和方向,所述船舶场景图是一种由所述船舶虚拟机舱模型中的多个节点组成的有向无环图。

作为再一种具体的实施方式,所述vgframe()函数中包括pfcull()函数及pfdraw()函数,所述第三调用模块,还用于调用pfcull()函数,剔除所述当前时刻的船舶场景图中在所述当前的视点信息对应的视线范围外的节点,并将剩余的所述当前时刻的船舶场景图中的每个节点及其对应的渲染指令关联存储;调用pfdraw()函数,根据所述渲染指令及数据库中的相关数据分别渲染剩余的所述当前时刻的船舶场景图中对应的节点,并将渲染后的所述当前时刻的船舶场景图作为所述当前时刻的船舶视景图绘制到显示设备上。

以上各模块可以是由软件代码实现,此时,上述的各模块可存储于服务器100的存储器110内。以上各模块同样可以由硬件例如集成电路芯片实现。

本发明实施例所提供的实时视景生成装置400,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1