多核移动设备上3d模型的并发加载及渲染方法

文档序号:6510790阅读:173来源:国知局
多核移动设备上3d模型的并发加载及渲染方法
【专利摘要】本发明涉及一种在多核移动设备上的3D模型并发加载及渲染方法,本发明包括以下步骤:以当前设备的CPU核心数作为线程池的容量来创建线程池。然后分别为存于外存设备上的每个3D模型文件分别创建3D模型数据加载任务。再为每个3D模型分别创建渲染任务。将所有数据加载任务提交到线程池的缓冲队列中,由线程池并发执行数据加载任务。等数据加载任务全部执行完毕之后,再将渲染任务提交到线程池的缓冲队列中,由线程池并发执行渲染任务。最后等所有渲染任务执行完毕后,销毁线程池释放系统资源。
【专利说明】多核移动设备上3D模型的并发加载及渲染方法
【技术领域】
[0001]本发明属于嵌入式软件领域。尤其涉及一种在多核移动设备上的3D模型并发加载及渲染方法。
【背景技术】
[0002]随着嵌入式技术的不断发展,以智能手机、平板电脑为首的移动设备得到了迅猛的发展。移动设备的中央处理器从以前的单核心一直发展到现在的双核心、四核心甚至是八核心。在3D应用方面,多核移动设备不但能展示复杂的3D图形,甚至能运行大型的3D游戏。
[0003]对于复杂场景的3D应用来说,需要加载及渲染多个3D模型。现有的方法是先将所有的3D模型文件以串行的方式加载至内存中,然后以串行的方式逐个渲染。然而在多核移动设备中,这种串行的3D处理方法并不能发挥多核处理器的优势来提高3D处理速度。

【发明内容】

[0004]本发明所需要解决的技术问题在于提供一种在多核移动设备上的3D模型并发加载及渲染方法。
[0005]本发明解决技术问题所采取的技术方案如下:
[0006]在加载及渲染3D模型前先判断当前移动设备的CPU核心数。以当前设备的CPU核心数作为线程池的容量来创建线程池。然后分别为存于外存设备上的每个3D模型文件分别创建3D模型数据加载任务。数据加载任务用来加载3D模型文件的顶点数据、法向量数据、纹理坐标数据、面数据、材质数据至内存。再为每个3D模型分别创建渲染任务。最后再将所有数据加载任务提交到线程池的缓冲队列中,由线程池并发执行数据加载任务。等数据加载任务全部完成之后,将渲染任务提交到线程池的缓冲队列中,由线程池并发执行渲染任务。最后等所有渲染任务执行完毕后,销毁线程池释放系统资源。
[0007]本发明相对于现有技术具有以下有益效果:本发明根据移动设备的中央处理器核心数来创建线程池。线程池以中央处理器核心数个工作线程来并发执行异步3D模型文件数据加载任务、异步3D模型渲染任务。整个过程充分发挥了多核移动设备的处理性能。并且每个任务都以异步方式执行,消除了每个任务之间的同步开销。因此可以大大提高多核移动设备加载和渲染3D模型的速度。
【专利附图】

