关于OBJ文件和三维模型处理的编程

虽然不是专业编程的,但是这个不目标我相信自己也可以实现。

一种3d模型文件导入方法及系统

三维模型文件中的OBJ格式在OpenGL中的输入与处理

公开号 CN102693250 B
发布类型 授权
专利申请号 CN 201110251317
公开日 2014年6月4日
申请日期 2011年8月29日
优先权日 2011年8月29日
公告号 CN102693250A
公开号 201110251317.9, CN 102693250 B, CN 102693250B, CN 201110251317, CN-B-102693250, CN102693250 B, CN102693250B, CN201110251317, CN201110251317.9
发明者 王蓓蓓
申请人 新奥特(北京)视频技术有限公司
导出引文 BiBTeX, EndNote, RefMan
 

摘要

本发明公开了一种3D模型文件导入方法及系统,具体包括:读取3D模型文件;轮询所述3D模型文件,根据组关键字在所述3D模型文件的排列顺序,顺序排列为组序列;根据面关键字命令行中的排序,顺序排列为面序列;根据点信息属性字段在面关键字命令行中的排序,顺序排列为点序列;并根据新生成的顶点索引对应原索引进行对照排序;根据所述3D模型文件中的组序列顺序对组进行读取,本发明解决了在扩展场景设计器中OBJ文件的识别,解决了场景设计器中外部三维数据的读入问题,从而可以实现场景设计器与多种三维合成系统协同工作,提高了场景设计器的三维模型处理能力,实现了对外部OBJ文件的直接调用,节约了场景设计器的制作时间。
 
说明

一种3D模型文件导入方法及系统

技术领域

[0001 ] 本发明涉及场景设计器及三维模型设计系统在应用于电视节目制作领域中时,对原始三维模型文件的导入和处理,特别涉及一种3D模型文件导入方法及系统。

背景技术

[0002] 随着三维影像合成技术的不断推广,在电视、影视制作领域得到了广泛的应用,三维图像在制作和合成过程中,为了达到更为逼真的显示效果,通常会考虑多方面因素,如渲染、灯光等等,作为三维图像的合成基础,首先要进行三维模型制作,通常需要利用多种系统对生成的三维模型进行处理,因此,三维模型文件在三维图像处理系统中具有很好的通用性,在众多三维模型生成文件中,OBJ文件是常用的三维建模文件,OBJ文件是Alias/Wavefront公司为一套基于工作站的3D建模和动画软件”Advanced Visualizer^开发的一种标准3D模型文件格式,很适合用于3D软件模型之间的互导,也可以通过Maya读写。比如,在3dsMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择,目前几乎所有知名的3D软件都支持OBJ文件的读写,不过其中很多需要通过插件才能实现,同时OBJ文件是一种文本文件,可以直接用写字板打开进行查看和编辑修改,在电视制作领域中,在场景设计器中添加OBJ模型导入功能,可以为我们的场景创建提供更广阔的3D模型素材支持,不仅可以直接导入OBJ格式的3D模型,对于其他格式的3D模型,也可以 通过将其转为OBJ格式之后导入场景,从而间接扩大了场景设计器对于3D模型文件的支持范围,方便设计人员创建更丰富的3D场景,但是由于OBJ文件具有单一的文件语法,通常通过索引调用的方式,完成三维图像的调用和处理,在不能支持多索引路径的情况下,对于OBJ文件就不能正确读取,并且无法重现之前的OBJ文件。

[0003] 在发明人实现本发明过程中,发现现有技术中有以下缺陷,现有技术中在OBJ模型文件的导入过程中,不能对元素索引顺序进行修改,同时不能改变索引的数量,在只提供单一索引的系统中,不能对OBJ模型文件进行正确读取,由于在现有OBJ模型文件中,对OBJ语法进行了严格定义,因此,如果只是对元素索引系列进行改变,OBJ文件将不能对元素索引项目进行正确读取,介于以上原因,限制了 OBJ文件的通用性,给OBJ文件的使用代理了很大的局限,在不同的三维模型系统中,需要对建模文件进行重现制作,因此,增加了三维模型文件的制作强度,造成资源浪费。

