APP下载

OSGB模型自动转换为DWG的三维模型

2019-08-27范冬林谢美亭康传利黄莉婷付波霖

桂林理工大学学报 2019年2期
关键词:法线顶点纹理

范冬林,谢美亭,康传利,黄莉婷,付波霖

(桂林理工大学 a.测绘地理信息学院;b.广西空间信息与测绘重点实验室,广西 桂林 541006)

0 引 言

倾斜摄影测量是高精度的航拍测量,因其效率高、成本低等特点,使得利用倾斜摄影测量方式绘制地形图渐受重视[1]。利用倾斜摄影技术生成的倾斜摄影三维模型数据相较于传统人工建模数据,可以更加真实地反映地物的情况,增强三维数据所带来的真实感,从而扩大倾斜摄影技术的应用,使得倾斜摄影测量数据处理逐渐成为倾斜摄影测量领域研究的热点之一[2]。近年来,学者对倾斜模型单体化、多源数据融合等倾斜数据处理方式进行了大量的研究,如耿中元等提出的一种基于外部缓冲区和TIN瓦片金字塔的数据融合新算法来解决倾斜摄影的三维模型与大场景地形相融合问题的方法,扩展了倾斜模型数据作为基础场景在三维地理信息系统中的应用[3];王勇等提出利用三角面片的可分割性质来解决倾斜摄影数据的三维模型可分离单体化问题,深化了倾斜模型数据的应用场景[4]。市场上也已经推出了多款倾斜摄影测量数据处理软件,如Smart3D Capture、SuperMap GIS7C、Skyline V6.5等国内外软件[5-7]。此外,对在其他三维建模软件上处理倾斜摄影数据的方法进行相关研究,如利用倾斜摄影技术与3ds Max插件开发技术实现的半自动建模[8-9];在数据处理阶段中,利用SketchUp二次开发技术在倾斜测量数据模型进行建筑三维重建[10];更进一步还有基于CeisumJS实现的倾斜摄影地形数据Web三维渲染技术[11-12]等,但倾斜摄影测量数据应用在AutoCAD建模上的相关研究仍然较少。若能扩展OSGB模型转换格式,将OSGB模型自动转换为DWG三维模型,实现包括纹理数据的真实渲染,这将大大促进倾斜摄影模型在AutoCAD中的使用,满足国土、规划部门的业务需求,更好地解决实际生产中的倾斜摄影数据处理与应用问题。

1 OSGB与DWG模型文件剖析

1.1 OSGB模型文件

通常而言, 单个OSGB三维模型数据中有多个文件夹, 每个文件夹下包含多个OSGB格式的数据文件,每个OSGB文件包含1个根节点(Group类型); 中间层次的节点(Group类型或Geode类型), 其包含有模型的几何信息、 纹理信息、上下层节点之间的父子关系; 最底层的节点(Geode类型),该节点仅包含模型的几何和纹理信息。

从数据模型上看,OSGB模型是利用自动化软件,经过一定处理流程,运算生成基于真实影像的超高密度点云,并以此生成基于真实影像纹理的高分辨率实景三维模型,其本质上是mesh模型[13]。

1.2 DWG模型文件

DWG文件为AutoDesk公司推出的一种非公开的图形格式文件,其由点、线、面等实体构成CAD图形数据库[14]。DWG文件内容分为索引部、标题部、实体部、名表部四部分。图形的大部分信息都在实体部段中,因此对于从OSGB模型转为DWG模型,如何创建DWG的实体部的数据是重点。创建实体段的数据首先要考虑需要读取的数据的存储方式,然后进行后一步的处理或存入数据文件。

2 技术分析

OpenSceneGraph(OSG)是使用OpenGL技术开发的, 基于C++平台的应用程序接口(API),能让开发人员更加快速、便捷地创建高性能、跨平台的交互式图形程序[15]。国内倾斜摄影测量数据多数为OSGB格式,该格式为OSG的二进制数据格式。在OSG中有多种库文件,其中的OSG读写库(osgDB库)采用插件管理架构,允许用户程序加载、使用和写入3D数据库,以支持大量常见的3D图形文件格式。本文利用该插件机制完成对OSGB数据的解析。

目前, AutoCAD提供的开发接口有ObjectARX、 .NET、 VisualLISP、 VBA等, 其中ObjectARX(ARX)是AutoDesk公司针对CAD平台上的二次开发而推出的一个开发软件包, 它提供了以C++为基础的面向对象的开发环境及应用程序接口, 而且CAD自身的许多模块也是用ObjectARX开发的, 它的功能最强大、 性能最高,能真正快速地、 完全地访问DWG文件, 使用ARX编程的函数的执行速度大大提高[16]。 ARX应用程序是一个DLL(动态链接库), 共享CAD的地址空间, 对CAD进行直接函数调用[17], 使得开发者可以充分利用CAD的开放结构, 直接访问CAD数据库结构、 图形系统以及CAD几何造型核心, 能够在运行期间实时扩展CAD功能。

