炮兵作战模拟中战场实体的处理方法探析

时间:2022-04-30 01:21:58

炮兵作战模拟中战场实体的处理方法探析

摘要:本文根据D3D生成的战场环境静态网格实体模型和动画网格实体模型的特点,通过对模型进行具体细分,针对性地提出了相应的处理方法。

关键词:实体;D3D;模型;网格

炮兵作战模拟不仅要建立可靠的数学模型来描述作战与训练的动作与过程,还要用逼真的图形显示出来相当于场地的作战地域和各参战单元,建立逼真的战场环境,形成各种战场态势。因此,对战场环境中的各实体单元的显示与处理显得至关重要。

一般来说,用D3D立即模式(程序中人工指定几何体的特征数据),所绘制的几何体都是比较简单的,且工作量很大。对于建筑物。火炮等众多外型复杂物体的构建则几乎无能为力。而这恰是许多建模软件的强项。通过利用3DMax等软件先把模型建成,转换为D3D可以控制的格式。这种编程方式就是所谓的保留模式。

1 静态网格实体的处理方法

静态网格实体模型中不含有动画帧的定义,也就是不能显示动画。尽管可以用矩阵变换来实现一些简单的移动、缩放、旋转等动作,但这并不是真正的动画。静态网格依据构建方式分为两种:单网格模型和多层级模型。

(1)单网格静态模型

这是最简单易用的一种模型组成。即模型中所有的顶点都属于同一个物体。顶点间不存在从属关系。对一些简单的物体建模中。会用到这种类型。如碉堡、指挥所等。

D3D框架文件中D3DMesh类封装了大量的API函数,只留了很少几个对外函数,利用这几个函数可以很方便地完成对单网格的×文件创建、尺寸缩放、材质与纹理管理、渲染等工作。

一般格式的文件调用过程如下:将文件中包含的顶点坐标,纹理坐标等数据读入内存缓冲区。并依据文件中指定的材质属性创建材质。依据文件中指定的名称查找出纹理文件。并创建纹理资源。按模型文件中指的三角型组成方式来作出渲染。

(2)多层级静态模型

这种类型的模型文件中的物体是多个,物体之间存在空间关系与逻辑关系,在文件中有明确的标识。

在实际应用中,利用D3D框架文件中D3DFile类可以方便完成对多层级的x文件网格模型的调用。

一般格式的文件调用除了建立顶点缓冲区、材质、纹理之外。还需建立足够的矩阵来正确表达模型内各部分之间的空间关系与逻辑关系。

这项工作很复杂:文件中存在多个物体,并且其间还有包含与被包含的层级关系;有矩阵的加入,并且它描述的可能是具体的物体,也可能是几个相关物体的组合。需要通过多层递归运算,直至找出真正需显示的物体及其矩阵。在这个过程中的一点失误,都会影响到最终显示结果。

值得指出的是,如果把模型文件调入3DMax后。可以利用3DMax的内置功能把多层级型文件转为单网格型文件。这样就可以更方便的实现控制。

2 动画网格实体的处理方法

(1)单网格动画模型

它可由多种工具所创建,更像传统意义上的动画,只不过它包含的是三维信息。实际上,模型是一系列关键帧的集台。每个关键帧都是一个完整的模型,各含有一套完整的顶点数据信息。在关键帧数较多的单网格文件中,文件包含的数据就多,程序调用它时,所占的内存也多。这种格式模型文件的优点是很便于描述复杂的动作。文件创建容易,编写调用它的代码也比较简单。

调用过程如下:在初始化阶段,将文件包含的所有信息读入内存,并将之做一定的格式转换,填充成D3D可操作的结构或数组。在绘制阶段。根据程序的要求调用不同的关键起始帧与关键结束帧,将其问所有的关键帧逐一绘制,并根据当前时间不同,在每两个相邻的关键帧之间作空间上的内插,以保证动画播放的平滑性。

绘制具体过程是把所要求的关键帧的信息转为D3D的顶点缓冲区与索引缓冲区的数值,以及有关的绘制命令。之后工作则由D3D完成。

比如有一个表示人物的模型:它从第1到第5帧描述奔跑。由“act_run”绘制命令来代表。在程序中,当让它奔跑时,只需把“act_run”作为参数传递给相应函数,函数就把此文件中的第1到第5帧之间的数据所对应的缓冲区指针调出,并按顺序提交渲染。它还要根据其它参数来确定泻染速度,并在未接到新的绘制命令之前,一直进行动作循

(2)多层级动画模型

这种动画也被称为分段式动画。和多层级静态模型一样,它由多个单独网格和表述其间逻辑关系与空间关系的矩阵组成,不同之处在于它包含了关键帧的信息。与单网格动画的不同之处在于:无论关键帧数有多少,它的顶点信息仅有一份。在不同的关键帧上。保存的是各个单独网格在当前应执行的变换矩阵信息。

在渲染时,若一个网格如果有子网格,则它的动作必然也对子网格的动作有遗传影响。在调用模型动作的同时,能人为的控制模型的动作执行速度。还可以加入移动、旋转、缩放的外部动作。必要时还要再外加上动画。情况更复杂。功能也更强大。

例如,一个带枪士兵的模型,它有行走、奔跑、射击、俯卧、等动作。则人体的动作必然对枪支的动作有影响。在完成奔跑动作的同时。必然要有位置上的移动。如果不沿直线奔跑,还必需同时有沿模型y轴的转动。在射击的同时,还应配上枪声和枪口焰。这些都是最基本的外部动画控制。

在实际应用中,还应有被击中的碰撞检测、碰撞与抛物的物理模拟、寻路与发现的启发搜索算法。这些要求共同组成了动画模型的复杂性。

综合以上的分析结果如下:

(1)无论是静态模型还是动画模型,都可分为单网格和多层级两大类。在过去的建模中。用单网格的机会多些;在现在和以后,用多层级网格的机会要多一些。程序中使用的模型调用方法完全因模型格式的不同而不同。

(2)由于多层级网格模型的突出优势,即只含一份顶点数据,它受到日益广泛的支持。对多层级网格动画模型的调用是所有模型调用中最为复杂的活动,但它也是非常有实用价值的。

参考文献

[1]武永康,Direct3D原理与API参考[M],北京:清华大学出版社,2001

[2]李清泉,杨必胜,史文中,等,三维空间数据的实时获取[J],建模与可视化,2003(12)

上一篇:企业如何实现网络与应用双管齐下? 下一篇:佳能A系列数码相机常见故障综合解析