发明内容

[0004] 针对现有技术中的缺陷,本发明解决了在扩展场景设计器中OBJ文件的识别,解决了场景设计器中外部三维数据的读入问题。

[0005] 为了解决以上技术问题本发明提供了一种3D模型文件导入方法,具体包括:读取3D模型文件;

[0006] 轮询所述3D模型文件,查找所述3D模型文件中的组关键字命令行,并根据组关键字在所述3D模型文件的排列顺序,得到组序列顺序;[0007] 根据所述组序列顺序,解析所述组关键字命令行中的面关键字,并根据面关键字命令行中的排序,得到面序列顺序;

[0008] 根据所述面序列顺序解析所述面关键字命令行中的点信息属性字段,所述点信息属性字段包括,顶点索引,纹理坐标索引,法向量坐标索引;根据点信息属性字段在面关键字命令行中的排序,得到点序列顺序;

[0009] 根据所述点序列顺序,解析所述点信息属性字段,对所述点信息属性字段中顶点索引、纹理坐标索和法向量坐标索弓I编号顺序排序,顺序排列为点属性序列,并根据新生成的顶点索引对应原索引进行对照排序;

[0010] 根据组序列顺序对组进行读取,读取所述组序列时顺序对组中的面序列进行读取,再顺序读取所述点序列属性;

[0011] 对所述读取3D模型文件中组、面、点关键字进行数量统计,生成原文件元素统计文件;对原始文件元素进行校验,根据组序列、面序列、点序列统计组、面、点数量判断所述原文件元素统计文件中组、面、点数量,若不相符,则输出不相符项目名称,所述不相符项目名称包括,组项目、面项目或点项目。

[0012] 同时,本发明还提供了一种3D模型文件导入系统,具体包括:读取单元、组序列生成单元、面序列生成单元、点序列生成单元、点索引排列单元、读取单元,其中,

[0013] 所述读取单元,用于读取3D模型文件;

[0014] 所述组序列生成单元,用于轮询所述3D模型文件,查找所述3D模型文件中的组关键字命令行,并根据组关键字在所述3D模型文件的排列顺序,顺序排列为组序列;

[0015] 所述面序列生成单元,用于根据所述组序列顺序,解析所述组关键字命令行中的面关键字,并根据面关键字命令行中的排序,顺序排列为面序列;

[0016] 所述点序列生成单元,用于根据所述面序列顺序解析所述面关键字命令行中的点信息属性字段,所述点信息属性字段包括,顶点索引,纹理坐标索引,法向量坐标索引;根据点信息属性字段在面关键字命令行中的排序,顺序排列为点序列;

[0017] 所述点索引排列单元,用于根据所述点序列顺序,解析所述点信息属性字段,对所述点信息属性字段中顶点索引,纹理坐标索引,法向量坐标索引编号顺序排序,顺序排列为点序列,并根据新生成的顶点索引对应原索引进行对照排序;

[0018] 所述读取单元,用于根据所述3D模型文件中的组序列顺序对组进行读取,在读取所述组序列时顺序对组中的面序列进行读取,在顺序读取所述面序列时顺序对面中的点序列进行读取;

[0019] 所述读取单元中还包括原文件信息统计单元,所述原文件信息统计单元,用于对所述读取3D模型文件中组、面、点关键字进行数量统计,生成原文件元素统计文件;

[0020] 所述点序列生成单元中还包括新文件核实单元,所述新文件核实单元,用于根据组序列、面序列、点序列统计组、面、点数量判断所述原文件元素统计文件中组、面、点数量,若不相符,则输出不相符项目名称,所述不相符项目名称包括,组项目、面项目或点项目。

