APP下载

基于DirectX的立体装箱三维可视化辅助模块技术

2014-10-15桂思怡林国顺

计算机与现代化 2014年2期
关键词:装箱手动鼠标

桂思怡,林国顺

(大连海事大学交通运输管理学院,辽宁 大连 116026)

0 引言

“十二五”以来,我国经济社会发展进入新时期,经济结构进入转型期。在此期间,物流行业蓬勃发展,并逐渐加深了对社会经济各方面的影响力。

如今,物流信息化已成为物流行业发展的总体趋势。物流作为技术密集型产业之一,信息技术的应用对其发展至关重要。在物流运输高效化和包装标准化普及的今天,进一步提高物流设施利用率是提高整个运输体系运行效率的有效途径。充分发挥技术革新对物流生产力的助推作用,将物流技术软件与物流实务紧密结合,不断提升物流信息化进程,可以有效地推动物流产业的科学发展。

立体装箱系统是一个三维装箱布局优化系统,其独特的3D可视化辅助模块在空间布局优化算法的基础上,利用应用程序接口DirectX,让用户直观地看到货物在集装箱中的装载效果,并提供全方位手动编辑功能。利用本系统,物流活动中的装箱环节可以实现装载方案的智能化定制,为运输高效化的技术发展提供了新思路。

1 系统设计

本文所述的立体装箱系统,旨在满足港口物流操作中装箱环节的智能布局优化需求,同时考虑系统的扩展性,延伸至满足各种物流载具中的货物布局方案设计需求。随着计算机硬件及软件技术的飞速发展,在虚拟世界中模拟出真实世界的三维场景早已成为现实。结合优秀的三维空间布局优化算法,借助先进的3D程序开发工具,立体装箱系统的三维可视化功能可以实现高度仿真的立体效果。

立体装箱系统包括3大功能模块:基础信息管理模块、装箱任务管理模块和优化配载模块。其中基础信息模块等同于整个系统的字典表,管理的信息包括容器基本信息和货物基本信息,此模块中包含简单的货物及容器3D模型的呈现;装箱任务管理模块是立体装箱系统的基本功能模块,用于制定装箱任务,一般来说,一个装箱任务包括任务基本信息、任务货物信息、任务容器信息和配载规则信息;优化配载模块是整个系统的功能实现模块,针对具体的一个或一组装箱任务,通过空间布局优化算法的计算,设计出令用户满意的装箱方案,并实现装箱方案的3D呈现和全方位手动编辑。模块结构图如图1所示。

2 系统开发平台介绍

本系统基于.Net Framework4.0开发平台,在Microsoft Visual Studio 2010环境下采用C#语言进行编程,数据库服务采用的是Oracle 11g。在立体装箱三维可视化系统的设计阶段,选择合适的3D程序开发工具是至关重要的环节。DirectX和OpenGL是普遍使用的两种技术。相比于DirectX,OpenGL对硬件要求较高、开发周期较长、程序运行速度较慢,因此,兼顾开发语言的兼容性,在对3D程序的交互性和简洁性要求较高的立体装箱可视化系统中,选择DirectX作为3D程序开发工具。

DirectX是直接针对计算机硬件的应用程序接口(API),是一种基于 Visual C++、C#或Visual Basic等多语言的平台。DirectX并不是一个单纯的图形API,它还包含 DirectDraw、Direct3D、DirectInput、DirectSound等多个子功能API,每个部分又包含多个功能组件,共同构成了一套完整的多媒体开发接口。显然,在立体装箱三维可视化系统中,需要用到的是Direct3D组件的功能,因此在程序开发时需添加以下3个dll:

程序代码前添加如下引用:

Direct3D可用于编写、使用3D图形程序,并且可以利用3D操作的硬件加速功能,它是DirectX的核心,负责图形的运算及绘制。Direct3D以其良好的硬件兼容性和友好的编程方式得到了广泛的认可,现在几乎所有的具有3D图形加速的主流显示卡都对Direct3D提供良好的支持。

3 系统实现的关键技术

3.1 立体装箱方案3D场景的实时渲染

三维场景的实时渲染是立体装箱系统可视化模块的核心环节,是立体装箱方案三维呈现的关键技术,同时也是三维场景内对货物实现手动编辑的基础。装箱系统的三维呈现内容不包含复杂的网格对象,采用Direct3D中已有的立方体网格对象即可。因此在该三维场景实时渲染的过程中,必须包含以下要素:3D渲染设备对象、立方体网格对象、网格模型的材质、观察位置矩阵以及网格模型的世界坐标矩阵。单次渲染的过程需要首先将所有要素进行初始化,再进行场景的渲染和呈现。在系统运行的过程中,需要从不同角度观察模型以及对模型进行手动编辑等较为复杂的操作,因此单次渲染的过程需要随着模型数据的改变而反复调用,此即为实时渲染的本质。立体装箱三维场景的实时渲染流程如图2所示。

图2 实时渲染流程图

