买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】三维OBJ模型及MTL材质在iPhone中的解析与渲染方法_华南理工大学_201910003355.9 

申请/专利权人:华南理工大学

申请日:2019-01-03

公开(公告)日:2023-04-21

公开(公告)号:CN109636893B

主分类号:G06T15/20

分类号:G06T15/20

优先权:

专利状态码:有效-授权

法律状态:2023.04.21#授权;2019.05.10#实质审查的生效;2019.04.16#公开

摘要:本发明公开了一种三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,包括以下步骤:读取OBJ模型定义文件和MTL材质定义文件;根据文件格式编写解析函数,将读入的数据解析为数组;创建OpenGLES模型对象,并生成相应的.h头文件和.m实现文件;基于解析的OBJ模型数据,使用OpenGLES绘制三维模型;基于解析的MTL材质数据,使用GLKit渲染模型并添加材质;在iPhone应用上展示。本发明使用的是目前通用的三维OBJ模型及MTL材质,实现了三维模型在iPhone设备上的载入与展示,具有广阔的应用前景。

主权项:1.一种三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,其特征在于,所述的解析与渲染方法包括以下步骤:S1、读取OBJ模型定义文件和MTL材质定义文件;所述的OBJ模型结构包括:顶点、法线、纹理坐标、面片、材质使用,其中,所述的顶点后接x,y,z三维坐标单精度浮点参数,分别表示顶点的X、Y、Z坐标值,以此指定一个顶点,以回车换行作为结尾;所述的法线后接x,y,z三维坐标单精度浮点参数,分别表示法向量的X、Y、Z坐标值,以此指定一个法线向量,以回车换行作为结尾;所述的纹理坐标后接两个单精度浮点参数,分别表示纹理坐标的U、V值,以此指定一个纹理坐标,以回车换行作为结尾;所述的面片为一个三角形小面片,用于指代一个表面,该三角形小面片由顶点、纹理坐标、法向量表示,以回车换行作为结尾;所述的材质使用后接一个参数,该参数指定了从此行之后到下一个以usemtl开头的行之间的所有表面所使用的材质名称,该材质在与OBJ文件关联的MTL文件中找到具体信息;所述的MTL材质的文件结构包括:基础材质和纹理贴图,其中,所述的基础材质,首先对材质进行定义,然后对材质进行设定,设定的前缀分别有Ka、Kd、Ks,分别指定材质的环境光成分、漫射光成分、镜面光成分,格式为“前缀参数1参数2参数3”,三个参数均为单精度浮点数;所述的纹理贴图,由带纹理材质使用如上的基础材质定义,并额外定义纹理贴图,关键字前缀有map_Ka、map_Kd,其中,map_Ka为环境反射指定颜色纹理文件.mpc、纹理文件.cxc或是一个位图文件,在渲染的时候,Ka的值将再乘上map_Ka的值;map_Kd为漫反射指定颜色纹理文件.mpc、纹理文件.cxc或是一个位图文件,在渲染的时候,Kd的值将再乘上map_Kd的值;S2、根据文件格式编写解析函数,将读入的数据解析为数组;S3、创建OpenGLES模型对象,并生成相应的.h头文件和.m实现文件;S4、基于解析的OBJ模型数据,使用OpenGLES绘制三维模型;S5、基于解析的MTL材质数据,使用GLKit渲染模型并添加材质。