[0021] 与现有技术相比,本发明实施例具有以下优点:通过对OBJ模型文件格式的解析,对其中元素的渲染次序安装需要给予了重现排序,由于在OBJ模型文件解析过程中,没有破坏原文件的语法格式,因此在场景设计器读取过程中,还可以根据OBJ文件的语法顺序对其中元素进行调用,本发明提高了 OBJ文件的可读性,提高了现有场景设计器的模型识别能力,从而可以实现场景设计器与多种三维合成系统协同工作,提高了场景设计器的三维模型处理能力,实现了对外部OBJ文件的直接调用,节约了场景设计器的制作时间。

附图说明

[0022] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

[0023] 图1:是本发明实施例中一种3D模型文件导入方法的流程图;

[0024] 图2:是本发明实施例中另一种3D模型文件导入方法的流程图;

[0025] 图3:是本发明实施例中一种3D模型文件导入系统的示意图。

具体实施方式

[0026] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

[0027] 本发明实施例1中提供了一种3D模型文件导入方法,如图1所示,包括以下步骤:

[0028] 步骤SlOl:读取3D模型文件;

[0029] 在此步骤中,首先,进行3D模型文件的读取,OBJ文件是一种常用的3D模型文件,因此文件中不包含动画、材质特性、贴图路径、动力学、粒子等信息,一个OBJ文件为一个模型model,该一个模型可以由若干个组group组成,一个组由若干个三角面(四角面)组成,而每个三角形又包括点坐标OBJ文件的结构。在一个OBJ文件中,首先有一些以V、vt或vn前缀开头的行指定了所有的顶点、纹理坐标、法线的坐标。然后再由一些以f开头的行指定每一个三角形所对应的顶点、纹理坐标和法线的索引。在顶点、纹理坐标和法线的索引之间,使用符号“ / ”隔开的。一个f行可以以下面几种格式出现:

[0030] fl23:这样的行表示以第1、2、3号顶点组成一个三角形。

[0031] fl/32/53/4:这样的行表不以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,第二个顶点的纹理坐标的索引值为5,第三个顶点的纹理坐标的索引值为4。

[0032] fl/3/42/5/63/4/2:这样的行表不以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,其法线的索引值是4 ;第二个顶点的纹理坐标的索引值为5,其法线的索引值是6 ;第三个顶点的纹理坐标的索引值为6,其法线的索引值是2。

[0033] Π//42//63//2:这样的行表示以第1、2、3号顶点组成一个三角形,且忽略纹理坐标。其中第一个顶点的法线的索引值是4 ;第二个顶点的法线的索引值是6 ;第三个顶点的法线的索引值是2。

[0034] 从以上三角形(面)的表达上,可以看出OBJ是通过索引对每个点进行定位和检索的,同样在由面构成“组”,由“组”构成“模型的过程中”也同样会采用一致的方法。

[0035] 步骤S102:生成组序列,轮询所述3D模型文件,查找所述3D模型文件中的组关键字命令行,并根据组关键字在所述3D模型文件的排列顺序,顺序排列为组序列;

[0036] 此步骤中,对步骤SlOl中的OBJ文件进行轮询检索,当检索到gpCube_Facel类关键字时,说明在OBJ文件中进行了“建组”,将文件中所有代有“组”命令的命令行找出,并根据组关键字在所述3D模型文件的排列顺序,顺序排列为组序列;

[0037] 步骤S103:生成面序列,根据所述组序列顺序,解析所述组关键字命令行中的面关键字,并根据面关键字命令行中的排序,顺序排列为面序列;

[0038] 在此步骤中,对步骤S102中所检索出的“组”所索引涵盖的面,根据面关键字命令行进行排序,并生成面序列;

[0039] 步骤S104:生成点序列,根据所述面序列顺序解析所述面关键字命令行中的点信息属性字段,所述点信息属性字段包括,顶点索引,纹理坐标索引,法向量坐标索引;根据点信息属性字段在面关键字命令行中的排序,顺序排列为点序列;

