一种3d模型拆分与组合的方法

文档序号:8473149阅读:1193来源:国知局
一种3d模型拆分与组合的方法
【技术领域】
[0001]本发明涉及适用于人机交互领域中(特别是针对于游戏领域)虚拟现实场景3D模型的操作和灵活控制,具体涉及一种3D模型拆分与组合的方法。
【背景技术】
[0002]随着虚拟现实技术的深入研宄与应用,三维可视化显示技术及人机交互技术的进一步发展,人们可以将各种3D模型导入虚线现实场景中,并且通过渲染技术渲染出逼真的模型。在游戏、仿真设计中,在人机交互技术的基础上,需要对虚拟场景中的3D模型进行必要的拆分和组合,以增强人机交互的真实感、刺激感和新鲜感。通过对3D模型的拆分和较为智能的组合操作,能给游戏及3D模型的设计构造带来方便和制作周期的缩短。目前通过人机交互拆分和组合3D模型识别效率较低,计算复杂,实时性差,不够智能化。

【发明内容】

[0003]本发明的目的在于提供一种3D模型拆分与组合的方法。
[0004]为实现上述目的,本发明的技术方案是:一种3D模型拆分与组合的方法,包括如下步骤,
步骤S1:导入3D模型:在虚拟现实场景中导入各3D模型,各3D模型具有各自的母编号ID,且各3D模型对应的各子模块具有各自的子编号ID ;
步骤S2:拆分3D模型:通过鼠标拆分各3D模型,拆分过程中,各子模块记录其所属3D模型的母编号ID以及与之相邻的所有子模块的子编号ID,并存入一分配给各子模块的编号ID存储列表中;
步骤S3:碰撞检测:对待组合的两个子模块进行碰撞检测,若判断碰撞成功,则执行步骤S4;否则,重复步骤S3;
步骤S4:组合3D模型:碰撞的两个子模块根据自身的编号ID存储列表中存储的编号ID,判断与之碰撞的子模块是否为与之相邻的子模块,若是,则两个子模块组合成一个新的模块,同时更新新模块的子编号ID,继续下一次组合;若否,则两个子模块不进行组合。
[0005]在本发明实施例中,所述步骤SI中,所述3D模型采用3ds Max软件来构建,所述3D模型的导入采用第三方开源库Assimp。
[0006]在本发明实施例中,所述步骤SI导入3D模型后,还需通过OpenGL对3D模型进行渲染。
[0007]在本发明实施例中,所述步骤S3的碰撞检测采用包围体策略碰撞检测方法。
[0008]相较于现有技术,本发明具有以下有益效果:本方法通过在虚拟场景中导入3D模型的方法,并用Assimp开源库解析模型格式,通过OpenGL对其进行渲染,对初始状态下的3D模型构建初始化编号ID列表,使得每个模块维持记录母编号ID和与之相邻的所有子模块编号ID,利用包围体策略的碰撞检测技术,加快碰撞检测速度,利用模块存储列表实现相邻模块的组合,通过本发明及方法,实现一种3D模型拆分与组合,降低了计算的复杂性,实时性较强,模块组合判断速度快,能够自动识别对相邻的模块进行组合,具有较强的可操作性和实用性。
【附图说明】
[0009]图1为本发明方法流程图。
【具体实施方式】
[0010]下面结合附图,对本发明的技术方案进行具体说明。
[0011]如图1所示,本发明的一种3D模型拆分与组合的方法,包括如下步骤,
步骤S1:导入3D模型:在虚拟现实场景中导入各3D模型,各3D模型具有各自的母编号ID,且各3D模型对应的各子模块具有各自的子编号ID ;所述3D模型采用3ds Max软件来构建,所述3D模型的导入采用第三方开源库Assimp ;导入3D模型后,还需通过OpenGL对3D模型进行渲染;
步骤S2:拆分3D模型:通过鼠标拆分各3D模型,拆分过程中,各子模块记录其所属3D模型的母编号ID以及与之相邻的所有子模块的子编号ID,并存入一分配给各子模块的编号ID存储列表中;
步骤S3:碰撞检测:对待组合的两个子模块进行碰撞检测,若判断碰撞成功,则执行步骤S4 ;否则,重复步骤S3 ;所述碰撞检测采用包围体策略碰撞检测方法;
步骤S4:组合3D模型:碰撞的两个子模块根据自身的编号ID存储列表中存储的编号ID,判断与之碰撞的子模块是否为与之相邻的子模块,若是,则两个子模块组合成一个新的模块,同时更新新模块的子编号ID,继续下一次组合;若否,则两个子模块不进行组合。
[0012]以下为本发明方法的具体实施方案。
[0013]本方法首先将3D模型导入虚拟现实场景中,由3D MAX软件构建的3D模型都具有自己属性的ID号及每个子模块也具有独立的子编号ID。导入后记录3D模型的母编号ID,同时每个子模块还记录着与之相邻的每个模块的子编号ID。通过鼠标可以将模型的任意模块拆分移动到任意位置,拆分后每个子模块实时更新与之相邻的模块的子编号ID,以此类推,层层记录。每个模块团体都有唯一的识别编号。通过鼠标,对任意放置的模块团体进行移动组合,在移动组合的过程中,首先通过碰撞检测是否与某个具体的子模块相碰撞,如果相碰撞则将相碰撞的两个模块组合为一体,构成新的模块,同时更新新模块的子编号ID,之后将新模块作为一个整体,实现与其他模块的碰撞组合,同理以此类推,最终实现对3D模型的拆分和智能组合,具体实现步骤如下:
(I)导入3D模型
具体步骤包括:3D模型采用3ds Max软件构建的模型,使用一个第三方开源库Assimp(Open Asset Import Library)来导入模型文件,最后利用三维图形开发工具OpenGL对3D模型进行渲染。
[0014]①3D Stud1 MAX是一款非常优秀的三维模型构建软件,而OpenGL的优势并不是建立三维模型,也没有提供建立三维模型的高级命令。相比于0penGL,3D Stud1 MAX建立三维模型则非常的简单。3DS模型具有自己的数据结构,能将三维模型信息存储在其中,方便导入与数据提取。
[0015]②3DS文件结构是由块组成的,在主要的块中又包含了各自的子块。块是一个具有层次结构的区域,3DS文件有一个ID号的主块,表示3DS文件的开始,还有每个子模块的ID号。用Assimp开源库解析模型格式,将模型数据导入,完成虚拟环境3D模型框架的建立。
[0016]③通过Assimp导入的3D模型通常只有模型的框架,没有具体的模型逼真效果,需要通过OpenGL对其进行渲染,使其具有更好的效果。
[0017](2)记录母编号ID及子编号ID
初始化导入3D模型时,每个3D模型都有唯一的编号ID,用以区别其他3D模型。用Assimp开源库读取3D模型时,还可以读取每个子模块的编号ID。初始化时给每个子模块分配编号ID存储列表,用于存储与具体子模块相邻的所有模块的编号ID。
[0018](3)鼠标拆分3D模型
利用鼠标射线拾取法,可以实现鼠标对具体模块的拾取拆分。在拆分的过程中,每个子模块依旧记录着与自己相邻的每个模块的编号ID。如当拆分第一个模块后,拆分的单个模块记录与之相邻的每个模块的编号ID,剩余的部分同样记录与之相邻的每个模块的编号ID0
[0019](4)子模块记录母编号ID和相邻子模块编号ID
在拆分的过程中,为了表征该具体子模块的具体归属问题,需要在每个模块的ID列表中体现母编号ID,也即属于哪个具体的3D模型,后续的组合将避免出现模块不匹配等问题。
[0020](5)碰撞检测
在进行模块组合之前,首先需要判断待组合的两个模块之间是否相碰,只有相碰的模块才有可能组合成一个新的整体。3D模型都是由很多数据构成,三角网格数据庞大,一一遍历耗时严重,严重降低碰撞检测速度,本方法还将采用包围体策略,对子模块构建球状包围体或者盒状包围体,碰撞检测过程中,将两个模块每个数据的--遍历转变为两个包围体的碰撞检测,从而大大降低了计算量。包围体的碰撞检测,将构成子模块的所有数据点都包含在包围体里面,通过球状包围体中心点、半径或者盒状包围体中心、半径的位置关系判断是否碰撞。
[0021](6)智能组合子模块
利用包围体策略碰撞检测方法,鼠标移动子模块进行组合时,判断碰撞成功之后,碰撞的两个子模块都会根据自己的编号ID列表,将每个ID号与碰撞的模块ID号比较,若与之碰撞的模块编号ID在对应的编号ID列表中,则证明两者原本就是相邻的模块,可以组合成一个新的整体;若与之碰撞的模块编号ID不在对应的编号ID列表中,则证明两者原本就不是相邻的模块,两者不能组合成一个新的整体,将自动排斥不进行组合。
[0022]以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。
【主权项】
1.一种3D模型拆分与组合的方法,其特征在于:包括如下步骤, 步骤S1:导入3D模型:在虚拟现实场景中导入各3D模型,各3D模型具有各自的母编号ID,且各3D模型对应的各子模块具有各自的子编号ID ; 步骤S2:拆分3D模型:通过鼠标拆分各3D模型,拆分过程中,各子模块记录其所属3D模型的母编号ID以及与之相邻的所有子模块的子编号ID,并存入一分配给各子模块的编号ID存储列表中; 步骤S3:碰撞检测:对待组合的两个子模块进行碰撞检测,若判断碰撞成功,则执行步骤S4;否则,重复步骤S3; 步骤S4:组合3D模型:碰撞的两个子模块根据自身的编号ID存储列表中存储的编号ID,判断与之碰撞的子模块是否为与之相邻的子模块,若是,则两个子模块组合成一个新的模块,同时更新新模块的子编号ID,继续下一次组合;若否,则两个子模块不进行组合。
2.根据权利要求1所述的一种3D模型拆分与组合的方法,其特征在于:所述步骤SI中,所述3D模型采用3ds Max软件来构建,所述3D模型的导入采用第三方开源库Assimp。
3.根据权利要求1所述的一种3D模型拆分与组合的方法,其特征在于:所述步骤SI导入3D模型后,还需通过OpenGL对3D模型进行渲染。
4.根据权利要求1所述的一种3D模型拆分与组合的方法,其特征在于:所述步骤S3的碰撞检测采用包围体策略碰撞检测方法。
【专利摘要】本发明涉及一种3D模型拆分与组合的方法,该方法,首先将3D模型导入虚拟现实场景中,构建的3D模型都具有自己属性的ID号及每个子模块也具有独立的子编号ID,导入后记录3D模型的母编号ID,同时每个子模块还记录着与之相邻的子模块的子编号ID,将3D模型的任意模块拆分移动到任意位置,拆分后每个子模块实时更新与之相邻的子模块的子编号ID,以此类推,层层记录,通过鼠标,对任意放置的模块团体进行移动组合,在移动组合的过程中,首先通过碰撞检测是否与某个具体的子模块相碰撞,如果相碰撞则将相碰撞的两个模块组合为一体,构成新的模块,同时更新新模块的子编号ID,之后将新模块作为一个整体,实现与其他模块的碰撞组合,同理以此类推,最终实现对3D模型的拆分和智能组合。
【IPC分类】G06F17-50
【公开号】CN104794316
【申请号】CN201510258254
【发明人】姚剑敏, 郭太良, 林志贤, 叶芸, 徐胜, 林金堂
【申请人】福州大学
【公开日】2015年7月22日
【申请日】2015年5月20日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1