全文数据:三维OBJ模型及MTL材质在iPhone中的解析与渲染方法技术领域本发明涉及图形处理技术领域,具体涉及一种三维OBJ模型及MTL材质在移动iPhone中的解析与渲染方法。背景技术随着移动设备硬件性能的发展,移动智能终端逐渐成为人们生活中不可或缺的物品。与此同时,用户更希望在移动端的新应用上能够具有更加绚丽的展示形式和更加流畅的用户体验。而针对移动平台的图形渲染引擎OpenGLES正是为了实现这一需求而被开发。OpenGLESOpenGLforEmbeddedSystems是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。应用领域为视频、图形、图片处理,2D3d游戏引擎开发,科学可视化等等。由于OpenGLES开源且跨平台,iPhone设备的iOS系统也能够使用OpenGLES的标准接口来支持3D图形功能。且结合原生的GLKit,可以实现高质量的图形显示效果及更加震撼的视觉冲击效果。当然,现代三维建模工具已经定义了许多种三维模型文件格式,如3DS、OBJ、MD2、MD3、MDL等等。目前亟待需要进一步研究通用和流行的OBJ模型格式和与其相关的MTL材质文件格式在iPhone设备中的应用。发明内容本发明的主要目的在于满足移动设备上三维模型解析与渲染的需求,公开一种三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,克服OBJ三维模型文件无法直接在移动端上读取的技术难点,最终实现三维模型在iPhone设备上的载入与展示。本发明的目的可以通过采取如下技术方案达到:一种三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,所述的解析与渲染方法包括以下步骤:S1、读取OBJ模型定义文件和MTL材质定义文件;S2、根据文件格式编写解析函数,将读入的数据解析为数组;S3、创建OpenGLES模型对象,并生成相应的.h头文件和.m实现文件;S4、基于解析的OBJ模型数据,使用OpenGLES绘制三维模型;S5、基于解析的MTL材质数据,使用GLKit渲染模型并添加材质。进一步地,所述的OBJ模型结构包括:1顶点、2法线、3纹理坐标、4面片、5材质使用,其中,1顶点:后接x,y,z三维坐标单精度浮点参数,分别表示顶点的X、Y、Z坐标值,以此指定一个顶点。以回车换行作为结尾。2法线:后接x,y,z三维坐标单精度浮点参数,分别表示法向量的X、Y、Z坐标值,指定一个法线向量。以回车换行作为结尾。3纹理坐标:后接两个单精度浮点参数,分别表示纹理坐标的U、V值,以此指定一个纹理坐标。以回车换行作为结尾。4面片:一个表面实际为一个三角形小面片。该小面片由顶点下标、纹理坐标下标、法向量下标表示。以回车换行作为结尾。5材质使用:后接一个参数,该参数指定了从此行之后到下一个以usemtl开头的行之间的所有表面所使用的材质名称。该材质在与OBJ文件关联的MTL文件中找到具体信息。进一步地,所述的MTL材质文件结构包括:1基础材质、2纹理贴图,其中,1基础材质:该部分首先对材质进行定义,然后对材质进行设定。设定的前缀分别有Ka、Kd、Ks,分别指定材质的环境光成分、漫射光成分、镜面光成分。格式为“前缀参数1参数2参数3”,三个参数均为单精度浮点数。2纹理贴图:带纹理材质使用如上的基础材质定义,并额外定义纹理贴图。关键字前缀有map_Ka、map_Kd,其中map_Ka为环境反射指定颜色纹理文件.mpc或纹理文件.cxc,或是一个位图文件。在渲染的时候,Ka的值将再乘上map_Ka的值;map_Kd为漫反射指定颜色纹理文件.mpc或纹理文件.cxc,或是一个位图文件。作用原理与map_Ka相同。进一步地,所述的步骤S1过程如下:S101、创建fstream读取OBJ和MTL文件;S102、使用fstream的good函数判断文件读取是否成功,成功则转入步骤S2,否则,重复步骤S1。进一步地,所述的步骤S2过程如下:S201、定义变量,其中,变量包括:用于存储定点个数的整型positionsCount,用于存储法线个数的整型normalsCount,用于存储纹理坐标个数的整型texelsCount,用于存储三角形面片个数的整型facesCount,用于存储材质信息个数的整型materialsCount;S202、分别对读取的OBJ和MTL数据进行第一次逐行遍历。对OBJ数据逐行遍历时,识别相应的行前缀,统计得出定点、法线、纹理坐标和三角形面片的个数,并依次给变量positionsCount、normalsCount、texelsCount和facesCount赋值;对MTL数据逐行遍历时,方法同OBJ数据遍历,统计得出材质信息的个数,给变量materialsCount赋值;S203、利用S202得到的数据个数,定义数组变量,其中,数组变量包括:用于存储定点坐标信息的浮点数组positions[positionsCount][3],用于存储法线坐标信息的浮点数组texels[texelsCount][2],用于存储纹理坐标信息的浮点数组normals[normalsCount][3],用于存储三角形面片坐标信息的整型数组faces[facesCount][10],用于存储材质名称信息的字符串数组materials[materialsCount],用于存储漫射光成分信息的浮点数组diffuses[materialsCount][3],用于存储镜面光成分信息的浮点数组speculars[materialsCount][3];S204、对OBJ数据和MTL数据进行第二次逐行遍历。匹配到前缀时,利用strtok函数以空格作为分隔符,将字段分割,然后依次写入到上述对应数组中进行存储。至此,已将数据成功读入数组。进一步地,所述的步骤S3过程如下:S301、OpenGLES会以一维数组的形式对3D模型数据进行读取,以二维数组的形式对漫射光、镜面光数据进行读取。因此,为了便于使用OpenGLES,先将S2中得到的数据生成.h头文件和.m实现文件;S302、定义.h头文件需要的属性,其中,属性包括:用于存储模型顶点坐标的浮点类型常量数组modelPositions,用于存储模型纹理坐标的浮点类型常量数组modelTexels,用于存储模型法向量坐标的浮点类型常量数组modelNormals,用于存储材质个数的整型常量modelMaterials,用于存储每一个face数组的开始顶点下标的整型常量数组modelFirsts,用于存储每一个材质要绘制顶点个数的整型常量数组modelCounts,用于存储漫射光坐标的浮点类型二维数组modelDiffuses,用于存储镜面光坐标的浮点类型二维数组modelSpeculars;S303、.m实现文件即为.h头文件的实现文件,只需要将S2中得到的二维数据降维至一维数据再由ofstream输出即可。进一步地,所述的步骤S4过程如下:S401、创建GLKView实例对象,并初始化一个OpenGLEScontext上下文环境;S402、使用glEnableVertexAttribArray、glVertexAttribPointer等OpenGLES中的函数和GLKit中定义的枚举类型GLKVertexAttribPosition、GLKVertexAttribNormal进行3D模型的绘制。其中,所用到的函数和枚举类型定义如下:函数glEnableVertexAttribArray,用于启用某一项属性数组访问功能,该函数需要输入顶点属性数组下标,无返回值;函数glVertexAttribPointer,利用指针,将顶点数组的值读入绘制的context中,无返回值;枚举量GLKVertexAttribPosition,用于向着色器提供顶点数据;枚举量GLKVertexAttribNormal,用于向着色器提供法向量坐标点数据。进一步地,所述的步骤S5过程如下:S501、使用GLKit中的GLKBaseEffect类为3D模型添加光学效果;S502、进一步利用生成的modelDiffuses数组和modelSpeculars数组为GLKBaseEffect实例对象添加材质的漫射光和镜面光效果。至此,完成了三维模型的渲染。本发明相对于现有技术具有如下的优点及效果:1、本发明结合了强大的三维图形处理引擎OpenGLES及流行的三维模型格式OBJ,能够在iPhone设备上实现更流畅、更丰富的图形效果。2、本发明克服OBJ三维模型文件无法直接在移动端上读取的技术难点,最终实现三维模型在iPhone设备上的载入与展示,并且具有更快的模型文件载入与解析速度。附图说明图1是本发明中公开的三维OBJ模型及MTL材质在iPhone中的解析与渲染方法的原理框图;图2是本发明中使用的OpenGLES的框架结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例如附图1所示,本实施例公开了一种三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,包括以下步骤:S1、读取OBJ模型定义文件和MTL材质定义文件。具体步骤如下:首先,创建fstream读取OBJ和MTL文件。然后,使用fstream的good函数判断文件读取是否成功,成功则继续下一步操作。S2、根据文件格式编写解析函数,将读入的数据解析为数组。具体步骤如下:首先,定义变量,其中,变量包括:用于存储定点个数的整型positionsCount,用于存储法线个数的整型normalsCount,用于存储纹理坐标个数的整型texelsCount,用于存储三角形面片个数的整型facesCount,用于存储材质信息个数的整型materialsCount。然后,分别对读取的OBJ和MTL数据进行第一次逐行遍历。对OBJ数据逐行遍历时,识别相应的行前缀,统计得出定点、法线、纹理坐标和三角形面片的个数,并依次给变量positionsCount、normalsCount、texelsCount和facesCount赋值;对MTL数据逐行遍历时,方法同OBJ数据遍历,统计得出材质信息的个数,给变量materialsCount赋值。接着,利用读取文件得到的数据个数,定义数组变量,其中,数组变量包括:用于存储定点坐标信息的浮点数组positions[positionsCount][3],用于存储法线坐标信息的浮点数组texels[texelsCount][2],用于存储纹理坐标信息的浮点数组normals[normalsCount][3],用于存储三角形面片坐标信息的整型数组faces[facesCount][10],用于存储材质名称信息的字符串数组materials[materialsCount],用于存储漫射光成分信息的浮点数组diffuses[materialsCount][3],用于存储镜面光成分信息的浮点数组speculars[materialsCount][3]。最后,对OBJ数据和MTL数据进行第二次逐行遍历。匹配到前缀时,利用strtok函数以空格作为分隔符,将字段分割,然后依次写入到上述对应数组中进行存储。至此,已将数据成功读入数组。S3、创建OpenGLES模型对象,并生成相应的.h头文件和.m实现文件。具体步骤如下:首先,OpenGLES会以一维数组的形式对3D模型数据进行读取,以二维数组的形式对漫射光、镜面光数据进行读取。因此,为了便于使用OpenGLES,先将S2中得到的数据生成.h头文件和.m实现文件。然后,定义.h头文件需要的属性,其中,属性包括:用于存储模型顶点坐标的浮点类型常量数组modelPositions,用于存储模型纹理坐标的浮点类型常量数组modelTexels,用于存储模型法向量坐标的浮点类型常量数组modelNormals,用于存储材质个数的整型常量modelMaterials,用于存储每一个face数组的开始顶点下标的整型常量数组modelFirsts,用于存储每一个材质要绘制顶点个数的整型常量数组modelCounts,用于存储漫射光坐标的浮点类型二维数组modelDiffuses,用于存储镜面光坐标的浮点类型二维数组modelSpeculars。接着,.m实现文件即为.h头文件的实现文件,只需要将S2中得到的二维数据降维至一维数据再由ofstream输出即可。S4、基于解析的OBJ模型数据,使用OpenGLES绘制三维模型。具体步骤如下:首先,创建GLKView实例对象,并初始化一个OpenGLEScontext上下文环境。然后,使用glEnableVertexAttribArray、glVertexAttribPointer等OpenGLES中的函数和GLKit中定义的枚举类型GLKVertexAttribPosition、GLKVertexAttribNormal进行3D模型的绘制。其中,所用到的函数和枚举类型定义如下:函数glEnableVertexAttribArray,用于启用某一项属性数组访问功能,该函数需要输入顶点属性数组下标,无返回值;函数glVertexAttribPointer,利用指针,将顶点数组的值读入绘制的context中,无返回值;枚举量GLKVertexAttribPosition,用于向着色器提供顶点数据;枚举量GLKVertexAttribNormal,用于向着色器提供法向量坐标点数据。S5、基于解析的MTL材质数据,使用GLKit渲染模型并添加材质。具体步骤如下:首先,使用GLKit中的GLKBaseEffect类为3D模型添加光学效果。然后,进一步利用生成的modelDiffuses数组和modelSpeculars数组为GLKBaseEffect实例对象添加材质的漫射光和镜面光效果。至此,完成了三维模型的渲染。上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