[0040] 在此步骤中,对步骤103中的面所涵盖的点,根据点信息属性字段在面关键字命令行中的排序,顺序排列为点序列;

[0041] 步骤S105:生成点索引,根据所述点序列顺序,解析所述点信息属性字段,对所述点信息属性字段中顶点索引,纹理坐标索引,法向量坐标索引编号顺序排序,顺序排列为点序列,并根据新生成的顶点索引对应原索引进行对照排序;

[0042] 步骤S106:进行播出,根据所述3D模型文件中的组序列顺序对组进行读取,在读取所述组序列时顺序对组中的面系列进行读取,在顺序读取所述面系列时顺序对面中的点系列进行读取。

[0043] 本发明实施例2中提供了另一种3D模型文件导入方法,如图2所示,包括以下步骤:

[0044] 步骤S201:读取3D模型文件;所述3D模型文件包括obj文件。

[0045] 在此步骤中,还具体包括步骤S2011对原文件元素进行统计,对所述读取3D模型文件中组、面、点关键字进行数量统计,生成原文件元素统计文件;

[0046] 步骤S202:生成组序列,轮询所述3D模型文件,查找所述3D模型文件中的组关键字命令行,并根据组关键字在所述3D模型文件的排列顺序,顺序排列为组序列;

[0047] 步骤S203:生成面序列,根据所述组序列顺序,解析所述组关键字命令行中的面关键字,并根据面关键字命令行中的排序,顺序排列为面序列;

[0048] 步骤S204:生成点序列,根据所述面序列顺序解析所述面关键字命令行中的点信息属性字段,所述点信息属性字段包括,顶点索引,纹理坐标索引,法向量坐标索引;根据点信息属性字段在面关键字命令行中的排序,顺序排列为点序列;

[0049] 所述点系列中点数量包括三个、四个或大于四个,进而在识别点数量之后还可以包括:对点数量的判断,具体可以包括:在常规的3D设计软件中,在面的处理过程中,通常会存在,四方面片元素及三角面片元素,多数3D设计软件可以同时识别以上两种元素构成基本组合单元,因此在本发明中,可以真对以上两种方式的面片在形成新索引过程中进行面片转换和合成。

[0050] 步骤S2041对四点判断、判断所述点数量是否大于四,若是,则对与其对应的所述面关键字命令行进行三角面片拆分,得到拆分后的新面;所述新面排序添加在所分离出的面关键字命令行之后。[0051] 在此步骤中,除了可对四点面片进行判断以外,同时还可以对在OBJ模型合成中的错误而造成的多点面片进行判断识别,从而保证真确的建立索引,并将拆分后的面添加到与所对应的面关键字命令行之后。

[0052] 步骤S2042对三点判断,判断所述点数量是否为三,若是,则对与所述面序列中的,相邻面系列进行合并,得到合并后的新面,所述新面至少包括四个点;所述新面排序替换在所合并的两行面关键字命令行。

[0053] 在此步骤中,对需要进行4点面片处理的系统,可以将三点面片转换为四点面片;

[0054] 步骤S2043对原始文件元素进行校验,根据组序列、面序列、点序列统计组、面、点数量判断所述原文件元素统计文件中组、面、点数量,若不相符,则输出不相符项目名称,所述不相符项目名称包括,组项目、面项目或点项目。

[0055] 步骤S205:生成点索引,根据所述点序列顺序,解析所述点信息属性字段,对所述点信息属性字段中顶点索引,纹理坐标索引,法向量坐标索引编号顺序排序,顺序排列为点序列,并根据新生成的顶点索引对应原索引进行对照排序;

[0056] 步骤S206:进行播出,根据所述3D模型文件中的组序列顺序对组进行读取,在读取所述组序列时顺序对组中的面系列进行读取,在顺序读取所述面系列时顺序对面中的点系列进行读取。

[0057] 本发明实施例3中提供了一种3D模型文件导入系统,如图3所示,包括:

