当前所在位置: 首页 > 计算机 > 正文

基于OpenGL的邦宝模型积木分析系统设计与实现(第3页)

本文共计6733个字,预计阅读时长23分钟。【 字体:

论文指导服务

毕业论文网专业团队提供毕业设计、论文写作指导及相关咨询服务

论文指导 毕业设计 答辩咨询
微信号已复制到剪贴板

  ③模型副本管理

  副本增删:按某个比例放大或缩小原始模型来添加其副本或删除模型副本及其相关数据。

  副本编辑:修改模型副本的相关数据,设置镂空壁厚、分层方式等参数并保存在Access数据库。

  ④模型副本分层

  部件选择:可以选择不同类型的部件,如小颗粒块(砖)等, 按所选部件的高度将模型等距地分为若干层并进行切片操作。

  最优分层:将各层分层后所得矢量多边形进行栅格化,并提供基础性的镂空及编辑功能(一般大型积木模型不会是实心的)。

  ⑤分层颗粒化

  颗粒化:将分层得到的平面多边形用不同颜色的小方块最佳覆盖,对模型的所有层进行颗粒化。

  镂空设定:用户可以调整镂空时的厚度参数。

  ⑥积木搭建

  底层排列:第一层是底层,在此层的部件排列方式与其它层不同。

  逐层排列:每层在它下层排列的基础上进行积木排列,准许用户调整镂空时的厚度参数,并提供上下层粘连性检验,但要保证搭建的模型牢固。

  ⑦查看三维图

  三维显示及编辑:查看部件和模型的三维图,能够用鼠标进行三维图的旋转、缩放和平移等交互操作,并提供对积木模型的编辑功能,如对某块积木的增删、着色、移动等。

  单层显示:查看整个模型每一层的三维图。

  双层显示:查看整个模型每两层叠加在一起的三维图。

  三层显示:查看整个模型每三层叠加在一起的三维图。

  所有层显示:查看整个模型所有层的三维图。

  ⑧数据导出

  积木统计:系统可以计算出模型中总共使用的部件种类及其数量,进而计算出其总重量及总价格。

  数据导出:系统可以导出3DS和bmp格式的文件。

  3.4 系统的核心算法简介

  3.4.1 3DS文件导入算法

  在数据读取之前,首先要建立存储点、面、材质、对象等信息的数据结构,以用来保存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 上下层粘连性检验算法

  一个合格的积木模型搭建方案必须确保这个积木模型不散架,在本系统中,通过上下层粘连性检验算法来达到这一效果。这个算法可分为两个方面,一是相邻层采用不同的优先顺序可以巧妙地使相邻层的积木尽量多的交叉相扣,增强上下层的粘连性;二是结合并查集算法,将每块积木视为图中的一个结点,为积木粘连问题建立图论模型。通过这两个方面的相互配合,不仅在一定程度上提高了运算速率,而且较好地保证了模型的粘连性。

阅读全文