由以上分析可知,将OSGB模型自动转换为DWG三维模型,首先要先利用OSG对OSGB文件进行解析,得到顶点坐标、纹理坐标、面顶点索引、纹理、法线等数据;然后将这些数据进行存储,作为缓存文件,利用ARX重新创建多个面片组成的三维模型及纹理映射;最终输出DWG三维模型文件。技术路线如图1所示。

3 OSGB到DWG数据模型的转换

3.1 OSGB模型数据解析

倾斜摄影技术生成的OSGB模型数据主要涉及两类数据:模型数据(包含顶点坐标、面部索引和法线)和纹理数据(包含纹理图片和纹理坐标)。本文根据OSGB格式特点,针对上述两类数据完成OSGB模型数据解析。

3.1.1 模型数据解析 OSG中主要包含有Node、 Geode(叶节点)和Group(组节点)这三大基本类节点, 可以利用OSG中的文件读写库(osgDB),调用readNodeFile函数,将OSGB模型数据加载到Node类对象中,然后设计顶点访问器和纹理访问器,将这两个访问器都继承于NodeVisitor类,并重载apply函数,遍历整个OSGB模型场景函数并调用被访问子节点的函数,依次对Node、Geode、StateSet节点进行处理。其中Geode继承自Node节点,其包含几何体信息,用于管理几何图元,模型数据的解析主要针对该节点进行。

3.1.2 纹理数据解析 纹理数据是倾斜模型真实表达的基础,对纹理进行正确解析才能确保转换后的DWG模型高保真性。OSGB模型中Texture2D管理场景中的纹理对象,用Image管理图像的像素数据,若要用2D图像文件作为纹理图形,就要将文件名赋给Image对象,并将Image关联到Texture2D。因为Geometry对象将vertex及其属性数据(包括图元的顶点、 顶点颜色、 顶点关联方式、 法线颜色、 法线、 纹理坐标等基本信息)存储在数组中,故可以通过数组索引将顶点数组映射到颜色、法线或纹理坐标数组。考虑到OSGB模型的纹理坐标与DWG模型Y轴参考点不同,故在缓存纹理坐标时需将其进行转换,在解析纹理坐标时需要根据该公式计算解析后的纹理坐标:

Xd=Xo,

(1)

Yd=1-Yo。

(2)

其中,Xd、Yd表示DWG模型中的纹理坐标;Xo、Yo表示OSGB中的纹理坐标。

针对纹理数据,本文直接将其解析为图像格式数据。由此便完成了OSGB数据解析工作,解析过程如图2所示。

图2 OSGB文件解析示意图Fig.2 Schematic diagram of the OSGB model parsing

根据上述分析,本文对OSGB模型数据的解析步骤为:① 设计2个继承于NodeVisitor类的访问器——顶点访问器(GeometryVisitor)和纹理访问器(TextureVisitor);② 将一个具体的访问器对象传递给节点,遍历整个OSGB模型场景;③ 解析结点中含有Drawable对象中的数据。

实现的关键代码如下:

//获取模型数据

void GeometryVisitor::processGeometry (osg::Geometry* geo, osg::Matrix& m)

{

if (geo->containsDeprecatedData()) geo->fixDeprecatedData();

//获取顶点数据

processArray(“v”,geo->getVertexArray(), m, false);

//获取法线数据

processArray(“vn”,geo->getNormalArray(), m, true);

//获取纹理坐标

processArray(“vt”,geo->getTexCoordArray(0));

};

//获取纹理数据

Texture2D*tex2D=NULL;

StateAttribute*pTexture;

pTexture=state->getTextureAttribute(i, StateAttribute::TEXTURE);

if (tex2D=dynamic-cast(pTexture))

{

//获取到纹理

Image*image=tex2D->getImage();

}

3.2 DWG三维模型重组

倾斜摄影技术生成的OSGB模型本质上是mesh模型,该模型是以三角面片加上纹理的方式完成渲染,其数据组织方式与AutoCAD中的数据类型AcDbSubDMesh较为相似。AcDbSubDMesh可以创建多个面片组成的三维模型,并支持纹理映射。利用3.1节解析后的模型数据和纹理数据,按照AcDbSubDMesh的创建方法进行三角面片模型组织,创建mesh是实体,完成DWG模型重组。由此便实现OSGB三维模型到的DWG三维模型的转换。DWG三维模型重组方式如图3所示。

图3 DWG三维模型重组方式Fig.3 Restructuring method of DWG 3D model