在渲染的过程中,对渲染设备设置渲染状态至关重要。渲染状态中的剔除状态、灯光状态、填充状态、透明状态、全屏抗锯齿、反走样等相关参数的设置,可以为实现更加逼真的3D效果做贡献。

本系统中对渲染设备的资源释放机制具有独特之处。在3D显示过程和手动编辑的过程中,需要与模型进行交互操作,如鼠标拾取货物并移动、鼠标滚轮操作使模型缩放、观察角度的变换等。立体装箱三维可视化系统实时渲染过程的设计、初始化过程和绘图过程分成了两个函数,出于资源利用效率上的考虑,如上交互操作中的实时渲染,往往只需要调用绘图函数而不需要每次调用初始化函数。因此资源的释放的时间点不允许放在每次渲染结束之后,而应置于每次初始化开始之前。从流程图(图2)中也可以看出,在初次渲染的初始化过程开始之前,对其他渲染过程已使用过的设备device进行了资源的释放。经实践证明,这样的设计可以在保证3D系统顺利运行的前提下,有效地提高程序的载荷能力。

3.2 货物的拾取与移动

基于DirectX实现的虚拟三维场景,可以利用射线相交的思想来实现鼠标对三维场景内模型的拾取。考虑到立体装箱系统中的模型特点,可以采用射线与平面网格的碰撞检测来判断射线是否与模型相交,再通过选择相交后的最短线段来取得鼠标点选的模型。

构造一条拾取射线的基本思想是:将鼠标在屏幕上点选的位置坐标P转换为投影平面的坐标Q,再通过两次矩阵变换,将Q坐标转换成模型所在的三维世界内的坐标W;通过观察变换得到的观察矩阵,取得当前摄像机在模型所在的三维世界内的坐标C;从C点出发与W点连成一条射线,由此即得到所需要的拾取射线L。将鼠标点击的屏幕坐标转化成三维空间中的坐标代码如下:

Direct3D提供了一种射线与平面相交检测的方法,可以返回指定射线与平面相交的坐标点,通过遍历循环,将获得所有与射线L相交的平面及交点。摄像机坐标点与此交点连结可形成线段,找出最短长度的线段d,即可得到鼠标希望拾取的货物平面,拾取过程见图3。

图3 射线平面碰撞检测法拾取货物示意图

确定了选取的平面后,通过锁定模型索引号并用相应参数来传递即可锁定选取的货物模型。接下来要解决的问题是如何通过鼠标的移动来带动所选定的货物模型移动。如图4所示,当把所有的点都转化成三维空间中的世界坐标点后,涉及移动的有拾取射线上连续的3个点,即摄像头所在位置的世界坐标C、鼠标选取点的世界坐标W和被选货物模型所在位置的世界坐标A。其中鼠标选取点的世界坐标W为驱动整个移动过程发生的主动点,相当于自行车轮的主动轮。观察点C固定不动的情况下,当鼠标位置发生移动时,拾取射线即发生变化,要使观察者观察到物体随着鼠标的移动而同步移动,货物模型在三维空间中的世界坐标需要移动的距离与鼠标移动的距离的比例可以利用相似三角形原理求解。算出此距离后,即可给货物模型赋予新位置坐标,并再次调用实时渲染方法,观察者即可看到货物移动的结果,实时移动的流畅程度与鼠标移动事件触发的频率,即实时渲染的帧有关。

图4 移动距离计算原理示意图

3.3 AABB包围盒碰撞检测算法的运用

在立体装箱3D可视化系统中,涉及碰撞的所有模型均为立方体,因此可以利用包围盒碰撞检测法来实现货物模型之间的避免穿透功能。AABB算法就是针对这种规则立方体模型的一种包围盒算法。

针对每一个位于三维世界中的规范无旋转立方体模型,以世界坐标原点为起点,必有一个坐标值最小的点和坐标值最大的点。对于2个位于同一坐标系中的立方体A和B,其最小点和最大点分别用Amin、Amax和Bmin、Bmax来表示。在 XYZ坐标系中,令 Amin=(XAmin,YAmin,ZAmin),Amax=(XAmax,YAmax,ZAmax),通过这两个点即可唯一确定一个立方体A,以此类推。当立方体A和B有任何一面发生相交时,必定同时满足以下2个条件:Amax≥Bmin且Amin≤Bmax(在这里,Amax点大于 Bmin点表示Amax点的X、Y、Z三个坐标值均大于Bmin点)。图5中的2种情况共同验证了这一理论。

图5 AABB包围盒算法碰撞检测实例图

用AABB算法进行碰撞检测判断的C#语言代码如下:

此方法返回一个布尔类型的值,若为true则表示所拾取物体与其他物体发生了碰撞,反之则没有发生碰撞。第一个参数pointSelected为包含2个元素的数组,2个元素分别表示所拾取点的最小点和最大点坐标;第二个参数pointRest同样是包含2个元素的数组,分别表示遍历剩余货物模型时待检测模型的最小点和最大点坐标。