权利要求:1.一种三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,其特征在于,所述的解析与渲染方法包括以下步骤:S1、读取OBJ模型定义文件和MTL材质定义文件;S2、根据文件格式编写解析函数,将读入的数据解析为数组;S3、创建OpenGLES模型对象,并生成相应的.h头文件和.m实现文件;S4、基于解析的OBJ模型数据,使用OpenGLES绘制三维模型;S5、基于解析的MTL材质数据,使用GLKit渲染模型并添加材质。2.根据权利要求1所述的三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,其特征在于,所述的OBJ模型结构包括:顶点、法线、纹理坐标、面片、材质使用,其中,所述的顶点后接x,y,z三维坐标单精度浮点参数,分别表示顶点的X、Y、Z坐标值,以此指定一个顶点,以回车换行作为结尾;所述的法线后接x,y,z三维坐标单精度浮点参数,分别表示法向量的X、Y、Z坐标值,以此指定一个法线向量,以回车换行作为结尾;所述的纹理坐标后接两个单精度浮点参数,分别表示纹理坐标的U、V值,以此指定一个纹理坐标,以回车换行作为结尾;所述的面片为一个三角形小面片,用于指代一个表面,该三角形小面片由顶点、纹理坐标、法向量表示,以回车换行作为结尾;所述的材质使用后接一个参数,该参数指定了从此行之后到下一个以usemtl开头的行之间的所有表面所使用的材质名称,该材质在与OBJ文件关联的MTL文件中找到具体信息。3.根据权利要求1所述的三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,其特征在于,所述的MTL材质文件结构包括:基础材质和纹理贴图,其中,所述的基础材质,首先对材质进行定义,然后对材质进行设定,设定的前缀分别有Ka、Kd、Ks,分别指定材质的环境光成分、漫射光成分、镜面光成分,格式为“前缀参数1参数2参数3”,三个参数均为单精度浮点数;所述的纹理贴图,由带纹理材质使用如上的基础材质定义,并额外定义纹理贴图,关键字前缀有map_Ka、map_Kd,其中,map_Ka为环境反射指定颜色纹理文件.mpc、纹理文件.cxc或是一个位图文件,在渲染的时候,Ka的值将再乘上map_Ka的值;map_Kd为漫反射指定颜色纹理文件.mpc、纹理文件.cxc或是一个位图文件,在渲染的时候,Kd的值将再乘上map_Kd的值。4.根据权利要求1所述的三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,其特征在于,所述的步骤S1过程如下:S101、创建fstream读取OBJ和MTL文件;S102、使用fstream的good函数判断文件读取是否成功,成功则转入下一步骤。5.根据权利要求1所述的三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,其特征在于,所述的步骤S2过程如下:S201、定义变量,其中,变量包括:用于存储定点个数的整型positionsCount,用于存储法线个数的整型normalsCount,用于存储纹理坐标个数的整型texelsCount,用于存储三角形面片个数的整型facesCount,用于存储材质信息个数的整型materialsCount;S202、分别对读取的OBJ和MTL数据进行第一次逐行遍历,对OBJ数据逐行遍历时,识别相应的行前缀,统计得出定点、法线、纹理坐标和三角形面片的个数,并依次给变量positionsCount、normalsCount、texelsCount和facesCount赋值;对MTL数据逐行遍历时,识别相应的行前缀,统计得出材质信息的个数,给变量materialsCount赋值;S203、利用步骤S202得到的数据个数,定义数组变量,其中,数组变量包括:用于存储定点坐标信息的浮点数组positions[positionsCount][3],用于存储法线坐标信息的浮点数组texels[texelsCount][2],用于存储纹理坐标信息的浮点数组normals[normalsCount][3],用于存储三角形面片坐标信息的整型数组faces[facesCount][10],用于存储材质名称信息的字符串数组materials[materialsCount],用于存储漫射光成分信息的浮点数组diffuses[materialsCount][3],用于存储镜面光成分信息的浮点数组speculars[materialsCount][3];S204、对OBJ数据和MTL数据进行第二次逐行遍历,匹配到前缀时,利用strtok函数以空格作为分隔符,将字段分割,然后依次写入到上述对应数组中进行存储。6.根据权利要求1所述的三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,其特征在于,所述的步骤S3过程如下:S301、根据步骤S2中得到的数据生成.h头文件和.m实现文件;S302、定义.h头文件需要的属性,其中,属性包括:用于存储模型顶点坐标的浮点类型常量数组modelPositions,用于存储模型纹理坐标的浮点类型常量数组modelTexels,用于存储模型法向量坐标的浮点类型常量数组modelNormals,用于存储材质个数的整型常量modelMaterials,用于存储每一个face数组的开始顶点下标的整型常量数组modelFirsts,用于存储每一个材质要绘制顶点个数的整型常量数组modelCounts,用于存储漫射光坐标的浮点类型二维数组modelDiffuses,用于存储镜面光坐标的浮点类型二维数组modelSpeculars;S303、将步骤S2中得到的二维数据降维至一维数据再由ofstream输出,得到.m实现文件。7.根据权利要求1所述的三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,其特征在于,所述的步骤S4过程如下:S401、创建GLKView实例对象,并初始化一个OpenGLEScontext上下文环境;S402、使用函数glEnableVertexAttribArray、函数glVertexAttribPointer和GLKit中定义的枚举类型GLKVertexAttribPosition、GLKVertexAttribNormal进行3D模型的绘制,其中,所用到的函数和枚举类型定义如下:函数glEnableVertexAttribArray,用于启用某一项属性数组访问功能,该函数需要输入顶点属性数组下标,无返回值;函数glVertexAttribPointer,利用指针,将顶点数组的值读入绘制的context中,无返回值;枚举量GLKVertexAttribPosition,用于向着色器提供顶点数据;枚举量GLKVertexAttribNormal,用于向着色器提供法向量坐标点数据。8.根据权利要求1所述的三维OBJ模型及MTL材质在iPhone中的解析与渲染方法,其特征在于,所述的步骤S5过程如下:S501、使用GLKit中的GLKBaseEffect类为3D模型添加光学效果;S502、利用生成的modelDiffuses数组和modelSpeculars数组为GLKBaseEffect实例对象添加材质的漫射光和镜面光效果。

百度查询: 华南理工大学 三维OBJ模型及MTL材质在iPhone中的解析与渲染方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。