本发明涉及一种基于opengl技术,在3d空间场景中,在布置模型时,如何快速进行位干涉判的方法,具体说是一种基于opengl的空间位置计算的场景干涉快速判断方法。
背景技术:
基于opengl技术实现的微电网仿真的3d程序中,涉及复杂的地形,多种发电设备,多种楼宇、工厂等能耗设备,变电站,主网等仿真模型,后续统称仿真模型,模型都是按实际比例建立,在3d场景中放置模型时,要防止仿真模型间的位置干涉及仿真模型和地形干涉后造成仿真场景中模型间相切,同时确保判断干涉的快速性。
微电网仿真的3d程序中的仿真环境中,地形是用户根据实际待仿真的地形建立的,有河,有山等起伏不平,变电站,能耗设备或者发电设备等仿真模型拖放到仿真场景中地形上时,不能有相互嵌入的要求。由于地形和能耗模型是按1:1建立的,外形很复杂,仿真模型要放到放到地形上相对平整的位置,不能放到河道,水渠,池塘等位置。判断干涉的方法不能使用用简单的布尔来判断,即使布置的模型对应的地形位置没有河道,使用布尔来判断,需要耗时很长,且卡顿厉害,操作过快,造成软件崩溃退出,同时由于外形复杂,不能使用aabb包络框来判断,不然山地地形无法放置任何仿真模型,或者造成仿真模型间无明显位置干涉但被误判干涉等一系列问题。
技术实现要素:
本发明的目的是提供一种基于opengl的空间位置计算的场景干涉快速判断方法,能确保判断干涉的快速性,提升仿真建模训练的效率,可用于微电网系统空间建设规划辅助决策。
本发明的目的通过以下技术方案实现:
一种基于opengl的空间位置计算的场景干涉快速判断方法,其特征在于:通过模型特征数据和场景参数联合分析,通过采用四叉树空间模型进行快速判别,具体如下:
第一步,建立模型数据库,必要字段有记录模型的种类唯一字段,地形,能耗设备、变电站还是发电设备,确保程序中能正确的调用,主要在仿真逻辑中使用。
第二步,模型数据库中的模型,建立仿真模型时候,原点(0,0点)必须在几何图形中心,仿真模型入库的时候,自动获取模型的外轮廓多边形包络体信息到数据库中。
第三步,创建一个模型素材管理界面,实现对数据库中模型种类字段进行维护,实现对模型数据库表数据的添加、删除或更新功能。
第四步,在仿真的3d程序中,导入地形后自动放到场景的中间,天空盒自动适配地形,确保所有仿真模型在天空盒内,地形之外的空间不可见。
第五步,拖入变电站,能耗设备或者发电设备等仿真模型的时候,分几步开始判断计算:
(1)根据中心点的位置计算模型和地面z值干涉,zadd=z(仿真模型中心点)-dz(仿真模型中心点xy对应地形对应的顶标高)<0,说明已经发生干涉,不放置模型;
(2)若zadd>0,计算模型外轮廓n边形,每个边3等分点(可以自由设定等分点,其中最少2等分,2等分就是2个端点,不同的等分点,计算公式有所不同,本专利主要是3等分点为主)即计算点数m=n边数*3-边数个计算点,循环m次,对每个点逐一判断的zaddi=zi(第i个计算点底标高)-dzi(第i个计算点xy对应地形的顶标高)是否小于0,只要任意一个zaddi<0,干涉成立,停止判断,不放置模型;
(3)所有zaddi都大于0,继续添加原有同一个边上的判断点的中点,新增x=n(边数)*2个计算点,循环x次,对每个点逐一判断的zaddi=zi(第i个计算点底标高)-dzi(第i个计算点xy对应地形的顶标高)是否小于0,只要任意一个zaddi<0,干涉成立,停止判断,不放置模型。若x个计算点都不干涉,则再场景中放入模型到鼠标拖动到的地形位置上。经过测试,一般1次分割已经解决99%的问题,特殊情况进行二次分割,三次分割,判断完成后,无干涉,满足放置要求,放置地形的地面上,拖入到场景中的模型的底标高z值自动适配地面的标高,若某个点位位置判断到有河道,水渠,池塘等地形材质属性时候,自动停止判断,视为不能放置。
第六步,拖入变电站,能耗设备或者发电设备等仿真模型的时候,判断拖入的位置,是否和已经拖入变电站,能耗设备或者发电设备等仿真模型的空间位置重叠。判断公式方式如下:
(1)建立四叉树空间模型,每拖入一个仿真模型的外轮廓n边形,每个边3等分点(可以自由设定等分点,其中最少2等分,2等分就是2个端点,不同的等分点,计算公式有所不同,本专利主要是3等分点为主)即计算点数m=n边数*3-边数个计算点的x和y存入四叉树中;
(2)对每个待拖入的仿真模型的外轮廓n边形,每个边3等分点(可以自由设定等分点,其中最少2等分,2等分就是2个端点,不同的等分点,计算公式有所不同,本专利主要是3等分点为主)即计算点数m=n边数*3-边数个计算点,逐一计算m个计算点是否落在在四叉树中已有某个模型的计算点集合组成的多边形中,若落在某个模型中,则位置干涉,若全部计算点都不落多边形中,则加入四叉树空间模型中,判断是否干涉,提高响应时间。
本发明是基于opengl技术,在三维空间场景中,在布置模型时,如何快速进行位干涉判断的方法。在3d场景中放置模型时,可防止仿真模型间的位置干涉,以及仿真模型和地形干涉后,造成仿真场景中模型间相切,同时确保判断干涉的快速性。
本发明通过模型特征数据和场景参数联合分析,通过采用四叉树空间模型进行快速判别,提升仿真建模训练的效率。本发明可用于微电网系统空间建设规划辅助决策。
附图说明
图1是一种基于空间位置计算的场景干涉方法流程图。
具体实施方式
为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍。
一种基于opengl的空间位置计算的场景干涉快速判断方法,通过模型特征数据和场景参数联合分析,通过采用四叉树空间模型进行快速判别,具体如下:
第一步,建立模型数据库,必要字段有记录模型的种类唯一字段,地形,能耗设备、变电站还是发电设备,确保程序中能正确的调用,主要在仿真逻辑中使用。
第二步,模型数据库中的模型,建立仿真模型时候,原点(0,0点)必须在几何图形中心,仿真模型入库的时候,自动获取模型的外轮廓多边形包络体信息到数据库中。
第三步,创建一个模型素材管理界面,实现对数据库中模型种类字段进行维护,实现对模型数据库表数据的添加、删除或更新功能。
第四步,在仿真的3d程序中,导入地形后自动放到场景的中间,天空盒自动适配地形,确保所有仿真模型在天空盒内,地形之外的空间不可见。
第五步,拖入变电站,能耗设备或者发电设备等仿真模型的时候,分几步开始判断计算:
(1)根据中心点的位置计算模型和地面z值干涉,zadd=z(仿真模型中心点)-dz(仿真模型中心点xy对应地形对应的顶标高)<0,说明已经发生干涉,不放置模型;
(2)若zadd>0,计算模型外轮廓n边形,每个边3等分点(可以自由设定等分点,其中最少2等分,2等分就是2个端点,不同的等分点,计算公式有所不同,本专利主要是3等分点为主)即计算点数m=n边数*3-边数个计算点,循环m次,对每个点逐一判断的zaddi=zi(第i个计算点底标高)-dzi(第i个计算点xy对应地形的顶标高)是否小于0,只要任意一个zaddi<0,干涉成立,停止判断,不放置模型;
(3)所有zaddi都大于0,继续添加原有同一个边上的判断点的中点,新增x=n(边数)*2个计算点,循环x次,对每个点逐一判断的zaddi=zi(第i个计算点底标高)-dzi(第i个计算点xy对应地形的顶标高)是否小于0,只要任意一个zaddi<0,干涉成立,停止判断,不放置模型。若x个计算点都不干涉,则再场景中放入模型到鼠标拖动到的地形位置上。经过测试,一般1次分割已经解决99%的问题,特殊情况进行二次分割,三次分割,判断完成后,无干涉,满足放置要求,放置地形的地面上,拖入到场景中的模型的底标高z值自动适配地面的标高,若某个点位位置判断到有河道,水渠,池塘等地形材质属性时候,自动停止判断,视为不能放置。
第六步,拖入变电站,能耗设备或者发电设备等仿真模型的时候,判断拖入的位置,是否和已经拖入变电站,能耗设备或者发电设备等仿真模型的空间位置重叠。判断公式方式如下:
(1)建立四叉树空间模型,每拖入一个仿真模型的外轮廓n边形,每个边3等分点(可以自由设定等分点,其中最少2等分,2等分就是2个端点,不同的等分点,计算公式有所不同,本专利主要是3等分点为主)即计算点数m=n边数*3-边数个计算点的x和y存入四叉树中;
(2)对每个待拖入的仿真模型的外轮廓n边形,每个边3等分点(可以自由设定等分点,其中最少2等分,2等分就是2个端点,不同的等分点,计算公式有所不同,本专利主要是3等分点为主)即计算点数m=n边数*3-边数个计算点,逐一计算m个计算点是否落在在四叉树中已有某个模型的计算点集合组成的多边形中,若落在某个模型中,则位置干涉,若全部计算点都不落多边形中,则加入四叉树空间模型中,判断是否干涉,提高响应时间。
本发明是基于opengl技术,在三维空间场景中,在布置模型时,如何快速进行位干涉判断的方法。在3d场景中放置模型时,
本发明通过模型特征数据和场景参数联合分析,通过采用四叉树空间模型进行快速判别,可防止仿真模型间的位置干涉,以及仿真模型和地形干涉后,造成仿真场景中模型间相切,同时确保判断干涉的快速性。