在立体装箱三维可视化系统中,可以采用AABB包围盒算法来识别货物与货物之间是否发生相交。在鼠标控制移动某一个货物时,将所选的货物定为A包围盒,循环遍历剩余的所有货物,依次作为B包围盒。在移动货物的实时渲染过程中,循环调用碰撞检测算法,一旦检测到被选货物与其余某一货物发生碰撞,即禁止该货物继续往前移动,这样即可较为逼真地模仿现实世界中物体不能相互渗透的现象,也实现了手动编辑操作的科学性。

3.4 立体装箱系统三维场景交互功能展示

图6展示了开发完成后的立体装箱系统3D可视化模块中的手动编辑选项卡。手动编辑模块可以集中体现三维场景的人机交互功能,在此模块中,用户不仅可以看到效果逼真的立体装箱方案展示,还可以对此进行手动编辑。手动编辑的操作包括鼠标、键盘以及编辑选项卡3种方式,涵盖了旋转镜头、镜头远近调节、选取货物、移动货物、拆分货物块、切换视图、切换容器等多个方面。同时,在手动编辑选项栏中选择“多容器交换”,将弹出多容器交换子模块,该模块可以实现货物在不同容器间的交换,本文不作详细的阐述。

图6 手动编辑界面效果图

4 结束语

3D可视化系统是立体装箱系统中不可或缺的重要组成部分,它将优化算法求得可读性差的装箱方案直观地展现出来,并提供全方位手动编辑。这不仅便于装箱方案设计者对方案进行评价和微调,而且可为装箱操作人员提供图文并茂的操作指导。其开发过程采用了Direct3D作为图形API,极大地提高了开发效率和呈现效果。本文对开发过程中用到的主要技术点进行了阐述,依次介绍了三维场景的实时渲染、模型的鼠标拾取和移动、模型间的碰撞检测机制的程序设计思路,并展示了开发成果中手动编辑功能模块呈现的效果图。

立体装箱系统的3D可视化辅助系统功能基本完善,但仍存在不足之处。3D程序的开发注重细节和效率,本系统在处理程序运行效率和显示效果之间的平衡关系方面仍需改进。此外,图形的精细程度仍然脱离不了计算机硬件的束缚,目前市面上的主流显卡基本支持DirectX 9的所有功能,但某些较陈旧的集成显卡在线条平滑处理上表现依然 不佳,能否通过软方法突破这一束缚,是开发者面临的一大课题。

[1]孙杰.基于Direct3D技术的仿真系统的应用[J].煤炭技术,2013,32(4):173-175.

[2]王其东,阳凤生.基于DirectX的汽车虚拟实验场的建立[J].计算机应用与软件,2007,24(5):110-112.

[3]郭艳霞,侯彤璞,杜园园.基于DirectX的三维场景实体的拾取[J].辽宁石油化工大学学报,2009,29(3):77-80,84.

[4]胡世东,赵翠莲,李成梁,等.面向虚拟训练的DirectX可视化仿真系统开发[J].计算机应用与软件,2012,29(9):129-132.

[5]耿肇英.Direct 3D和XNA游戏开发基础(C#语言版)[M].北京:清华大学出版社,2009.

[6]万鸣,方康玲.基于Direct3D的三维图形几何信息演示系统设计与实现[J].现代电子技术,2012,35(11):142-144,149.

[7]Cai Jianping,Liu Qian,Yu Xuejun.Research and realization of shadowgraph performance technology based on Di-rectX[C]//Proceedings of the 2011 International Conference on Graphic and Image Processing(ICGIP).2011.

[8]Andre LaMothe.Tricks of the 3D Game Programming Gurus:Advanced 3D Graphics and Rasterization[M].Sams,2003.

[9]Microsoft Developer Network.Getting Started with Direct3D[EB/OL].http://msdn.microsoft.com/en-us/library/windows/desktop/hh769064(v=vs.85).aspx,2013-07-12.

[10]徐磊,妙全兴,范柳青.3D游戏引擎的技术基础[J].科技信息,2011(29):528-529.

[11]张文火.基于DirectX集群并行渲染系统设计与实现[D].成都:电子科技大学,2011.

[12]张昕,童恒建,陈晓文,等.图像处理与分析软件开发环境选择[J].微计算机信息,2012,28(10):418-420.

[13]罗浩.基于DirectX的三维建模[D].长春:吉林大学,2012.

[14]朱玉君,黄媛媛,颜家康.基于DirectX的三维地形绘制及三维拾取方法的研究[J].科协论坛:下半月,2013(6):101-102.

[15]陈继良.基于DirectX 3D的立方体绘制方法研究[J].现代计算机:专业版,2013(12):28-34.

猜你喜欢

装箱手动鼠标
Progress in Neural NLP: Modeling, Learning, and Reasoning
电机装箱设计系统解决方案和应用
小巧手动起来
风行S5001.6L手动尊享型
宝骏5601.8L手动豪华型
C4世嘉 1.6L手动豪华型
三维货物装箱问题的研究进展
基于三维模型的可视化装箱系统
某集团装箱管理信息系统的分析与设计
45岁的鼠标