基于上述分析,AutoCAD中进行三维模型重组需进行模型数据和纹理数据的设置,通过纹理坐标完成纹理映射,具体步骤:① 创建AcDbSubDMesh对象meshObj;② 创建命名材质objMaterial;③ 将材质objMaterial赋予meshObj;④ 设置纹理坐标和法线。

实现的关键代码如下:

//创建一个新的mesh对象

AcDbSubDMesh* ptrMesh=new AcDbSubDMesh();

es=ptrMesh->setSubDMesh(*(pModel Data->pVertexPnts), *(pModelData->pFaceId x),0);

//使用纹理图片创建材质

void CreateMaterial(string name, string meterialPath, AcDbDatabase *pDb);

//赋予材质给mesh对象

pSubDMesh->setMaterial(L“osgbMatrial1”, Adesk::kTrue);

//设置顶点纹理坐标

pSubDMesh->setVertexTextureArray(*(osgbModel.pTexturePnts));

//设置顶点法线

pSubDMesh->setVertexNormalArray (*(osgbModel.pNormalPnts));

3.3 转换实例

以南宁市航洋城为例, 先利用无人机进行倾斜摄影数据采集, 然后生成OSGB格式数据, 选取三维模型中一块数据,该块数据隶属第21层级, 包含路面、 树和独立石碑地物 。在Visual studio 2015环境下编程实现本文提出的方法, 硬件环境为: 戴尔optiplex 7080 台式机, i5四核四线程CPU(主频3.30 GHz), 内存为12 G, 硬盘500 G。 软件配置: 操作系统为Windows 7 SP1, AutoCAD版本为2017, OpenSceneGraph版本为3.6.1。

实验数据大小为98 kB,包含912个顶点坐标数据,12个纹理坐标数据以及884个面片数据。该模型的部分顶点坐标数据见表1,部分纹理坐标数据见表2,部分的面部索引数据见表3。

针对该模型, 首先将其解析得到顶点坐标数据和面部索引数据, 然后根据ARX以mesh的方式组织为DWG模型, 得到纹理的mesh模型。 图4a为在Acute3D Viewer中以线框方式显示的转换前的模型和图4b中在AutoCAD 2017中以本文方法建立的mesh模型, 可以看出二者都由顶点数据连接而成的三角面片组织基本一致, 说明了利用本文方法可以将OSGB中模型数据正确转换为无纹理的DWG模型。进一步解析纹理数据和纹理坐标, 将纹理数据以图片的方式存储在文件系统中。利用ARX创建该模型对应的材质,并将材质运用到该模型上,最后得到转换后的DWG三维模型。图5a表示原始OSGB模型在软件Acute3D Viewer中的显示效果,图5b表示转换后的DWG三维模型在软件AutoCAD中的显示效果。可以看出转换后的DWG三维模型显示效果良好,与OSGB模型具有一致的视觉效果。

表1 OSGB部分顶点坐标数据

表2 OSGB部分纹理坐标数据

表3 OSGB部分面部索引数据

图4 转换前后的对比(线框模式)Fig.4 Model comparison before and after conversion(wire-frame mode)

为了进一步分析, 对比了两种模型转换前后数据组织情况(表4), 由于DWG模型采用的是非索引记录方式, 因此其顶点数和UV数要远大于OSGB模型中的数量。 另外, 从OSGB文件中将纹理信息保存到图片格式也增加了文件的大小。

图5 转换前后的对比(真实模式)Fig.5 Model comparison before and after conversion (realistic mode)

表4 两种模型的数据组织情况

4 结束语

本文通过对OSGB模型的解析和DWG模型重组方法进行研究分析的基础上,提出了一种将OSGB模型自动转换为DWG模型的方法,利用OSG和ARX实现了OSGB模型自动转换为DWG三维模型的方法,并对转换前后模型的数据组织情况进行了对比分析,验证了本文方法的有效性,转换前后的模型显示效果具有较高一致性,能够在AutoCAD 2017中正常加载与实现,达到国土、规划部门使用三维模型数据的精确性要求。

本文方法只是针对单个OSGB文件进行解析,但一个完整的倾斜摄影模型是由多个OSGB文件组成的,在显示倾斜摄影测量三维模型时,还要考虑OSGB数据的LOD显示效果需求,因此在LOD效果现实等方面还有待于进一步研究和探索。

猜你喜欢

法线顶点纹理
基于定位法线的工件自由度判定方法及应用
过非等腰锐角三角形顶点和垂心的圆的性质及应用(下)
过非等腰锐角三角形顶点和垂心的圆的性质及应用(上)
基于BM3D的复杂纹理区域图像去噪
使用纹理叠加添加艺术画特效
椭圆法线定理的逆定理
TEXTURE ON TEXTURE质地上的纹理
消除凹凸纹理有妙招!
浅谈切线空间法线贴图在三维建模中的应用
数学问答