[0058] 包括:读取单元301、组系列生成单元302、面系列生成单元303、点序列生成单元304、点索引排列单元305、读取单元306,其中,

[0059] 所述读取单元301,用于读取3D模型文件;

[0060] 所述组系列生成单元302,用于轮询所述3D模型文件,查找所述3D模型文件中的组关键字命令行,并根据组关键字在所述3D模型文件的排列顺序,顺序排列为组序列;

[0061] 所述面系列生成单元303,用于根据所述组序列顺序,解析所述组关键字命令行中的面关键字,并根据面关键字命令行中的排序,顺序排列为面序列;

[0062] 所述点序列生成单元304,用于根据所述面序列顺序解析所述面关键字命令行中的点信息属性字段,所述点信息属性字段包括,顶点索引,纹理坐标索引,法向量坐标索引;根据点信息属性字段在面关键字命令行中的排序,顺序排列为点序列;所述点序列生产单元304中所述点系列中点数量包括三个、四个或大于四个。

[0063] 所述点系列生产单元304中还包括三角面片拆分单元3041,其中,所述三角面片拆分单元,用于判断所述点数量是否大于四,若是,则对与其对应的所述面关键字命令行进行三角面片拆分,得到拆分后的新面;

[0064] 所述新面排序添加在所分离出的面关键字命令行之后。

[0065] 所述点系列生产单元304中还包括四边面片生成单元3042,其中,所述四边面片生成单元,用于判断所述点数量是否为三,若是,则对与所述面序列中的,相邻面系列进行合并,得到合并后的新面,所述新面至少包括四个点;所述新面排序替换在所合并的两行面关键字命令行。

[0066] 所述点序列生产单元304中还包括新文件核实单元3043,所述新文件核实单元,用于根据组序列、面序列、点序列统计组、面、点数量判断所述原文件元素统计文件中组、面、点数量,若不相符,则输出不相符项目名称,所述不相符项目名称包括,组项目、面项目或点项目。

[0067] 所述点索引排列单元305,用于根据所述点序列顺序,解析所述点信息属性字段,对所述点信息属性字段中顶点索引,纹理坐标索引,法向量坐标索引编号顺序排序,顺序排列为点序列,并根据新生成的顶点索引对应原索引进行对照排序;

[0068] 所述读取单元306,用于根据所述3D模型文件中的组序列顺序对组进行读取,在读取所述组序列时顺序对组中的面系列进行读取,在顺序读取所述面系列时顺序对面中的点系列进行读取。

[0069] 所述读取单元306中还包括原文件信息统计单元3061,所述原文件信息统计单元,用于对所述读取3D模型文件中组、面、点关键字进行数量统计,生成原文件元素统计文件。

[0070] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是⑶-R0M,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

[0071] 本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

[0072] 本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

[0073] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

[0074] 以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

 

