
汕头大学工学院
管理的四大职能-雕刻机教程
2023年3月20日发(作者:芥川龙之介鼻子)0引言
随着当今时代计算机技术的突飞猛进,
三维图形技术在建筑虚
拟、场景漫游、
虚拟教育、
3D游戏等各方面的应用越来越广泛。同时
各种
3D模拟积木软件也得到迅猛的发展,目前国内外应用较多的
软件有
LegoDigitalDesigner、MLCad、LDView、LPub等,虽然这些都
是非常优秀的
3D模拟积木软件,但它们并没有一个软件能彻底解
决从三维模型导入、模型调整、切片分层、
颗粒化到输出积木搭建方
案的全自动化。OpenGL是一个功能强大的三维图形开发接口,由于它方便而
强大的三维图形的绘制功能,并具有可靠性高、
可扩展性、可伸缩
性、容易使用、灵活性和可移植性等优点,因此应用
OpenGL开发技
术能够极大地提高开发效率。尽管很多文献
[1-4]
介绍了利用OpenGL
技术对3DS模型数据进行读取、显示和控制的方法,但大多数只涉
及到基本的静态
3DS模型数据的使用,并没有对动态数据进行处
理。本文基于
OpenGL技术对邦宝模型积木分析系统进行了研究,
通
过这个系统,我们可以读取出
3DS模型文件并对其进行显示控制,
然后通过切片、颗粒化等一系列操作计算出在使用邦宝基本部件搭
建一个模型时所需要的部件种类、个数及每层的积木搭建排列,
进
一步计算出整个模型所用积木的总重量及总价格。
13DS文件格式简介
3DS是Autodesk公司存储3D模型数据的一种文件格式。
3DS文件结构由许多块组成,每个块由信息类别和下一个块的
相对位置两部分组成,
其中块的信息类别用
ID来标识。由于每个块
指出了下一个块的相对于该块起始位置的偏移字节数,
这样即使你
不明白这个块的含义,也可以很容易地忽略它。与许多文件格式一
样,
3DS二进制文件中的数据也是按低位在前、
高位在后的方式组织
的。例如,两个十六进制字节
0x4A5C组成的整型数,表明5C是高位
字节,
4A是低位字节
[5]
。3DS文件中块的前两项信息分别是块的ID和块的长度,其中块
的
ID是一个整型数,而块的长度是一个块相对于该块的字节偏移
量,是一个长整型数。
3DS文件中每个块是一个层次结构,不同类型
的块具有不同的层次结构。
每一个
3DS文件的开头都是由一个根块
构成,它包含了整个文件,
其
ID是0x4D4D。根块内的块称为主块,
主块有
3D编辑程序块和关键帧块两种类型。主块后面是该主块所
包括的子块,而
3D编辑程序块是物体的形体数据定义的开始。3D
编辑程序块的子块包括材质列表块、
物体块等,而物体块又包含了
基于OpenGL的邦宝模型积木分析系统设计与实现
张承钿赵静
汕头大学工学院广东汕头515063
摘要院由于传统单凭经验使用插座式积木搭建大型场景模型时会出现费时费力,无法提前统计成本等难题,所以急需开发出一个积
木智能搭建系统。邦宝模型积木分析系统正是应企业需求开发,涉及到智能选择不同形状的积木来完成每一层的铺设、
上下层交叉铺设、
模型不同位置不同染色、减少零碎颗粒等要求,
针对这种情况,提出了基于
OpenGL技术,设计出相应的算法。本文从工程应用的角度出发,
简要介绍了
3DS文件格式,系统用到的开发平台及OpenGL技术,整个系统的结构总框架及功能,基于扫描法的栅格化算法、单层积木铺设
算法及上下层粘连性检验算法。在此基础上实现了从
3D模型文件导入、模型调整、切片分层、颗粒化到输出积木搭建方案的全自动化。
关键词
院积木;3D模型;OpenGL
信息技术
据,判断是否满足条件,若满足,则是白天进行充电,
若不满足则监
测电池是否有电,若有则用太阳能电池供电,若无则用电源供电,若
出现故障则通过
GSM发送短信给手机,在手机上判断是否为故障或
电源供应不足,若为供应不足那就通过手机控制系统转为市电源供
电,如图
3.3.1所示。
图3.1系统框图图3.3.1主程序流程图
4测试方法
4.1整体结构图
如图
4.1为太阳能路灯整体效果图,包括路灯支架,
太阳能电池
板和控制盒组成。
4.2上电测试
4.2.1PWM脉宽调制测试。改变光照强度,
任意选定一个高于
充电稳定值的电压和一个低于充电稳定值的电压,
8V和30V,当太
阳能电池板电压较高,高于稳压充电的稳定值
12V,PWM调节的占
空比为低于
50%的对应值,相反当电压低于设置的参考值,PWM调
节占空比高于
50%的对应值。
4.2.2现场控制端与远程控制终端LCD显示部分。路灯正常工
作与路灯故障时,
LCD显示不同以及移动端收到故障信息。
4.2.3太阳能跟随器测试。如图4.2.3所示,当手电筒光源模拟
的太阳移动时,太阳能电池板光线跟随器工作,
在电机的驱动下太
阳能电池板自动追踪光源,
获得更多的太阳能。
图4.1图4.2.3
参考文献院[1]
周智敏,纪爱华.太阳能LED照明技术与工程应用[M].人民邮电出
版社,
2011.[2]
童诗白,
华成英
.模拟电子技术基础[M].高等教育出版社,2009.
[3]
盛群公司.HT-IDE3000使用手册(简体中文版).
[4]
盛群公司.Cost-EffectiveI/O型单片机使用手册第二版(简体中
文版
).
·264·
.htsReserved.
网格块、亮度信息块、相机参数块等。其中网格块包括位置信息块、
顶点列表块、面信息块等;关键帧块定义关键帧的信息。
3DS文件这
种复杂的块层次结构的优势在于即使我们并不知道每一个块的具
体含义,在程序中读取
3DS文件类型的模型时,
完全可以忽略掉那
些不感兴趣或不需要的块信息,
仅读取所需要的块。
2开发平台和技术
2.1使用C#编程语言
C#是一种完全建立在框架平台上的高级编程
语言,它几乎集中了所有关于软件开发和软件工程研究的最新成
果,如面向对象、
类型安全等。
C#充分利用了.NET框架的优点,
是
开发
.NET框架应用程序最好的语言之一。
与
VC++相比,C#的程序
调试更加容易,语法更加简洁,且可以更加快速地开发应用程序。
把
C#和OpenGL结合起来开发3D图形程序和软件,将显著提高
开发效率
[6]
。
2.2使用OpenGL技术
OpenGL的英文全称是
“
OpenGraphicsLibrary”,即“开放性图形
库”,它是计算机工业标准
3D应用程序接口,是一个功能强大,
调用
方便的底层
3D图形库。作为图形硬件的软件接口,OpenGL由几百
个指令或函数组成,这些指令允许用户说明二维几何对象或三维几
何对象,允许用户对对象实施操作以便把这些对象着色到帧存上。OpenGL作为一个性能优越的图形应用程序设计界面(API),适用于
广泛的计算机环境。
OpenGL是一套底层三维图形API,之所以称之
为底层
API,是因为它没有提供几何实体图元,不能直接用以描述场
景。但通过一些转换程序,可以很方便的将
AutoCAD、3DS等图形设
计软件制作的
3DS模型文件转换成OpenGL的顶点数据。由于OpenGL提供了清晰明了的图形函数,所以不要求开发者把三维物
体模型的数据写成固定的数据格式,
开发者不但可以直接使用自己
的数据,而且可以利用其它不同格式的数据源,
这种灵活性极大地
节省了开发时间,提高了开发效率。
因此我们选择使用
OpenGL技术
进行开发。
2.3在C#中使用Tao框架实现OpenGL建模技术
由于
OpenGL的广泛应用,它已经成为了一个工业标准。
目前虽然有很多软件开发商提供的程序设计语言都提供了对
开发基于
OpenGL应用软件的支持,
如
VisualC++,C++builder等。
但是并没有提供在
C#中开发OpenGL的标准和规范的方法,
而且,
在
.NET框架中也没有提供0penGLAPI的接口。目前在C#中可以
通过
CsGL等第三方软件进行OpenGL建模的技术,也可以基于Tao技术,
因为
TaoFramework提供了许多基于.NET和Mono的库,
它是由美国华盛顿大学分布式对象计算组织开发的开放源码的CORBA(通用对象请求代理体系结构)产品,它实现了C0RBA2.6规
范中的说明。因此,
我们利用
Tao框架实现在C#中进行OpenGL建
模的方法
[7]
。
2.4使用SharpGL扩展库
SharpGL是C#对OpenGL库的封装,是一个方便我们在
Windows窗体中和WPF中使用OpenGL的扩展库,它能够设置一个
强大的场景图和
VisualStudio模板。SharpGL扩展库包装了所有当
前的
OpenGL函数,所有主要的扩展和一套丰富的先进功能的对象,
并且能够将代码移植到其它的平台中,所以我们使用它很容易开发
出
3D图形程序。它的命名空间包括:淤SharpGL:包含OpenGL的主要对象,这个对象封装了所有的
OpenGL函数、枚举和扩展。
于raph:包含所有包装OpenGL的对象和场景中
的元素
-灯光、材料、纹理、
材质等。盂ms:为我们的应用程序包含Windows窗体控
件。榆:为我们的应用程序包含WPF控件。
虞ization:包含用于装载几何和来自于3DStudio
Max
文件的数据,不引人注意的obj文件和truespace文件的类。
3邦宝模型积木分析系统设计与实现
3.1系统概述
积木是公认能培养儿童创造力、
学习能力以及训练手眼协调的
最佳工具,积木中的排列,接合,环形,
对称等都对开发孩子的智力
有好处。积木的生产是个很有发展前景的项目,
但是由于组成实物
的小积木块,一般都由几百、几千甚至上万个小积木组成,
零件的数
据量庞大,目前大部分玩具厂商都是先通过先人手动地拼成我们需
要的积木实体形状,再统计所需的积木小零件的种类和总个数,
最
后交由工厂生产,显然这过程的任务很繁重,
拼装设计时稍微的改
动对整体的影响很大,效率也很低。如果积木的拼装和统计能用计
算机模拟,那将极大地节约人力、
物力和成本。因此,我们急需开发
出一个系统,能够用计算机来实现从三维模型导入、
模型调整、切片
分层、颗粒化到输出积木搭建方案的全自动化,
这样既能节约生产
成本和生产周期,又能提供实践指导。
本系统的目标就是建立一个
3D图形应用程序,用于计算在使
用邦宝基本部件搭建一个模型时所需要的部件种类、
个数及输出每
层的积木搭建排列方案,进一步计算出搭建这样的模型时的初步报
价。不同形状的积木可以由不同的颗粒状的积木块(积木砖)组成,
积木的拼装过程整体上可以看出是从下到上(或从上到下)。对于给
定实物模型的
3D外观数据,用计算机模拟分层切割过程,
计算出每
层的排列情况并显示,且满足以下条件:淤所用的积木块数量总数尽量少,即中心部分是骨架连接或镂
空的。于拼成后积木尽可能的牢固。
盂拼成后尽可能的逼近原始形状的物体。
3.2系统结构总框架设计
邦宝模型积木分析系统主要包括八大功能模块,即数据导入、
数据管理、模型副本管理、模型副本分层、
分层颗粒化、积木搭建、查
看三维图、数据导出,这些模块又是由若干个子模块构成的,
系统结
构总框架如下图所示:
图一系统结构总框架图
3.3系统的主要功能介绍
系统的主要功能如下:淤数据导入
基本部件:导入邦宝基本部件的
3DS文件。
三维模型:导入模型的
3DS文件。于数据管理
数据修改:修改部件及模型的基本数据并保存在数据库。
数据计算:计算部件及模型的长、
宽、高等数据并保存在
Access
数据库。
数据增删:添加或删除部件或模型的相关数据。盂模型副本管理
副本增删:按某个比例放大或缩小原始模型来添加其副本或删
除模型副本及其相关数据。
副本编辑:修改模型副本的相关数据,
设置镂空壁厚、分层方式
信息技术
·265·
.htsReserved.
等参数并保存在Access数据库。榆模型副本分层
部件选择:可以选择不同类型的部件,
如小颗粒块(砖)等,按
所选部件的高度将模型等距地分为若干层并进行切片操作。
最优分层:将各层分层后所得矢量多边形进行栅格化,
并提供
基础性的镂空及编辑功能(一般大型积木模型不会是实心的
)。虞分层颗粒化
颗粒化:将分层得到的平面多边形用不同颜色的小方块最佳覆
盖,对模型的所有层进行颗粒化。
镂空设定:用户可以调整镂空时的厚度参数。愚积木搭建
底层排列:第一层是底层,在此层的部件排列方式与其它层不
同。
逐层排列:每层在它下层排列的基础上进行积木排列,
准许用
户调整镂空时的厚度参数,并提供上下层粘连性检验,
但要保证搭
建的模型牢固。舆查看三维图
三维显示及编辑:查看部件和模型的三维图,
能够用鼠标进行
三维图的旋转、缩放和平移等交互操作,
并提供对积木模型的编辑
功能,如对某块积木的增删、着色、移动等。
单层显示:查看整个模型每一层的三维图。
双层显示:查看整个模型每两层叠加在一起的三维图。
三层显示:查看整个模型每三层叠加在一起的三维图。
所有层显示:查看整个模型所有层的三维图。余数据导出
积木统计:系统可以计算出模型中总共使用的部件种类及其数
量,进而计算出其总重量及总价格。
数据导出:系统可以导出
3DS和bmp格式的文件。
3.4系统的核心算法简介
3.4.13DS文件导入算法
在数据读取之前,首先要建立存储点、
面、材质、对象等信息的
数据结构,以用来保存
3DS模型数据。OpenGL读取3DS的算法思路
是:首先根据偏移量和长度找到一个块的
ID标识符,再根据这个来
判断它是什么块,遇到我们需要的块,
就进一步读取,如果不需要,
直接忽略这一块,读取下面的块,
最后循环遍历所有的块,即读出各
个数据块
[9]
。
读取出
3DS文件后,需要在OpenGL环境下将读出来并存在数
据结构中的
3DS文件信息绘制出来。在绘制场景时,
首先计算法向
量,它直接影响到光线从不同的角度入射到模型表面,
产生不同的
显示结果,如果法向量不确定,三维效果的图形是显示不出来的。再
通过模型的各种变换来实现法向量的计算,
本系统首先遍历对象的
面和顶点的所有信息,从而计算出这些信息的法向量,
并将法向量
添加到法向量列表中。然后根据存储在自定义的数据结构的信息,
这样
OpenGL就能将模型绘制出来。
3.4.2基于扫描法的栅格化算法
整个模型的颗粒化需要对模型副本所有分层得到的矢量多边
形进行栅格化。目前虽然已存在多种栅格化算法
[10]
,如常见的有内部
点扩散法、边界代数法、边界点跟踪算法、射线法、扫描法等,但每种
算法都有自己的缺陷。本系统采用了各方面性能比较平衡的扫描
法,虽然避免了上述的内部填充过程,
但模型的颗粒化模块在设计
的过程中还遇到了一些特殊问题。
因此本系统的算法设计在扫描法
的基础上,添加了横边表并制定了更加详细的规则,
使其能正确处
理各种特殊情况。
3.4.3单层积木铺设算法
根据现实中经验丰富的员工搭建的每一层积木大体上是十分
规律的,只是在局部上作出某些调整。因此在本系统提出这样一种
算法,这种算法可分三个部分,一是利用
“基本件”的特点,选取了
1伊1
、1伊2、1伊3、2伊2、2伊3和“L型拐”
这
6种积木为基本铺设颗粒,
采用
贪心加局部搜索的算法铺设;二是为了减少零碎颗粒,
就近调整“单
粒”;三是“并小为大”,将基本铺设颗粒拼合成大的积木。结果证明,
此算法可以很好地完成积木铺设问题。
3.4.4上下层粘连性检验算法
一个合格的积木模型搭建方案必须确保这个积木模型不散
架,在本系统中,通过上下层粘连性检验算法来达到这一效果。这个
算法可分为两个方面,一是相邻层采用不同的优先顺序可以巧妙地
使相邻层的积木尽量多的交叉相扣,
增强上下层的粘连性;二是结
合并查集算法,将每块积木视为图中的一个结点,
为积木粘连问题
建立图论模型。通过这两个方面的相互配合,
不仅在一定程度上提
高了运算速率,而且较好地保证了模型的粘连性。
4结束语
邦宝模型积木分析系统的成功使用,
能够用计算机实现从三维
模型导入、模型调整、切片分层、颗粒化到输出积木搭建方案的全自
动化。这不仅在一定程度上节约了大型模型的搭建时间和生产成
本,而且为员工提供了实践指导,有效地提高了工作效率。本文基于OpenGL技术对邦宝模型积木分析系统进行了研究,简要介绍了实
现这一系统所需的开发平台、技术及算法。由于时间和知识水平的
限制,本系统还存在着很多的不足之处,比如在整个积木模型的内
部镂空、积木模型的受力分析(如积木悬空部分、倒吊部分)等方面
还是比较不足的。对此,我们可以进一步研究,
将本系统的相关知识
运用到其他工程项目中。
参考文献
院[1]
施瑞奈尔(DaveShreiner)援OpenGL编程指南[M]援北京:机械工业出版
社,
2010.[2]
赖特()援OpenGL超级宝典[M]援北京:人民邮电出版
社,
2010援[3]DonaldHearn
,eBaker援计算机图形学(
第四版)
[M]援北
京:电子工业出版社,
2012援[4]
吕希奎,
周小平
援实战OpenGL三维可视化系统与源码精解[M]援北
京:电子工业出版社,
2009援[5]
刘芳,刘贤梅援3DS文件读取、绘制与控制方法的研究与应用[J]援计
算机工程与设计,
2009,30(19):4575-4578援[6]
高明向,
陈定方
援OpenGL建模技术在C#中的实现[J]援武汉理工大
学学报,
2005,27(1):65-68援[7]
门光福,
田芳
援基于Tao框架的C#中OpenGL建模技术的实现[J]援
新余高专学报,2006,11(6):73-74援[8]
殷素峰,高雪强,
杨胜强
援在OpenGL环境下开发3DS文件浏览器
[J]援工程图学学报,2005,26(6):22-25援
[9]
陈雪梅,谢清钟援浅析一种运用OpenGL导入显示3DS三维模型的
方法
[J]援吉林省教育学院学报,2012,28(299):86-87援[10]
周琛,陈振杰,
张帅
援基于边界代数法的矢量栅格化并行算法设计
与实现
[J]援计算机工程与科学,2013,35(4):37-41援
作者简介:
张承钿,
男,
1961.02.24,籍贯:德国,副教授,
研究方向:软件工程
及项目管理、云计算技术在科学计算中的应用、
流体力学计算。
赵静,
女,
1991.01.01,湖北崇阳人,汉族,硕士研究生,
研究方向:
软件工程。
信息技术
·266·
.htsReserved.