mfc oledb oracle,基于X文件的数据库管理方法的研究_MFC技术

论文导读::引入了一种新的模型文件格式――X文件。探索图形参数的数据库管理方法。

论文关键词:X文件,MFC技术,数据库,OLEDB技术

在DirectX中,为了使用实现建立好的模型文件,引入了一种新的模型文件格式――X文件。X文件中存储了三维模型的顶点坐标、面索引、颜色、法向量和纹理坐标等信息,并且可以包含用户自己定义的3D对象格式。

如何从X文件中读取信息和使用X文件是许多3D技术的关键。本文对X文件进行深入研究,探索图形参数的数据库管理方法。

1□X文件简介

在X文件的开头一般有一个简单的文件信息;xof表明这是一个X文件;txt 表示其存储的文件格式是文本格式,其存储格式还可以是二进制方式,用binary来表示;0302是32位浮点数,如果是64位就可以用0604表示了。[1]

X文件是由模版驱动的,每个模板都以关键字template开头,然后是模板名。定义的模板都必须有一个GUID以识别该模板的唯一身份。然后是所需要定义的各种变量或者是需要的模板。模板是可以嵌套的,而且可以直接使用DirectX SDK中已经定义好的标准模板。模板一般分三种类型:封闭式模板MFC技术,开放式模板,限制式模板。

定义好模板之后再实例化,以存放实际数据。顺序是模板名,实例名(可以省略),实际数据。

2□关键技术

2.1□用MFC构造DirectX应用框架

用MFC类库进行开发DirectX SDK的应用程序,可以用VC++的ClassWizard方便地对Windows消息进行映射,增加了程序的可读性和代码的可重用性。

文档/视图结构可将数据处理和用户界面分开,使得模块划分更加合理,模块之间独立性强。作为一个统一的框架,文档/视图结构对MFC应用程序进行必要的控制,并具有相应的扩充性和灵活性。

2.2□加载X文件

从X文件读取数据, 创建相应的Mesh是最常见的方式,也可以从可执行文件中的资源中读取X文件数据,有时需要从内存中读取X文件数据,可以调用D3DXLoadMeshFormX()函数:

HRESULT D3DXLoadMeshFromX(

LPCTSTR pFilename,

DWORD Options,

LPDIRECT3DDEVICE9 pD3DDevice,

LPD3DXBUFFER * ppAdjacency,

LPD3DXBUFFER * ppMaterials,

LPD3DXBUFFER * ppEffectInstances,

DWORD * pNumMaterials,

LPD3DXMESH * ppMesh);

Mesh中包含的物体模型是由顶点及顶点索引组成的,Mesh只是起把顶点,顶点索引,纹理属性,包装在一起的作用,简单资源的统一管理论文范文。[2]

执行D3DXLoadFromX函数完成X文件的加载后,Mesh的各种数据将存放在顶点缓冲区、顶点索引缓冲区、材质缓冲区、邻接顶点缓冲区、特效属性缓冲区和属性缓冲区中,其中,材质缓冲区、邻接顶点缓冲区以及特效属性缓冲区的地址由D3DXLoadMeshFromX 函数成功执行后直接返回MFC技术,其他的缓冲区地址可利用ID3DXMesh接口函数来获得。[3、4]

2.2□建立数据表保存X文件中的mesh数据

顶点缓冲区是D3D保留的连续内存区,可能在内存中,可能在显卡内存中,需要进行Lock以后访问,然后对每个节点进行数据库操作。

长期Lock顶点缓冲区将对系统性能产生影响在此期间Mesh不能进行其他任何操作。因此需要把顶点缓冲区拷贝到自己申请的内存区,方法如下:

DWORD totalSize = vertexDesc.Size;

VOID* vertexesBuffer = malloc(total Size);

memcpy(vertexesBuffer, vertexes, totalSize);

此时,便可以对此内存区作各种操作和处理了,这种方法可以有效的避免内存锁定。

在Oracle数据库中创建表来保存MESH数据,结构如表1。

mesh 都是一系列的face(三角形)组成。每个三角形的顶点有3个序号决定,序号是顶点在Vertex中的序号,即 index 为 0、1、 2 的三角形,其顶点为 vertex中的第 0、 1、 2 个点。

表1□数据库结构

表名

字段名

Mesh

id,name,width,height,depth

Vertex

i,x,y,z

Face_index

mesh_id,i,a,b,c

2.3□数据类型的转换

Mesh的数据格式是连续的float数,而Oracle数据库需要的是DB_NUMERIC类型,需要对Mesh数据作格式转换。float(以及各种数字类型)不能直接转换为DB_NUMERIC, DB_NUMERIC格式转换是考虑到数据库之间的不同的。DB_NUMERIC的数据格式定义如下:

typedef struct tag NUMERIC

{BYTE precision;

BYTE scale;

BYTE sign;

BYTE val[16]; }

调用COM对象可以解决这个问题MFC技术,在msdadc.dll中包含了一个类型转换类 CLSID_OLEDB_CONVERSIONLIBRARY ,这个类实现了IDataConvert接口,可以将Float类型的数据转换成DB_NUMERIC类型。

2.4□通过OLE DB接口访问Oracle数据库

OLE DB是微软提供的一个底层的数据访问接口,它是基于COM接口的。[5]OLE DB对所有文件系统包括关系数据库和非关系数据库都提供了统一接口。这些特性使得OLE DB技术比ODBC技术更加优越。Oracle数据库连接时需要database=数据库名,user=用户名,password=密码。

3□结 论

本文通过列表视图浏览数据记录,用MFC构造DirectX应用框架,预览DirectX图形,并且能够对图形进行放大、缩小等操作;通过倒入模型把DirectX图形存到Oracle数据库中;通过修改记录进入到DirectX环境下就可以修改图形信息,并且通过刷新就可以实现数据库与文件的同步,通过查询记录可以检索数据库,查找所需要的图形。因此,本系统可以实现对DirectX图形的管理,提高作图效率。

参考文献(References):

[1]王德才,杨关胜,孙玉萍.精通DirectX 3D 图形与动画程序设计.人民邮电出版社.2007.

[2]黄旭明,林文如.基于MFC的Direct3D应用开发研究.重庆文理学院学报(自然科学版).2009,(04).

[3]杜圆圆,侯彤璞.Direct3D场景中3D模型的处理方法. 辽宁石油化工大学学报2008,(04).

[4]金纯.X文件的解读和处理. 福建电脑.2005,(09).

[5]魏祖宽,江利娟.数据库访问技术比较研究.计算机与现代化.2009,(12).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值