【附图说明】
[0008]图1是本发明的流程图。
【具体实施方式】
[0009]以下结合附图对本发明作进一步说明。
[0010]如图1所示,多核移动设备上3D模型的并发加载及渲染方法包括如下步骤:[0011]步骤一:获取当前移动设备的CPU核心数,具体是:
[0012]根据移动设备所使用的操作系统,直接使用操作系统提供的API或者通过判断文件系统中存放CPU信息的文件数来获取当前移动设备的CPU核心数。操作系统包括但不限于IOS系统及Android系统。
[0013]对于IOS操作系统的移动设备,可使用"sysctlbyname"函数来获取CPU的核心数;
[0014]对于Android操作系统的移动设备,通过判断"/ sys / devices / system /cpu /"目录下记录CPU信息的文件数来获取CPU的核心数。记录CPU信息的文件数即为CPU的核心数;
[0015]步骤二:创建容量为CPU核心数的线程池,具体是:
[0016]创建一个整型的线程池数变量nThread,将由第一步得到的CPU核心数赋给变量nThread ;
[0017]使用移动设备所使用的操作系统的应用程序开发工具包中的线程池类创建容量为nThread的线程池,操作系统包括但不限于IOS系统及Android系统;
[0018]对于IOS操作系统的移动设备,使用IOS应用程序开发工具包中的"NSOperation"来创建线程池,使用
[0019]" queue setMaxConcurrentOperationCount:nThread"语句设置线程池的容量为 nThread ;
[0020]对于Android操作系统的移动设备,可使用Android应用程序开发工具包中的"Executors "类来帮助创建线程池。具体使用"Executors.newFixedThreadPool (nThread)"来创建容量为 nThread 的线程池;
[0021]步骤三:为每个3D模型文件分别创建异步数据加载任务,具体是:
[0022]先遍历存于外存设备上的3D模型文件,获取每个模型文件的存放路径,并且置于数组中;
[0023]再创建异步数据加载任务,具体任务流程是:
[0024]流程一:根据存于数组中的3D模型文件的文件路径打开文件1/0 ;
[0025]所述的3D模型文件格式包括OBJ格式和3DS格式;
[0026]流程二:抽取存于外存设备上的3D模型文件的数据,包括:顶点数据、法向量数据、纹理坐标数据、面数据、材质数据;
[0027]流程三:将抽取的3D模型数据单独封装成一个数据对象;
[0028]总共创建的数据加载任务个数等于3D模型文件的个数;
[0029]步骤四:为每个3D模型分别创建异步渲染任务,渲染任务流程具体是:
[0030]流程一:使用步骤三封装的3D模型数据对象中的3D模型数据,为画笔绑定顶点数据,法向量数据,纹理坐标数据、面数据,并且设置材质特性;
[0031]流程二:调用OpenGl ES的gl.glDrawElements函数来渲染3D模型。
[0032]总共创建的渲染任务个数等于3D模型文件的个数;
[0033]步骤五:由线程池并发执行所有的异步数据加载任务,具体是:
[0034]将由步骤三创建的所有异步数据加载任务提交到由步骤二所创建的线程池的缓冲队列中;[0035]启动线程池,并发地执行缓冲队列中所有异步数据加载任务。
[0036]步骤六:由线程池并发执行所有的异步渲染任务,具体是:
[0037]等步骤五的异步数据加载任务全部执行完毕后,将所有的渲染任务提交到由步骤二所创建的线程池的缓冲队列中;
[0038]启动线程池,并发地执行缓冲队列中所有异步渲染任务;
[0039]等所有异步渲染任务执行完毕后,销毁线程池释放系统资源。
【权利要求】
1.多核移动设备上3D模型的并发加载及渲染方法,其特征包括以下步骤: 步骤一:获取当前移动设备的CPU核心数,具体是: 根据移动设备所使用的操作系统,直接使用操作系统提供的API或者通过判断文件系统中存放CPU信息的文件数来获取当前移动设备的CPU核心数。 步骤二:创建容量为CPU核心数的线程池,具体是: 创建整型的线程池数变量,将该变量的值设置为由步骤一获取的CPU核心数; 以整型的线程池数变量作为线程池的容量参数,使用移动设备所使用的操作系统的应用程序开发工具包中的线程池类来创建容量为CPU核心数的线程池。 步骤三:为每个3D模型文件分别创建异步数据加载任务,具体是: 先遍历存于外存设备上的3D模型文件,获取每个模型文件的存放路径,并且置于数组中; 再创建异步数据加载任务,具任务流程是: 流程一:根据存于数组中的3D模型文件的文件路径打开文件I / O ; 流程二:抽取存于外存设备上的3D模型文件的数据,包括:顶点数据、法向量数据、纹理坐标数据、面数据、材质数据; 流程三:将抽取的3D模型数据单独封装成一个数据对象。 步骤四:为每个3D模型分别创建异步渲染任务,渲染任务流程具体是: 流程一:使用步骤三封装的3D模型数据对象中的3D模型数据,为画笔绑定顶点数据,法向量数据,纹理坐标数据、面数据,并且设置材质特性; 流程二:调用OpenGl ES的gl.glDrawElements函数来渲染3D模型。 步骤五:由线程池并发执行所有的异步数据加载任务,具体是: 将由步骤三创建的所有异步数据加载任务提交到由步骤二所创建的线程池的缓冲队列中; 启动线程池,并发地执行缓冲队列中所有异步数据加载任务。 步骤六:由线程池并发执行所有的异步渲染任务,具体是: 等步骤五的异步数据加载任务全部执行完毕后,将所有的渲染任务提交到由步骤二所创建的线程池的缓冲队列中; 启动线程池,并发地执行缓冲队列中所有异步渲染任务; 等所有异步渲染任务执行完毕后,销毁线程池释放系统资源。
【文档编号】G06F9/445GK103455356SQ201310406709
【公开日】2013年12月18日 申请日期:2013年9月5日 优先权日:2013年9月5日
【发明者】王秀敏, 张麒, 单良 申请人:中国计量学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1