树木模型的.X文件转换与林分建模

2013-12-29 02:57陈宇拓颜君萍
中南林业科技大学学报 2013年12期
关键词:林分分枝胸径

陈宇拓 ,颜君萍 ,邓 静

(1.中南林业科技大学 计算机与信息工程学院,湖南 长沙 410004;2.南昌工学院 民族教育学院,江西 南昌 330000)

树木模型的.X文件转换与林分建模

陈宇拓1,颜君萍2,邓 静1

(1.中南林业科技大学 计算机与信息工程学院,湖南 长沙 410004;2.南昌工学院 民族教育学院,江西 南昌 330000)

通过对.X文件结构和内核的详细解读,给出了复杂模型的.X文件转换方法,并以构建一大型林分三维场景为例,阐述了对其高效、快速建模的方法过程。针对树木和林分形态结构的多样性、复杂性和信息量大等特征,利用所建树木基础模型,快速群生林分中树木模型及其. X文件,根据样地属性和对应. X文件建立林分三维模型。实验结果表明,利用.X文件表述复杂模型,不仅可以大大提高模拟大型复杂三维场景的速度,而且能够减少对原始数据的依赖,降低算法复杂度,提高建模效率。

树木模型;.X文件;数据交换;林分建模

在三维空间中,一个复杂的三维模型由成千上万个三角面片组成。要快速、高效的构建拥有诸多复杂模型的大型三维场景,需要有高性能计算机支撑,而在普通的微机上很难实现。林分三维模型是一个典型的大型复杂三维场景,且具有不规则性、随机性和不可控性等特点,一个林分通常由上千棵千枝百态的树木及复杂的地表组合构成,每棵树本身就是一个非常复杂的三维模型[1-2]。如何在计算机性能配置标准不是很高的情况下,快捷、高效率、高真实度地构建林分三维模型,实现树木模型与林分模型的数据流畅交换与重构是关键。

研究和实验表明,由于林分模型的复杂性和多样性,直接用建模软件进行林分三维建模,几乎是无法实现的,更难以实现林分三维模型的交互式动态演示和浏览。本研究对林分建模的基本思路是:根据某一树种的一棵或多棵树木较详尽的实测数据,建立该树种的树木基础三维模型;然后利用拟合的该树种树木结构与生长规律曲线参数方程,结合树木主要结构因子和随机变量,对基础模型数据进行编辑调整,得到该树种各种年龄和各种形状结构的树木模型数据,由这些树木模型数据建模,并分别将所建模型存储为.X文件;最后根据林分样地属性和对应树木.X文件构建该树种的整个林分模型。

目前能为高级语言调用的三维模型数据格式甚少,且存在对模型数据编辑能力差、解读繁琐和数据量大等缺陷,尤其是针对三维模型数据。在 Microsoft DirectX3 D 中,引入了一种开放的3 D数据存储格式——.X文件。它支持自定义模板结构,可以存储自定义的任何一种数据,同时在DirectX中的D3DX库提供了丰富的支持函数,几乎可以不用自己接触最底层的数据读入工作,就可以轻松编辑使用.X文件,为从树木模型高效快捷群生林分模型提供了一个有效的途径。

1 树木模型的数据转换

1.1 .X 文件的组织形式

1.1.1 .X 文件的头信息

.X文件一般都包含类似这样的头部说明:xof 0302txt 0032,其中xof说明是X文件,0302表示使用的是X文件格式Version3.2,即版本号3.2。而txt表示是文本格式,可以用记事本打开编辑。0032表示32位浮点数据长度,也可以用0064表示64位浮点数据长度[3]。

1.1.2 定义模板

.X文件是由模板(template)驱动的,模板定义了如何存储一个数据对象,这样用户便可以自己定义具体的格式。一个模板和一个数据对象之间的差异在于所有的模板都是以一个template单词开始,模板看起来很像一个C语言的结构定义,数据对象就是那些模板的实例。使用模板定义包含在.X文件里的数据对象(一个模板定义了数据对象的布局),每个模板都可以通过一个数据类型的集合去定义并容纳任何类型的数据。同时,任何数据类型的组合都可以在一个模板里使用。

模板header的定义如下:

template Header {

<3 D 8 2 A B 4 3-6 2 D A-1 1 c f-A B 3 9-0020AF71E433>

WORD major;

WORD minor;

DWORD f l ags;

}

模板由四部分组成:第一部分是模板的名字,可由数字、字符、下划线构成,但不能以数字开头,第二 部分是 GUΙD(Global Unique Ιdentif i er,全局唯一标识符),第三部分由各个数据项构成,最后一部分用于控制模板的限制程度(开放、闭合受限)。模板的使用与结构体有相似之处。

另外,.X文件都至少包含一个Mesh模板。在一个Mesh模板中,还可以嵌套多个子模板,例如材质模板、法线模板、纹理模板等。

1.1.3 数据对象

定义好模板之后,我们就可以实例化模板以存储实际数据。