权利要求(9)
1.一种3D模型文件导入方法,其特征在于,包括: 读取3D模型文件; 轮询所述3D模型文件,查找所述3D模型文件中的组关键字命令行,并根据组关键字在所述3D模型文件的排列顺序,得到组序列顺序; 根据所述组序列顺序,解析所述组关键字命令行中的面关键字,并根据面关键字命令行中的排序,得到面序列顺序; 根据所述面序列顺序解析所述面关键字命令行中的点信息属性字段,所述点信息属性字段包括,顶点索引,纹理坐标索引,法向量坐标索引;根据点信息属性字段在面关键字命令行中的排序,得到点序列顺序; 根据所述点序列顺序,解析所述点信息属性字段,对所述点信息属性字段中顶点索引、纹理坐标索引和法向量坐标索引编号顺序排序,顺序排列为点属性序列,并根据新生成的顶点索引对应原索引进行对照排序; 根据组序列顺序对组进行读取,读取所述组序列时顺序对组中的面序列进行读取,再顺序读取所述点序列属性; 对所述读取3D模型文件中组、面、点关键字进行数量统计,生成原文件元素统计文件;对原始文件元素进行校验,根据组序列、面序列、点序列统计组、面、点数量判断所述原文件元素统计文件中组、面、点数量,若不相符,则输出不相符项目名称,所述不相符项目名称包括,组项目、面项目或点项目。
2.如权利要求1中所述的方法,其特征在于,所述根据点信息属性字段在面关键字命令行中的排序,顺序排列为点序列步骤中,所述点序列中点数量包括至少三个。
3.如权利要求2中所`述的方法,其特征在于,所述根据点信息属性字段在面关键字命令行中的排序,顺序排列为点序列步骤后还包括: 判断所述点数量是否大于四,若是,则对与其对应的所述面关键字命令行进行三角面片拆分,得到拆分后的新面; 所述新面排序添加在所分离出的面关键字命令行之后。
4.如权利要求2中所述的方法,其特征在于,所述根据点信息属性字段在面关键字命令行中的排序,排序排列为点系统步骤后还包括: 判断所述点数量是否为三,若是,则对与所述面序列中的,相邻面序列进行合并,得到合并后的新面,所述新面至少包括四个点; 所述新面排序替换在所合并的两行面关键字命令行。
5.如权利要求1中所述的方法,其特征在于,所述3D模型文件包括obj文件。
6.一种3D模型文件导入系统,其特征在于,包括:读取单元、组序列生成单元、面序列生成单元、点序列生成单元、点索引排列单元、读取单元,其中, 所述读取单元,用于读取3D模型文件; 所述组序列生成单元,用于轮询所述3D模型文件,查找所述3D模型文件中的组关键字命令行,并根据组关键字在所述3D模型文件的排列顺序,顺序排列为组序列; 所述面序列生成单元,用于根据所述组序列顺序,解析所述组关键字命令行中的面关键字,并根据面关键字命令行中的排序,顺序排列为面序列; 所述点序列生成单元,用于根据所述面序列顺序解析所述面关键字命令行中的点信息属性字段,所述点信息属性字段包括,顶点索引,纹理坐标索引,法向量坐标索引;根据点信息属性字段在面关键字命令行中的排序,顺序排列为点序列; 所述点索引排列单元,用于根据所述点序列顺序,解析所述点信息属性字段,对所述点信息属性字段中顶点索引,纹理坐标索引,法向量坐标索引编号顺序排序,顺序排列为点序列,并根据新生成的顶点索引对应原索引进行对照排序; 所述读取单元,用于根据所述3D模型文件中的组序列顺序对组进行读取,在读取所述组序列时顺序对组中的面序列进行读取,在顺序读取所述面序列时顺序对面中的点序列进行读取; 所述读取单元中还包括原文件信息统计单元,所述原文件信息统计单元,用于对所述读取3D模型文件中组、面、点关键字进行数量统计,生成原文件元素统计文件; 所述点序列生成单元中还包括新文件核实单元,所述新文件核实单元,用于根据组序列、面序列、点序列统计组、面、点数量判断所述原文件元素统计文件中组、面、点数量,若不相符,则输出不相符项目名称,所述不相符项目名称包括,组项目、面项目或点项目。
7.如权利要求6中所述的系统,其特征在于,所述点序列生产单元中所述点序列中点数量包括三个、四个或大于四个。
8.物权利要求7中所述的系统,其特征在于,所述点序列生产单元中还包括三角面片拆分单元,其中,所述三角面片拆分单元,用于判断所述点数量是否大于四,若是,则对与其对应的所述面关键字命令行进行三角面片拆分,得到拆分后的新面; 所述新面排序添加在所分离出的面关键字命令行之后。
9.如权利要求7中所述的系统,其特征在于,所述点序列生产单元中还包括四边面片生成单元,其中,所述四边面片生成单元,用于判断所述点数量是否为三,若是,则对与所述面序列中的,相邻面序列`进行合并,得到合并后的新面,所述新面至少包括四个点; 所述新面排序替换在所合并的两行面关键字命令行。

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注