(信号与信息处理专业论文)三维异型纸盒cad软件的设计与实现.pdf_第1页
(信号与信息处理专业论文)三维异型纸盒cad软件的设计与实现.pdf_第2页
(信号与信息处理专业论文)三维异型纸盒cad软件的设计与实现.pdf_第3页
(信号与信息处理专业论文)三维异型纸盒cad软件的设计与实现.pdf_第4页
(信号与信息处理专业论文)三维异型纸盒cad软件的设计与实现.pdf_第5页
已阅读5页,还剩47页未读 继续免费阅读

(信号与信息处理专业论文)三维异型纸盒cad软件的设计与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 1 论文题目 三维异型纸盒 cad 软件的设计与实现三维异型纸盒 cad 软件的设计与实现 学科名称 信号与信息处理 答辩日期 作者姓名 谭红梅 签名 导师姓名 胡涛 教授 签名 摘 要 纸盒包装由于成本低 适于印刷 可回收等优点在现代包装中具有越来越重要的地位 将 cad 技术应用到纸盒包装 可以缩短包装设计周期 提高纸盒尺寸精度 促进包装工业的发展 纸盒 cad 就是发挥计算机的高速 精确 灵活等优点来快速完成纸盒的设计环节 本文定位于小型礼品包装纸盒系统 把个性化的异型纸盒 cad软件作为研究对象 以 visual c 作为开发平台 利用开发库 opengl 的图形处理技术来实现纸盒 cad 的系列功能 本课题利 用 opengl 的图形建模实现纸盒二维平面的参数化设计 利用纹理映射 光照 位图等实现表 面装潢设计 提出了基于堆栈技术实现纸盒折叠的方法 利用双缓存和几何变换实现纸盒折叠 过程的三维动画演示 利用投影变换和视口变换实现三维展示功能 采用面向对象化方法编程 对 opengl 的功能 纸盒特征 屏幕取图过程等进行分类抽象 封装了场景设置类 取景技术 类 纸盒类和打印类 三维异型纸盒 cad 软件系统功能全面 提供纸盒的参数化结构设计 可以输出纸盒的平面 展开图 纹理映射图 三维立体图 可通过设置背景色 灯光 平面模型或线框模型来展示纸 盒的最佳状态 可全方位的观察纸盒结构 尤其可以观察纸盒折叠过程的三维动画 另外 由 于采用面向对象化方法编程易于扩充代码 增加软件功能 其中场景设置类 取景技术类和打 印类可以代码复用 关键词 关键词 纸盒 cad opengl 堆栈技术 面向对象化方法 abstract 2 design and realize of 3d special carton cad software specialty signal and information processing supervisor s name student s name tanhongmei date 2006 3 abstract carton package become more and more important in the modern package industry for its low cost fit printing and recycle applying cad technology to carton package will promote the efficiency improve the quality of package carton design and accelerate the development of package industry the article focuses on the mini present package carton system study the 3d special carton cad software on the platform of visual c and make use of opengl s graphics processing technology to realize the software s performance in detail the article utilizes graphics modeling to design 2d carton parameterized structure realizes outer upholstery design via texture map bitmap operation and lighting puts forward a method of auto folding carton based on stacks and realizes the 2d to 3d cartoon by double buffer shows 3d carton from different viewing by the projective and view port transformation the software is coded by oop and wraps the four classes of scene setting camera carton and printing by sorting and abstracting the performance of opengl carton fixtures screen snatching process the 3d special carton cad software is performed perfectly from 2d to 3d can export the plane unfolding carton texture map carton and solid folding carton can show carton optimally by choosing the viewing background color lighting plane or linear model and show the auto folding cartoon especially besides the successor can add codes to improve software easily because of the merit of oop there are four classes such as scene setting camera carton and printing to be reused key words carton cad opengl stack technology oop 目录 1 目 录 目 录 1 前言 1 1 1 包装纸盒 cad 的发展 1 1 2 课题的提出 2 1 3 课题的研究内容 2 2 三维异型纸盒 cad 软件的二维设计 5 2 1 纸盒的分类 5 2 2 参数化设计 6 2 3 纸盒的绘制 8 3 三维异型纸盒 cad 软件的表面装潢设计 11 3 1 光照技术 11 3 2 纹理映射 12 3 2 1 纹理定义函数 13 3 2 2 纹理控制函数 13 3 2 3 纹理映射方式 13 3 2 4 纹理坐标 13 3 3 纹理对象 14 4 三维异型纸盒 cad 软件的三维展示功能 15 4 1 2d to 3d 的功能 15 4 1 1 堆栈技术 15 4 1 2 双缓存技术 16 4 1 3 纸盒折叠过程的动画实现 16 4 2 三维展示的增强功能 19 4 2 1 取景技术 19 4 2 2 典型的观察视图 21 4 2 3 缩放视图 22 4 2 4 平移视图 22 5 三维异型纸盒 cad 软件的输出功能 25 5 1 基本概念 25 5 1 1 设备相关位图 ddb 和设备无关位图 dib 25 5 1 2 显示分辨率和打印分辨率 25 西安理工大学硕士学位论文 2 5 1 3 设备环境和映射模式 25 5 2 输出功能 26 5 2 1 mfc 的框架打印 26 5 2 2 屏幕取图 26 5 2 3 opengl windows 的打印 27 5 2 4 图形保存 30 6 三维异型纸盒 cad 软件的功能实现 31 6 1 opengl 绘图环境的建立 31 6 2 面向对象化编程技术 32 6 3 三维异型纸盒 cad 软件的界面及功能 34 7 总结 37 7 1 结论 37 7 2 展望 37 致谢 39 参考文献 41 附录一 管式异型纸盒的部分效果图 43 附录二 盘式异型纸盒的部分效果图 44 附录三 非管非盘式异型纸盒的部分效果图 45 在校发表论文 47 前言 1 1 前言 1 前言 cad 技术 1 是利用计算机强有力的计算功能和高效率的图形处理能力 辅助进行产品 的设计与分析的理论和方法 是综合了计算机科学工程设计 计算机专业理论 计算方法 计算机软件及图形学等多方面的综合性技术 cad 技术改变了工程设计人员的工作方式 2 缩短了产品研制周期 显著改善了产品质量 提高了新产品的开发成功率 打破了传统上 的职业界限 为社会创造出巨大财富 cad 技术在包装工业主要应用有包装企业的生产管 理 cad 包装结构 cad 包装造型 cad 装潢设计 cad 包装机械 cad 缓冲包装 cad 等 涉及包装行业的方方面面 随着现代工业的发展 产品种类越来越多 随之包装的种类和数量也在日益增多 在 各类包装中 纸盒包装 3 具有加工成本低 储运方便 适用于各种印刷方式 便于销售 和成列 适于自动包装 回收利用性好 有利于环境保护等优点 因而纸盒包装的应用越 来越广泛 产品的附加值一定程度也取决于纸盒包装的结构造型 装潢造型等 精美的外 形包装可以提升产品的高贵度等 随着人们生活水平的提高 对纸盒包装工业提出了新的 要求 传统的纸盒设计过程已经不能满足包装工业的要求 把现代 cad 技术应用于包装工 业 4 5 可以适应现代工业发展 缩短产品包装周期 提高纸盒的尺寸精度和产品的市场 竞争力 满足自动化包装及出口商品包装对纸盒的要求 包装纸盒 cad 是将计算机技术与 包装设计结合起来 发挥计算机的高速 精确 灵活等优点来快速完成纸盒的设计环节 把 cad 技术和包装纸盒充分结合起来具有良好的应用前景 1 1 包装纸盒 cad 的发展 1 1 包装纸盒 cad 的发展 包装纸盒 cad 的研究始于 20 世纪 70 年代 美国的 atlassteelruledie 公司和德国的 elcede dossmann 公司等率先进行 包装纸盒 cad 系统 的研究 80 年代瑞士 erpa 公司 推出了可以输出纸盒立体图的纸盒 cad 系统 日本的三菱公司研究开发了瓦楞纸板 cad 系统 5 和发达国家比 我国计算机技术在包装行业中的开发应用起步较晚 差距较大 但也在不断向前发展 并取得了一定的成果 国内的有关包装纸盒 cad 的研究最早的为 1998 年北大方正的方正包装 3 0 天津轻工业学院开发了 tuli skhtuli skh 折叠纸盒结构设计软 件 另外北京大学计算机科学技术研究所文字信息处理技术国家重点实验室研制开发了 packcad 最近几年 国外包装纸盒工业飞速发展 2000 年 5 月在 drupa2000 国际印刷及媒体 展览会上 德国的 marbach 公司 elcede 等公司展示了开发的纸盒 cad 系统 系统采用 人机对话操作方式 可用键盘 鼠标在屏幕上任意设计纸盒盒片结构 排料方案 印刷图 案等 可调用盒片图形库 选择盒型结构 输入盒体尺寸 长 宽 高 和纸板厚度后 可打印纸盒平面展开图 输出模切排料图 印刷轮廓图及背衬加工图 除选择标准盒型外 还可任意设计特殊盒型 旋转纸盒立体图 部分国内大企业引进国外昂贵技术 但是大部 分中小企业仍然使用 freehand coreldraw autocad 等图形软件进行纸盒结构设计 致 西安理工大学硕士学位论文 2 力于研究开发包装方面的 cadcad 软件 可以提高我国包装设计的技术水平 促进包装工业 的发展 1 2 课题的提出 1 2 课题的提出 纸盒 cad 的研究发展到今天 已出现了许多的纸盒 cad 系统 虽然包装纸盒 cad 有很大的发展 但是纸盒 cad 系统的设计领域还存在以下的不足 6 1 标准不统一 目前的包装行业没有统一的纸盒标准 也没有严格的纸盒设计方法 大多数凭经验类比法设计纸盒盒片的结构参数 这样严重影响了纸盒工业的发展 2 功能单一 从某种意义上说 纸盒结构 cad 软件只解决了产品设计过程中手工绘 图问题 可以说只是用计算机代替了设计人员原用的制图版 鼠标代替了画笔 纸盒结构 的质量在很大程度上还是依赖于设计人员的水平 并不能面向大众 3 价格昂贵 市场上现有的纸盒结构 cad 软件价格比较高 超出了很多中小企业的 承受能力 且现有的纸盒 cad 系统都是针对包装工业用纸盒 对于纸盒 cad 其它的应 用涉及较少 4 灵活性差 国内外已有的折叠纸盒 cad 系统大多借鉴已有的通用型 cad 系统的设 计经验 没有考虑折叠纸盒结构设计的特殊性 未注意纸盒的模切线与压痕线的区别 开 槽 断线及让刀等问题 一般纸盒 cad 系统只提供规则纸盒的设计 缺少一些结构异常 或是复杂的纸盒设计 大多数的 cad 系统还仅限于二维功能 三维的功能研究远不及二 维方面 本课题定位于小型礼品包装 将个性化包装纸盒 cad 系统作为研究对象 对异型纸 盒进行有效的归类 期望基于 opengl 强大的图形处理能力和 visual c 的 mfc 编程 开发出一套投资少而功能较全 能广泛应用于小型礼品包装的三维异型包装纸盒 cad 软 件系统 1 3 课题的研究内容 1 3 课题的研究内容 本课题考察现有的包装纸盒 cad 系统 结合礼品包装的特点设计三维异型纸盒 cad 软件 主要目的就是把现代 cad 技术应用在包装纸盒上 完成并加速包装纸盒的设计过程 三维异型纸盒 cad 软件可以让设计者或是用户方便地参数化设计纸盒结构 直观地观察纸 盒外形 对纸盒的表面进行个性化的装潢 最后输出纸盒的二维纹理展开图 经手工制 作得到成型纸盒 本课题涉及的知识 7 8 主要包括现代 cad 技术 计算机图形学 包装设计 结构设 计和装潢设计 和软件工程知识 课题的主要内容分为以下几方面 1 参数化设计 9 包装纸盒的参数包括盒型几何元素的约束关系参数和纸盒成型的工 艺参数 几何参数描述纸盒的整体尺寸 如长 宽 高等 工艺参数描述纸盒中各盒片零 件之间的连接关系 如纸板厚度 让刀位 压痕线等 参数化设计使设计最大程度地优化 和规范化 是新一代 cad 技术的重要标志 前言 3 2 盒型结构设计 各种盒型分为如 管式纸盒 盘式纸盒 管盘式纸盒 管式异型纸盒 盘式异型纸盒 非管非盘异型式纸盒等 管式纸盒的设计主要是纸盒摇翼的结构 盘式纸 盒的设计主要是在角隅处的设计 异型纸盒的设计方法有改变折线 改变体面关系 利用 纸张特性产生弧面 局部位置变化 开窗式 手提式和拟态象形等等 本文设计的软件所 包含的纸盒库分管式异型盒 盘式异型盒和非管非盘式纸盒 3 表面装潢设计 利用 opengl 的纹理映射功能对盒面进行简单地装潢设计 如在盒 面的指定位置 区域贴一幅图 对于复杂的装横设计 软件可把工作窗口中的盒形图以位 图格式存入磁盘 这样便可以在一些功能强大的桌面系统中进行处理 如 photshop freehand 进行印刷 4 2d to 3d 功能 利用 opengl 的堆栈技术 双缓存技术和图形的几何变换完成纸盒 由平面展开图自动折叠成三维立体图的三维动画显示 5 三维展示的增强功能 利用 opengl 的取景技术和视图变换等功能全方位的实现纸 盒立体图的各种典型视图如左视图 俯视图 缩放视图 平移视图等的展示 6 盒型输出功能 输出功能是图形软件的基本功能 输出功能就是指在纸盒设计完后 软件可以抓取屏幕客户区的图形进行保存并打印 制作纸盒 西安理工大学硕士学位论文 4 三维异型纸盒 cad 软件的二维设计 5 纸盒的分类 按纸盒的成型方法分 按纸盒结构是否异型 折叠纸盒 粘贴纸盒 规则纸盒 异型纸盒 管式盒 盘式盒 管盘式盒 图 2 1 纸盒的分类 fig2 1 carton sorting 管式盒 盘式盒 管盘式盒 管式盒 盘式盒 管盘式盒 管式异型盘式异型 非管非 盘式异型 2 三维异型纸盒 cad 软件的二维设计 2 三维异型纸盒 cad 软件的二维设计 三维异型纸盒 cad 软件的二维设计功能主要完成盒型的分类 设置几何参数和相关工 艺参数 绘制盒型结构 输出纸盒的平面展开图 2 1 纸盒的分类 2 1 纸盒的分类 本 cad 系统参阅了大量的包装纸盒的设计资料及书籍 参考文献 7 对目前包装行业 的已有的纸盒进行了盒型的结构分析 文献 8 介绍了包装纸盒的结构设计方法 本文 归纳总结文献中的纸盒分类 对包装纸盒进行进一步的分类 使之包括尽可能多的纸盒类 型 纸盒可以从纸盒的成型方法或是从纸盒的结构是否异型去进行下一步的分类 具体如 图 2 1 所示 由图 2 1 可以得知 纸盒最后都可以称为管式盒 盘式盒 管盘式或是非管非盘式盒 管式盒定义为由一页纸板折叠构成 其边缝接头通过粘合或钉合 而盒盖和盒底是通过摇 翼组装来固定和封口的纸盒 其结构设计主要是设计摇翼 盒身部分不会发生太大的变化 盘式盒定义为由一页纸板成型 且周边主侧板以直角或是斜角折叠 或在角隅处进行粘合 或锁合而成的一类纸盒 管盘式盒指兼具管式盒和盘式盒特点的一类纸盒 用管式盒的旋 转成型方法来构成盘式盒的部分盒体 传统意义上的异型盒 9 11 是在规则纸盒的基础上 利用一些特殊方法使得纸盒的结构发生变化 如改变折线 改变体面关系 利用纸张特性 产生弧面 局部位置变化 开窗式 手提式和拟态象形等 对异型盒进行分类 如 从异 型盒的形状看可分为矩形异形纸盒 平行四边形异形纸盒 椭圆柱形异形纸盒 三棱锥形 异型纸盒 三棱柱形异型纸盒 椭圆柱形异型纸盒 梯形异型纸盒 屋顶形异型纸盒等 从其盒体 盒盖 盒底的结构来看 可分为插入式异型纸盒 插卡式异型纸盒 锁口式异 型纸盒 插锁式异形纸盒 粘合防盗式异形纸盒 锁底式异型纸盒 自锁底式异形纸盒 提手式异形纸盒 防震式异形纸盒 展示异形纸盒等 本文以个性化的纸盒 cad 为研究对 象 因此主要关注异型纸盒 本文总结以上的纸盒异型方法 对各异型纸盒进行有效的分 类 异型纸盒的分类以及三维异型纸盒 cad 提供的纸盒库如图 2 2 所示 西安理工大学硕士学位论文 6 图 2 2 异型纸盒的分类 fig2 2 special carton sorting 2 22 2 参数化设计 参数化设计 纸盒的参数设计包括几何尺寸参数和工艺参数 纸盒的几何尺寸设计是纸盒结构设计 中极重要的一个环节 它不仅直接影响到纸盒产品的外观及其内在质量 而且关系到生产 及流通成本 纸盒的几何尺寸 12 15 包括外尺寸 内尺寸和制造尺寸等 此外 纸盒的 一些工艺参数如纸盒厚度 压痕线 让刀位等 会影响到纸盒的结构 下面逐个介绍这些 参数及其设计方法 1 几何尺寸 纸盒的几何尺寸包括外尺寸 内尺寸和制造尺寸 外尺寸一般指纸盒 成型后的外围的长宽高 内尺寸一般指纸盒成型后的容积长宽高 外尺寸一般是内尺寸加 上纸板厚度 制造尺寸指根据纸盒内尺寸换算得到的生产工艺尺寸 应该考虑压痕线 纸 盒的几何尺寸设计先根据内装物最大外型尺寸 由内向外逐级计算纸盒的内尺寸 制造尺 寸与外尺寸 2 纸盒厚度 纸盒厚度实际上指纸板的厚度 它影响纸盒的几何尺寸间的换算 在 设计盒盖盒底的时候 纸板厚度还影响让刀位 本文设计的纸盒 cad 软件允许用户交互地 设定纸盒厚度 3 压痕线 包装纸盒是由纸盒盒片经过折叠粘结而成的 盒片则是经过模切压痕而 形成的 在模切过程中 由于压痕刀的作用 使得纸板产生垂直于压痕刀方向的收缩 因 此压痕线的宽度是盒片的一个重要的工艺参数 在盒片图上必须保留出压痕线的宽度 在 设计纸盒 cad 软件时 应能为用户自动留出压痕线宽度 压痕线的宽度一般设计成纸板厚 度的一半 4 让刀位 让刀指由于纸盒结构的要求 某条压痕线应向某个方向移动一段距离 通常以纸板厚度为一个单位 比如 纸盒成型后盒盖要包住摇翼 因此盒盖与盒身之间的 压痕线应向外让出一倍盒片厚度的距离 异型纸盒的分类 管式异型纸盒 六棱柱型纸盒 平行四边形纸盒 曲线造型纸盒 三棱柱形纸盒 双间隔纸盒 双式笔筒 提手开窗纸盒 盘式异型纸盒 带盖及防尘舌纸盒 带钩 丝带 纸盒 带护栏纸盒 书架式纸盒 楔形纸盒 坐式盘式 1 坐式盘式 2 非管非盘式异型纸盒 cd 单套 扁平物包装纸盒 侧面造型纸盒 衬衫礼盒 风车外型纸盒 手提纸袋 填充物可变纸袋 三维异型纸盒 cad 软件的二维设计 7 b 盘式异型盒的参数设计 b special tray carton parameter design c 非管非盘式异型盒的参数设计 c special tube 绘制多边形开始 glvertex3d x y z 定义多边形的顶点 1 glvertex3d x b y z 定义多边形的顶点 2 glvertex3d x b y z 定义多边形的顶点 3 glvertex3d x y z 定义多边形的顶点 4 定义多边形的其它顶点 y x z 图 2 4 世界坐标系 fig2 4 word coordinate eye 三维异型纸盒 cad 软件的二维设计 9 glend 绘制多边形结束 其中 由于本软件绘制的是纸盒平面展开图 因此定义顶点时所有 z 值取 0 完整的纸盒 可以由有限个相同或不同的几何图元集合描述而成 西安理工大学硕士学位论文 10 三维异型纸盒 cad 软件的表面装潢设计 11 3 三维异型纸盒 cad 软件的表面装潢设计 3 三维异型纸盒 cad 软件的表面装潢设计 三维异型纸盒 cad 软件在完成结构设计后 若对纸盒的各面片进行装潢设计 可以美 化纸盒的外形结构 提高纸盒的包装价值 本文设计的表面装潢设计功能依赖于 opengl 的位图图像处理功能和纹理映射 位图调用函数 auxdibimageload 载入位图的数据并 返回其指针 纹理映射是把位图映射到面片上 是增强三维真实感图形效果的重要工具 3 1 光照技术 3 1 光照技术 在进行纹理映射之前 有必要先加上光照处理技术 opengl 的光照和与纹理一样 也是增强三维立体效果和色彩效果的手段 通过光照可以增强图形的亮度和三维效果 纹 理则使图形更加趋近现实 opengl 的光照技术实际上是对现实光源的模拟 光源包括定 位光源和定向光源两种 opengl 对其进行抽象建模 建立了简单的光照模型 18 opengl 的光照模型只考虑被照明物体表面的反射光影响 假定物体表面光滑不透明 且由理想材料构成 环境假设为由白光照明 一般来说 反射光可以分成三个分量 即环 境反射 漫反射和镜面反射 环境反射分量光常统称为环境光 ambient light 漫反射 分量光常称为漫射光 diffuse light 镜面反射分量常通称为镜面反射光 specular light 光源的创建就是设定光源的相关特性 如颜色 位置 方向等 定义光源特性函数 19 如下 void gllight if v glenum light glenum pname type param opengl 中总共可以定义 8 个光源 其中第一个参数 light 指定所创建的光源号 如 gl light0 gl light1 gl light7 第二个参数 pname 指定光源特性种类 表 3 1 给出了本软件用到的光源特性 参数 param 设置相应的光源特性值 表 3 1 光源特性的种类及相关参数设置 tab3 1 type of light properties and parameter setting 类型 意义 相关说明 gl ambient gl diffuse gl specular gl position rgba 模式下环境光 rgba 模式下漫反射光 rgba 模式下镜面光 光源位置 采用 r g b 设置 rgb 值 采用 r g b 设置 rgb 值 采用 r g b 设置 rgb 值 采用 x y z w 设置 xyzw 值 其中参数 r g b 设置光的 r g b 颜色分量的值 是透明值 四个分量的取 值范围均为 0 1 参数 x y z w 决定光源的位置和种类 第四个分量 w 为零的 时候 所定义的就是定向光源 非零时就是定位光源 相当于一个聚光灯 其光照范围是 一个圆锥形区域当中 在 opengl 中设置好光源后必须指定光源是否有效 要使光照有效 首先启动 20 光照 即 glenable gl lighting 若使光照无效 则调用 gdisable gl lighting 可关闭 西安理工大学硕士学位论文 12 图 3 1 光源参数的设置及效果 fig3 1 lighting properties setup and effection 当前光照 opengl 可供设置的灯源有 8 个 可以启动或是关闭其中任何一个 本文结合 三维异型纸盒 cad 软件的实际需要 设置了两个灯 并对灯的开关状态和灯的位置可以进 行相应的设置 图 3 1 展示灯源参数设置以及加强光照使得纹理鲜亮的效果 3 2 纹理映射3 2 纹理映射 opengl 中提供了一系列的纹理操作函数 可以将纹理映射到一组多边形的表面 纹 理映射是个复杂的过程 包括纹理定义 纹理控制 映射方式和纹理坐标四个步骤 操作 如图 3 2 示 纹理控制 映射方式 纹理坐标 gltexparameter 说明纹理的滤波方法以及滤波方式 gltexenv 设置纹理映射时候的映射方式 gltexcoord 设置纹理坐标 决定映射到的几何坐标 图 3 2 纹理映射的步骤及相关函数 fig3 2 texture mapping process and related functions glubuildmipmaps 获取位图的长宽及信息数据定义纹理 纹理定义 三维异型纸盒 cad 软件的表面装潢设计 13 3 2 1 纹理定义函数 3 2 1 纹理定义函数 void glubuildmipmaps glenum target glint level glsizei width glsizei height glenum format glenum type const glvoid pixels 该函数定义一个二维纹理映射 其中参数 target 是常数 gl texture 2d 参数 level 表示多级分辨率的纹理图像的级数 若只有一种分辨率 则 level 设为 0 参数 width 和 height 给出了纹理图像的长度和宽度 参数 format 和 type 描述了纹理映射的格式和数据 类型 参数 pixels 包含了纹理图像数据 这个数据描述了纹理图像本身和它的边界 3 2 2 纹理控制函数 3 2 2 纹理控制函数 void gltexparameter if v glenum target glenum pname type param 该函数控制纹理纹素映射到顶点坐标时的滤波方式 一般来说 纹理图像为正方形或 长方形 但当它映射到一个多边形或曲面上并变换到屏幕坐标时 纹理的单个纹素很少对 应于屏幕图像上的象素 根据所用变换和所用纹理映射 屏幕上单个象素可以对应于一个 纹素的小部分 即放大 或大批纹素 即缩小 该函数的参数 target 是常数 gl texture 2d 或是 gl texture 1d pname 通常是 texture min filter 或 texture mag filter 分别表示放大或是缩小纹素 param 说明纹理滤波方式 本系 统设置为 gl linear 即线性滤波 3 2 3 纹理映射方式 3 2 3 纹理映射方式 void gltexenv if v glenum target glenum pname type param 该函数设置纹理映射方式 参数 target 必须是 gl texture env 参数 pname 是 gl texture env mode 参数 param 可以是 gl decal gl modulate 或 gl blend 以说明纹理值是怎样与纹理映射之前的表面颜色的处理方式 opengl 支 持三种纹理映射方式 即贴花方式 gl decal 调制方式 gl modulate 和颜色混 合方式 gl blend 贴花方式的象素颜色值完全由纹理图案决定 就像将纹理图案贴于 物体表面一样 调制方式的象素颜色值由纹理图案对不考虑纹理映射时象素颜色进行调制 处理得到 光照条件下的纹理处理必须采用这种方式 颜色混合方式的象素颜色值是根据 纹理的值 将象素的颜色值与给定颜色进行混合操作得到最终颜色值 本文采用调制方式 来进行纹理映射 3 2 4 纹理坐标 3 2 4 纹理坐标 void gltexcoord 1234 sifd v type coords 在绘制纹理映射场景时 不仅要给每个顶点定义几何坐标 而且也要定义纹理坐标 经过多种变换后 几何坐标决定顶点在屏幕上绘制的位置 而纹理坐标决定纹理图像中的 哪一个纹素赋予该顶点 设置当前纹理坐标 此后调用 glvertex 所产生的顶点都赋予当 前的纹理坐标 纹理坐标通常可定义成一 二 三或四维形式 称为 s t r 和 q 坐标 西安理工大学硕士学位论文 14 以区别于物体坐标 x y z w 和其它坐标 二维纹理常用 s t 坐标表示 用 gltexcoord2 可以设置 s 和 t 坐标值 s 和 t 的取值在 0 1 区间上 3 3 纹理对象 3 3 纹理对象 一般纸盒含多个面片 要能真实的进行纸盒的表面装潢 就需要使用多重纹理 当使 用多重纹理的时候就涉及纹理对象 21 的概念 纹理对象用于存储事先加载的纹理数据 可以绑定 重用纹理对象 提高纹理映射的速度 使用纹理对象采取如下步骤 生成纹理对象名称 glgentextures glsizei n gluint texturenames 通过数组 texturenames 返回 n 个未用的纹理对象名 返回的名称不必是相邻的整数 将纹理对象绑定到纹理数据 包括图形数据数组和纹理属性 即创建纹理对象 使用 glbindtexture 绑定一个纹理对象名 将创建一个新的纹理对象 解除绑定后 纹理对象的数据仍存储在纹理资源中 可通过删除对象来释放纹理资源 gldeletetexture glsizei n const gluint texturenames 删除 n 个纹理对象 这 些纹理对象的名称存储在数组 texturename 中 本文设计的三维异型纸盒 cad 软件 为了个性化地展示纸盒的精美外形 采用多重纹 理 利用纹理对象和纹理映射技术实现纸盒的表面装潢设计 22 26 软件提供交互式的 选择纹理贴图 图 3 3 中的 a 图是选择纹理贴图的对话框 b 图是纹理映射的一个 实例 其中 纸盒盒片总数 表示对象纸盒需要装潢的盒片数量 当选择了一个盒型时 就会 有相应的需要装潢的盒片数 纹理数 在程序运行过程中记录导入的纹理数 按钮 取 消图片 可以清除已导入的图片 重新选择所需图片 a b 图 3 3 纹理贴图的对话框和实例 fig3 3 dialog box of texture picture and example 三维异型纸盒 cad 软件的三维展示功能 15 4 三维异型纸盒 cad 软件的三维展示功能 4 三维异型纸盒 cad 软件的三维展示功能 由于纸盒种类繁多 结构复杂 且每一类纸盒的成型方法 结构造型都有各自特点 尤其是异型盒 造型各异结构独特 再则 计算机显示真实感三维图形的复杂性和难度 三维异型纸盒 cad 的三维展示模块 27 31 一直是纸盒 cad 领域研究的热点和难点 本 文设计的三维展示功能包括纸盒的折叠过程动画显示和全方位的展示功能 4 1 2d to 3d 的功能 4 1 2d to 3d 的功能 由于异型纸盒结构的复杂性或是异常性 从纸盒的平面展开图很难想象出纸盒如何成 型以及成型后的外形 模拟纸盒的折叠过程有助于直观地展示纸盒的立体结构 帮助用户 理解纸盒的盒型结构 本文综合考虑 opengl 的堆栈技术 双缓存技术和纸盒的折叠继承 性特征三方面 提出了基于 opengl 矩阵堆栈技术和双缓存技术来实现纸盒的自动折叠方 法 4 1 1 堆栈技术4 1 1 堆栈技术 堆栈 在计算机领域是使用频率很高的名词 堆栈是一个顶部打开底部封闭的柱状 物体 存放东西时依次从顶部存入 然后也只能依次从顶部取出 即 先进后出 后进先 出 opengl 为了可以方便地实现各种图形变换的连续存储以及变换 反变换的排序问 题 引进了堆栈技术 图形变换是以矩阵的形式进行运算的 矩阵堆栈是内存中专门用来存放矩阵数据的特 殊区域 一般来说 矩阵堆栈常用于构造具有继承性的模型 即由一些简单目标构成的复 杂模型 包装纸盒的折叠 32 33 正好有这一特征 例如管式折叠纸盒由盒体 盒底和盒盖 摇翼构成 它的继承性表现在当盒体四个面旋转成柱时 相应盒体摇翼也跟着旋转 而后 盒底盒盖摇翼旋转或插舌或锁底等完成折叠过程 矩阵堆栈 34 的操作主要是入栈操作和 出栈操作 其操作原则和普通的堆栈操作一样遵循 先进后出 后进先出 opengl 用于矩 阵堆栈操作的函数命令包括以下两个 void glpushmatrix void 进栈操作函数 void glpopmatrix void 出栈操作函数 进栈函数将当前矩阵压入栈底 并复制一个当前矩阵供接下来的各种变换使用 同时 经变 换后产生的当前矩阵被压入栈顶 该函数主要用于保存当前矩阵 以便后期需要时再将其 弹出 出栈函数将当前操作矩阵弹出矩阵堆栈 这样可使堆栈中的矩阵回到被压入前的状 态 灵活地使用上述两个函数 可以方便的确定几何对象的位置 实现同一个对象或不同 对象的相同或不同的变换操作 在使用堆栈操作函数时 重点是进栈和出栈顺序问题 堆栈操作是为实现图形变换而服务的 本文要实现纸盒的自动折叠需要用到一系列的 几何变换 opengl 的几何变换操作函数有平移函数 旋转函数和缩放函数 函数原型分 别如下 西安理工大学硕士学位论文 16 void gltranslate fd type x type y type z 平移函数 void glrotate fd type angle type x type y type z 旋转函数 void glscale fd type x type y type z 缩放函数 平移函数中 x y z 分别表示三个轴方向的偏移量 旋转函数中 angle 表示目标沿从点 x y z 到原点的方向逆时针旋转的角度 x y z 表示旋转的方向点坐标 缩放函数中 x y z 分别表示沿三个轴方向缩放的比例因子 4 1 2 双缓存技术 4 1 2 双缓存技术 opengl 支持双缓存技术 使用双缓存技术可以实现平滑的图形动画效果 在双缓存 模式下 帧被分为两个视频缓存 前台视频缓存和后台视频缓存 绘制函数所绘制的内容 首先被送往后台视频缓存 当绘制函数调用结束后 并绘制了后台视频缓存的内容时 且 前台视频缓存的内容已被显示 opengl 便将后台视频缓存拷贝到前台视频缓存 由于这 个视频交换的时间很短 肉眼感觉不出来 可以实现平滑的图形动画效果 采用 opengl 的双缓存模式实现动画 要进行以下四步的设置 20 1 在象素格式定义时予以设置 即给属性标志变量增加 pfd double duffer 属性 2 为软件设置闹钟 如 settimer 0 50 null 序号为 0 每隔 50ms 发出消息 wm timer 3 添加消息 wm timer 的映射函数 每接受到 wm timer 消息就刷新屏幕 4 绘图函数后 调用函数 swapbuffers 将后台帧缓存拷贝到前台更新屏幕显示 完成这四个设置后 还有一个关键的问题 就是绘图函数绘入前后台视频缓存的内容 这需要考虑纸盒折叠过程的平移和旋转等操作 4 1 3 纸盒折叠过程的动画实现 4 1 3 纸盒折叠过程的动画实现 纸盒一般由点 线和面等几何对象有机组合而成 折叠时 根据具体的几何对象需要 确定旋转的角度 方向和旋转轴 35 39 对几何对象进行几何变换的时候 首先确定其 旋转轴 然后要使用平移函数把坐标系原点移到旋转轴的一点 旋转时要选好旋转方向和 旋转角度 旋转的四要素是旋转轴 旋转方向 旋转角度和初始位置即 2d 各顶点的坐标 值 纸盒折叠过程中存在情况是复杂的 用图 4 1 正六棱柱纸盒的例子来说明 图 4 1 中 a b c 三个几何面片做同一几何变换时 需要先把它们相同的旋转要素压入堆栈中 a b 两个对象做另一个同一几何变换 需要再把它们相同的旋转要素压入堆栈中 a b c 各自还有各自的几何变换 需要将其各自的旋转要素压入堆栈中 40 41 图 4 1 中 si i 1 6 表示盒体面片 tj j 1 6 表示盒盖的摇翼 bk k 1 6 表 示盒底的摇翼 hn n 1 12 表示棱的顶点 s3 左边 面 s1 s2 t1 t2 b1 b2 ts 要围绕 h3h9 轴向纸外转 60 面 s1 t1 b1ts 围绕 h2h8 向纸外转 60 ts 围绕 h1h7 向纸外转 60 ts 为粘贴边 s3 右边 面 s4 s5 s6 t4 t5 t6 b4 b5 b6 要围绕 h4h10 向纸外转 60 三维异型纸盒 cad 软件的三维展示功能 17 图 4 1 正六棱柱的展开图 fig4 1 2d draw of six prismy 面 s5 s6 t5 t6 b5 b6 围绕 h5h11 向纸外转 60 面 s6 t6 b6 围绕 h6h12 向纸外转 60 盒盖盒底面片旋转封口封底 根据 a b c 压入堆栈的顺序依次下去 形成了正六棱柱 纸盒折叠的堆栈 层 堆栈 层 主要来说明纸盒的各个组成部分的进栈和出栈顺序 根据堆栈 层 利 用 opengl 的堆栈操作函数就可以建立纸盒折叠过程顺序模型 关键代码如下 glpushmatrix 整体纸盒的进栈 调用旋转函数实现纸盒整体的旋转 glpushmatrix s1 s2 t1 t2 b1 b2 ts 进栈 调用平移函数 调用旋转函数实现 s1 s2 t1 t2 b1 b2 ts 的旋转 glpushmatrix s1 t1 b1 ts 进栈 调用平移函数 调用旋转函数实现 s1 t1 b1 ts 的旋转 glpushmatrix s1 ts 进栈 调用平移函数 调用旋转函数实现 s1 ts 的旋转 glpushmatrix s1 进栈 调用平移函数 调用旋转函数实现 s1 的旋转 调用图元绘制函数绘制 s1 glpopmatrix s1 出栈 glpushmatrix ts 进栈 调用平移函数 调用旋转函数实现 ts 的旋转 调用图元绘制函数绘制 ts glpopmatrix ts 出栈 glpopmatrix s1 ts 出栈 西安理工大学硕士学位论文 18 glpushmatrix b1 进栈 glpopmatrix b1 出栈 glpopmatrix s1 t1 b1 ts 出栈 glpushmatrix s2 t2 b2 进栈 调用平移函数 调用旋转函数实现 s2 t2 b2 的旋转 glpushmatrix b2 进栈 调用平移函数 调用旋转函数实现 b2 的旋转 调用图元绘制函数绘制 b2 glpopmatrix b2 出栈 glpushmatrix s2 进栈 调用平移函数 调用旋转函数实现 s2 的旋转 调用图元绘制函数绘制 s2 glpopmatrix s2 出栈 glpushmatrix t2 进栈 调用平移函数 调用旋转函数实现 t2 的旋转 调用图元绘制函数绘制 t2 glpopmatrix t2 出栈 glpopmatrix s2 t2 b2 出栈 glpop matrix s1 s2 t1 t2 b1 b2 ts 出栈 glpushmatrix s4 s5 s6 t4 t5 t6 b4 b5 b6 进栈 折叠时 以 s3 为界线 左右两边的堆栈进出操作类似 glpopmatrix s4 s5 s6 t4 t5 t6 b4 b5 b6 出栈 glpopmatrix 整体纸盒的出栈 堆栈 层 的建立完成了模拟纸盒折叠过程中各个面片的折叠顺序 要实现纸盒的 折叠动画还要设定时钟定时刷新屏幕 刷新时递变 递增或递减 各面片旋转角度 得到 旋转不同角度下的纸盒结构图帧 利用 opengl 的双缓存技术实现纸盒的折叠动画显示 时钟设定响应函数 ontimer 实现图 4 1 所示六棱柱的折叠过程的旋转角度变化时 ontimer 的关键代码如下 if h4h10 60 h4h10 h4h10 2 h3h9 h3h9 2 完成 ts s1 s2 和 s4 s5 s6 的旋转 if h4h10 60 完成 ts s1 和 s5 s6 的旋转 if h2h8 60 打印机宽度方向页面尺寸 cypage pdc getdevicecaps vertres 打印机高度方向页面尺寸 打印机分辨率为 cxinch cyinch cxinch pdc getdevicecaps logpixelsx 宽度方向每英寸上的像素个数 cyinch pdc getdevicecaps logpixelsy 高度方向每英寸上的像素个数 西安理工大学硕士学位论文 28 在框架打印的基础上设计 opengl windows 的打印 中间过程是重载 ondraw 函数来完 成打印 整个打印过程如图 5 2 所示 b 所设即所得 打印 b 所设即所得 打印 图形软件的 所设即所得 打印是非常有意义的 三维异型包装纸盒 cad 软件打印时 达到了 所设即所得 的效果 所设即所得 指预先设置的纸盒结构参数和打印结果是 一致的 使得用户在使用该软件是可以掌握纸盒的尺寸大小制作合适的纸盒 设置纸盒结 构参数传递给绘图函数 绘制图形并显示在客户窗口 然后再传递给打印机打印出来 分 析打印过程中 产生 所设非所得 的原因有以下三个 1 mfc 的映射模式 显示器的分辨率和绘图环境的设置影响内存图形到客户窗口的 缩放 2 打印机分辨率和打印机视口大小 目标窗口 影响图形从客户窗口到打印目标窗 口的缩放 3 客户窗口和打印目标窗口的大小是否成比例会影响图形的畸变 如图 5 2 中的 rcdest 的设置 以 cxpage 为基数 rcdib height cyinch cdib width cxinch 为长 宽比例 确保不会畸变 pdc isprinting getclientrect dib 图形句柄 lpbitmapinfo m pbmi 位图文件结构 lpbyte m pbits 位图数据 成员函数 writewindowtodib 将屏幕图形转换成 dib 图形 ondraw 调用 paint 实现打印 paint 将屏幕图形复制到设备环境中实现打印 capture 屏幕获取 writedib 将 dib 数据写入文件并保存文件 ddbtodib 将 ddb 图形转换成 dib 图形 release 释放相关内存 调 用 关系 图 6 3 打印类 clientcapture 类 fig6 3 printing class 西安理工大学硕士学位论文 34 封装以上各类的功能后 最终要通过文档 视图结构来实现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论