定义格式:模板名 + < 实例名 >{...} 例:Mesh Fram{...}

其中,实例名不是必须的,可以省略。{ }里的是存储的实际数据。

1.2 树木模型的 .X 文件结构设计

依据树木实测数据建模,是构建树木模型最精确的方法。我们依据某树种少量树木较详尽的实测数据建立该树种基础模型,通过拟合的该树种生长参数方程和结构关系参数方程(胸径、树高、树冠、分枝之间的关系参数方程,参数方程的构建方法与过程在另文中讨论),同时结合随机变量的控制对基础模型数据进行编辑、调整和变换,得到一片林分中以不同胸径为基本结构参数的所有树木模型数据,同一胸径的树木模型通过参数和变量控制随机生成各种形状结构。整个林分树木模型建模完成后分别生成.X文件。下面给出生成树木模型.X文件的基本思想。

以杉树为例,构建其基础模型的参数主要包括主干、一级分枝、二级分枝3个Frame模板[4-5]。每个Frame模板由两个子模 板 组 成:FrameTransformMatrix和 Mesh,FrameTransformMatrix模板定义部件初始世界变换矩阵,Mesh模板定义部件的顶点的坐标、材质、法线、纹理等属性。Mesh中定义的3D物体的所有顶点乘以世界初始变换矩阵,得到Mesh中表示的3D物体的初始位置。主干、一级分枝和二级分枝三者之间存在阶层关系,所以主干模板嵌套了一级分枝模板,一级分枝模板嵌套了二级分枝模板。

以下为树木模型的.X文件结构设计:

xof 0302txt 0064 //头信息

Header {........} //Header 模板

Frame frm_Frame0 {//存储树木模型开始,首先存储树木主干信息

//frm_Frame0由FrameTransformMatrix和Mesh这两个子模板组成

FrameTransformMatrix { ........} //定义树木主干的世界变换矩阵

Mesh //此处存储主干的各三角片顶点坐标

{ MeshMaterialList {... ...} //存储主干的材质信息

MeshNormals { .......} //存储组成主干的各三角片顶点的法向量

MeshTextureCoords {........} //存储主干的纹理信息 }

Frame frm_Frame_1 {//存储第一根一级分枝开始,一级分枝模板信息

FrameTransformMatrix { ........} //存储该一级分枝的世界变换矩阵

Mesh{......} //存储该一级分枝的相关信息,存储格式与上面的Mesh相同

Frame frm_Frame_1_1 {//存储第一根二级分枝开始,二级分枝模板信息

FrameTransformMatrix { ........} //存储该二级分枝的世界变换矩阵

Mesh{.......}//存储该二级分枝的信息

}//存储该二级分枝完成

......................

Frame frm_Frame_1_n {}//存储该一级分枝上的第n根二级分枝的信息

}//存储第一根一级分枝结束

Frame frm_Frame_2 {.....} //存储第二根一级分枝

.........................

Frame frm_Frame_m {.....} //存储第 m 根一级分枝

}//存储树木模型.X结束

其中,一级分枝的完整变换矩阵为:

frm_Frame0.FrameTransformMatrix*frm_Frame_m.FrameTransformMatrix

二级分枝的完整变换矩阵为:

frm_Frame0.FrameTransformMatrix*frm_Frame_m.FrameTransformMatrix

*frm_Frame_m_n.FrameTransformMatrix

2 林分的建模

以构建湖南攸县黄丰桥林场一片10年生杉树林为例,该林分面积为80 m×40 m近似长方形,拥有956棵树,胸径集中在8~16 cm范围,基本呈正态分布。构建其林分模型,首先根据林分的样地属性构建林分的地表模型;然后根据样地林分信息表(本研究建模方法只需用到树种、树木位置坐标X、Y、Z和胸径信息),读取林分各位置坐标对应胸径范围内的树木模型.X文件,不同位置出现的树木,其胸径可能属于同一胸径范围,但是它们的结构是不同的(由于分枝数量、长度、仰角、方位角的细节变化是利用受约束随机变量来控制的,同一胸径范围下可随机生成自定义任意棵数结构细节不同树木模型和.X文件,选取该胸径范围下哪个树木模型采用随机结合立地因子方式。例如:假设某位置对应的树木模型的胸径大小属于[m,n]范围内,m和n的取值在林分中最大与最小胸径之间,m和n的差值大小决定林分的建模精度,每个[m,n]胸径范围内建有多个不同结构树木模型及.X文件,则可在[m,n]范围内随机确定一个.X文件,如“m_n_k.X”,作为该位置的树木模型);最后将.X文件对应的树木模型一一重构在地表相应的位置上,生成林分模型。

2.1 树木模型的读取

读取树木模型.X文件的源代码:

private void ReadX() //读取树木模型的 X 文件

{ ExtendedMaterial[] materials = null;

mesh = Mesh.FromFile( “Tree.X”, MeshFlags.SystemMemory,

device, out materials);

if (meshTextures == null)//如果还未设置纹理

{

meshTextures = new Texture[materials.Length]; //纹理数组

meshMaterials = new Material[materials.Length]; //材质数组

for (int i = 0; i < materials.Length; i++)

{

//读取树木模型的材质

meshMaterials[i] = materials[i].Material3D;

meshMaterials[i].Ambient = meshMaterials[i].Diffuse;

//读取树木模型的纹理信息

meshTextures[i] = TextureLoader.FromFile(device,

materials[i].TextureFilename);

}

}

}

2.2 生成林分模型

按林分样地属性树木空间位置坐标和胸径,读入和选取相应树木模型的.X文件之后,在地表模型上定位插入该树木模型,构建整个林分三维模型。

本研究研发的林分建模系统运行环境,硬件为 DELL PRECΙSΙON T3600(基本配置: Ιntel 至强E5 CPU主频3.0GHz,内存容量8GB);软件为WΙN7专业版64位操作系统,在VS2008编译环境下,采用C#程序语言和Direct 3D进行程序设计。林分建模系统对湖南攸县黄丰桥一块10年生杉树林分样地(共956棵树)进行建模,采用.X文件比不采用.X文件建模,生成林分模型的时间从12 min缩短到15 s,并能流畅实现林分模型动态生成与交互式导航演示。图1和图2分别为一株10年生杉木模型和群生956棵10年生杉木林分模型。

图1 十年生杉树模型Fig.1 Model of ten-year-old Chinese f i r

图2 十年生杉树林分模型Fig.2 Model of ten-year-old Chinese f i r stand

3 结 论

本研究主要探讨如何实现复杂模型到.X文件的数据转换,高效、快捷地构建群生模型,如大型林分模型场景等。在构建的基础树木模型的基础上,通过少量树木的实测数据及参数和变量控制,生成一系列能表述不同形态结构的树木模型,通过开发针对性的程序转换为.X文件,并利用.X文件中的变换矩阵,随机参数和变量实现树木模型的几何变化,林分模型的构建。实验表明,该方法大大减少了对实测数据的依赖,提高了林分建模的速度和灵活性,使不同建模软件平台构建的复杂模型数据能够自由通畅交换,在普通微机上实现大型复杂三维场景模型的构建和动态模拟。

[1]熊启明 ,杨柳青 ,陈 伟 ,等 . 基于 GΙS 的树木三维模型研究[J]. 中南林业科技大学学报,2011,31(4)∶174-177.

[2] 石银涛,程效军,张鸿飞. 基于参数L-系统的三维树木仿真[J]. 同济大学学报(自然科学版),2011,39(12)∶1871-1874.

[3] 郭 杨,李玉萍.基于X文件的数据库管理方法的研究[J].计算机时代.2011,5∶34-35.

[4] 卢康宁,张怀清,刘 闽. 基于实测数据的杉木构筑型研究[J]. 林业科学研究,2011,24(1)∶132-136.

[5] 陶嗣魏,赵 东.树木几何结构快速建模的研究[J].北京林业大学学报 ,2013,35(2)∶97-101.

Conversion of .X f i le of tree model and forest stand modeling

CHEN Yu-tuo1, YAN Jun-ping2, DENG Jing1
(1. School of Computer Science & Ιnformation Engineering, Central South University of Forestry and Technology, Changsha 410004, Hunan, China; 2. College of National Education, Nanchang University of Technology, Nanchang 330000, Jiangxi, China)

Through minutely unscrambling the structure and kernel of .X f i le, the conversion method of .X f i le for complicated model was given. By taking the construction of a large forest 3D scene as the example, the methods and processes for high-eff i cient and rapid modeling were expounded. Taking into account the characteristics of tree and stand structure’s diversity, complexity and large amount of information, and using the basic tree model constructed, the tree models and theirs .X f i les which grew quickly by clusters, and according to the sample plot properties and the corresponding .X f i les, the forest stand 3D model has been set up. The results show that the expression of complicated model by using .X f i le not only could raise the speed of simulating large complicated 3D scene but also could reduce the dependence on the original data, low down the complexity of the algorithm, and improve the eff i ciency of modeling.

tree model; .X f i le; data exchange; forest stand modeling

S771;TH126.2;TP391.72

A

1673-923X(2013)12-0006-04

2013-07-05

国家863计划资助项目(2012AA102002)

陈宇拓(1963-),男,湖南衡山人,博士,教授,主要研究方向为图形图象处理、森林工程;E-mail:cyt28@126.com

[本文编校:文凤鸣]

猜你喜欢
林分分枝胸径
分枝大苗建园苹果树当年如何修剪
赤松纯林胸径结构对枯梢病发生的效应
武汉5种常见园林绿化树种胸径与树高的相关性研究
一株吊兰
五常水曲柳变异分析及优良家系的早期选择
油菜新品种评比试验总结
抚育间伐对油松林下灌木多样性的影响
短截和摘心对矮砧苹果幼树分枝特性的影响
4种人工林的土壤化学性质和酶活性特征研究
4种阔叶混交林的持水特性研究