版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章计算机图形系统本章内容:
§2.1图形系统概述§2.2图形系统的硬件设备§2.3图形系统的体系结构
§2.4图形系统的软件系统§2.5图形程序的编程方法
系统的结构:合理的层次结构和模块结构。目的:设计容易、维护方便,便于扩充和移植。§2.4图形的软件系统2.4.1图形软件的组成1.零层图形软件(驱动程序、接口程序)
功能:解决图形设备与主机通讯、接口等问题。要求:程序质量高、速度快、内存占用量小。对象:面向系统。语言:汇编语言、机器语言、高级语言(外设处理)。
2.一层图形软件(基本子程序)
功能:生成基本图形元素和对设备进行通讯和管理。要求:程序质量高、速度快、内存占用量小。对象:面向系统,面向用户。语言:汇编语言、高级语言(外设处理)。3.二层图形软件(通用程序)
功能:建立图形数据结构,定义、修改和输出图形;建立各图形设备之间的联系。要求:人—机交互较强、容易阅读、便于维护和移植。对象:面向系统,面向用户。语言:高级语言。4.三层图形软件(应用程序)
功能:解决具体的工程应用问题。要求:准确、合理、安全、速度快、用户界面良好。对象:面向用户。语言:高级语言。2.4.2基本图形软件
零到二级软件称:基本图形软件或支撑软件三级及以上软件:应用图形软件1.建立基本图形软件的方法图形程序库:以高级语言为基础,扩充处理图形功能;特点:容易实现,客易调试,便于修改及扩充;关键:选择高级语言。修改高级语言:在高级语言基础上,修改其编译系统;特点:图形处理能力较强,速度提高;关键:修改语言的编译系统。专用图形语言:按照处理图形要求设计一种图形语言;特点:有自已独立的编译器2.图形软件与其它资源的联系选择操作系统:
①具有良好的用户界面、可视化程度高;②具有比较强的处理外部设备能力;③通用性比较强,便于移植。选择高级语言:
①通用性比较强;②具有较强模块化结构;③适应范围比较广;④数据类型齐全且丰富灵活;⑤处理外部设备能力比较强⑥目标程序质量高。软件系统系统软件应用软件操作系统主语言系统系统接口基本软件功能软件应用软件软件系统的结构计算机图形系统硬件系统软件系统输入设备中央处理机输出设备系统软件应用软件外存储器通用设备专用设备CPU内存储器操作系统主语言系统系统接口基本软件功能软件应用软件计算机图形系统的结构§2.5图形程序的编程方法
1.概述1)VC所编写的Windows应用程序通常在视图类中通过在OnDraw函数中添加绘图代码来完成图形生成;2)OnDraw函数是CView(视图)类的虚拟成员函数,它在CView的派生类中被重新定义,每次CView类封装的视图窗口在接到WM_PAINT消息后,就会通过消息映射函数OnPaint(响应WM_PAINT消息)调用它;3)WM_PAINT消息是在某个视图窗口需要重画或刷新其显示内容时发出的。2.5.1VC++简单绘图编程2设备环境类(DC)
1)设备环境(DeviceContext,DC),又称设备描述表或设备上下文,是一种Windows的数据结构。★该结构中保存绘图操作中使用的重要属性参数、与图形输出设备的绘制属性有关的信息;★在编程中,所有绘图操作都是通过设备环境进行的;★可向屏幕、打印机、图形文件或内存位图输出结果。
3CDC(ClassofDevice-Context)类
★MFC类库提供了不同类型的设备上下文的类,每一个类都封装了代表Windows设备上下文的句柄和函数。
★其中CDC是设备上下文的基类,包含了绘图所需要的所有成员函数,包括部分虚函数;★在MFC中,提出这些派生类的目的就是为了在不同的显示设备上进行显示。★CDC类提供绘图函数、坐标映射函数、裁剪函数,可以通过这个类来方便地实现图形显示。★一些特殊的设备环境类都是从CDC类派生出来的。
MFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windowsAPI函数,vc++是微软公司开发的c/c++的集成开发环境。CDC中常用的成员函数函数说明Arc()绘制椭圆弧BitBlt()把位图从一个DC拷贝到另一个DCDraw3dRect()绘制三维矩形DrawDragRect()绘制用鼠标拖拽的矩形DrawEdge()绘制矩形的边缘DrawIcan()绘制图标Ellipse()绘制椭圆FillRect()用给定画刷的颜色填充矩形FillRgn()用给定画刷的颜色填充区域GetBkColor()获取背景颜色GetCurrentBitmap()获取所选位图的指针GetCurrentBrush()获取所选画刷的指针GetCurrentFront()获取所选字体的指针屏幕坐标系统
1.设备坐标系统x轴自左至右,y轴从上到下,坐标原点在屏幕左上角
2.逻辑坐标系统坐标为自下而上,坐标原点在屏幕左下角XYO设备坐标系统XYO逻辑坐标系统
4图形程序开发方法使用VC++进行图形程序设计的基本步骤如下:
1)创建绘图工具并设置相关颜色、线型和线宽等属性;
2)在MFC应用程序中,通常很多绘图操作都是在视类的OnDraw()成员函数中进行的;3)OnDraw()函数参数中自动有一个CDC的指针pDC,利用pDC调用CDC类的成员函数完成绘图操作;4)需要立即绘制图像时,通过调用更新窗口函数Invalidate()使Windows送出WM_PAINT消息自动调用OnDraw()函数来重绘图形。5)在绘制之后,恢复原有的绘图工具。5在VC++环境下程序设计(一)控制台操作VC提供了控制台操作方式,具体步骤如下:1)启动VC++2)选择“文件”“新建..”3)单击“文件”选择卡:选择“C++SourceFile”;在“文件名”栏中填写文件名,如CG1.c;在“位置”选择文件存放的路径;在此:填写文件名在此:选择文件存放路径3)进入VC编辑界面,输入源程序,然后存盘;4)编译源程序,选择“组建”菜单项中“编译”;5)组建目标程序,选择“组建”菜单项中“组建”;6)运行程序:选择“组建”菜单项中“执行”;(二)通过建立工程的方法具体步骤如下:1)启动VC++2)选择“文件”“新建..”3)单击“工程”选择卡:选择“W32ConsoleApplication”;在“工程名”栏中填写文件名,如CG1;在“位置”选择文件存放的路径;最后单击“确定”按钮。4)在“W32ConsoleApplication
步骤1
:”中选择“一个空白工程”,单击“完成”按钮。5)在“新工程信息”中,单击“确定”按钮。5)在“ss-MicrosoftVisualC++”中选择“FileView”视图卡,单击“ssfiles”;6)选中“SourceFiles”,单击“确定”按钮;7)单击右键,在快捷菜单中选择“添加文件到目录”;8)在“插入文件到工程”对话框中,填入文件名“ss.cpp”,单击“确定”按钮;9)在“ss-MicrosoftVisualC++”中点击“SourceFiles”项前的“+”,再双击“ss.cpp”;10)在编辑框中输入源程序;
余下步骤同(一)。(三)利用MFCAppWizard编程MFC提供了大量的图形处理函数,具体步骤如下:1)启动VC++2)选择“文件”“新建..”3)单击“工程”选择卡:选择“MFCAppWizard(exe)”;在“工程名”栏中填写文件名,如CG2;在“位置”选择文件存放的路径;最后单击“确定”按钮。4)在“MFC应用程序向导-步骤1:”对话框中选择“单文档(S)”,其它选择缺省值;单击“完成”按钮。5)在“新建工程信息”对话框中,单击“确定”按钮。
6)增加菜单项,选择“ResourceView”视图卡,单击“cg2resources”前之“+”;再单击“Menu”项前“+”;7)双击“IDR_MAINFRAME”项,打开菜单编辑器,可增加绘图菜单;类视图资源视图文件视图8)添加绘图菜单标签双击菜单空白标签,弹出“菜单项目属性”对话框,在“标明”栏中填写菜单名称,如绘图。9)添加菜单项双击菜单空白项,弹出“菜单项目属性”对话框,在ID区中添加“ID_DRAW_LINE”;在“标明”栏中填写菜单项名称,如直线。10)为菜单项添加消息响应函数右键单击“直线”菜单项,在快捷菜单中选择“建立类向导”菜单项。11)添加绘制直线的代码在“MFCClassWizard”对话框中,在“Classname”栏中,选择“Ccg2View”项,在“Object”栏中,选择“ID_DRAW_LINE”项,在“Messages”栏中,选择“COMMAND”项,单击右边的“AddFactins”按钮,弹出“AddMemberFactins”对话框,然后单击“OK”;在“MemberFactins”项中,显示“OnDARWLine”项;单击“EditCode”按钮,弹出“cg2View.cpp”程序编辑对话框。voidCCg2View::OnDrawLine(){ //用默认画笔画直线,属性:实线、1像素宽、黑色CDC*pDC=GetDC(); pDC->MoveTo(100,100); pDC->LineTo(200,300); pDC->LineTo(300,100); pDC->LineTo(100,100);}2.5.2OpenGL编程基础
1概述1)OpenGL是在SGI(SiliconGraphics硅图)等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。2)目前,包括Microsoft、SGI、IBM、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品。3)其中比较著名的产品包括:动画制作软件Softimage和3DStudioMAX、仿真软件OpenInventor、VR软件WorldToolKit、CAM软件ProEngineer、GIS软件ARC/INFO等等。4)独立于窗口系统和操作系统以它为基础开发的应用程序可以十分方便地在各种平台间移植5)可与VisualC++紧密接口便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;6)使用简便,效率高
2OpenGL的主要功能1)绘制模型:图形库提供基本几何图形,可绘制需要的三维模型;2)变换模型:图形库提供了基本变换和投影变换两种变换模型;3)着色模式:提供两种颜色显示方式,RGBA模式和颜色索引方式。4)光照处理:提供了环境光、漫反射光和镜面光等的光照模型。5)纹理映射:能将真实感的纹理粘贴在物体表面,使其逼真生动。6)位图和图像:提供了一系列函数来实现位图和图像的操作。且位图和图像数据可以在屏幕和内存间进行传递。7)制作动画:提供了双缓存技术来实现动画绘制。8)选择和反馈:为支持交互式程序设计选择操作模式和反馈模式。9)反走样技术,能够实现深度暗示、运动模糊和雾化等特殊效果。3OpenGL的绘制流程和原理
4OpenGL函数包含OpenGL核心库(GL),OpenGL实用库(GLU)OpenGL辅助库(GLAUX),OpenGL工具库(GLUT)OpenGL对窗口系统的扩展(WGL,等等)功能渲染功能提供图形绘制所需的各种功能函数窗口管理功能管理窗口系统的所有相关功能,如键盘鼠标的响应,各种窗口事件等等1)OpenGL核心库(GL)这部分函数用于常规的、核心的图形处理,是OpenGL的核心部分包含300多个函数,函数名前缀一律是“gl”Windows平台上头文件“GL.H”库文件“OPENGL32.LIB”动态链接库“OPENGL32.DLL”核心库可以在所有的OpenGL平台上运行2)OpenGL实用库(GLU)这部分函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。如:坐标变换、纹理映射、绘制椭球、茶壶等简单多边形包含约50个函数,函数名前缀一律是“glu”Windows平台上头文件“GLU.H”库文件“GLU32.LIB”动态链接库“GLU32.DLL”实用库可以在所有的OpenGL平台上运行3)OpenGL辅助库(GLAUX)这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体包含约30个函数,函数名前缀一律是“aux”Windows平台上头文件“GLAUX.H”库文件“GLAUX.LIB”动态链接库“GLAUX.DLL”OpenGL中的辅助库不能在所有的OpenGL平台上运行4)OpenGL工具库(GLUT)由MarkKilgard开发这部分函数主要提供基于窗口的工具,以及一些绘制较复杂物体的函数包含大约30多个函数,函数名前缀为“glut”文件头文件“GLUT.H”库文件“GLUT32.LIB”动态链接库“GLUT32.DLL”glut中的窗口管理函数不依赖于运行环境的,可以在所有的OpenGL平台上运行5)WGL库:OpenGL对窗口系统的扩展对于各类窗口系统,OpenGL都提供了一个扩展库对于Windows系统,OpenGL提供WGL库并不是所有的函数前缀都是“wgl”用于连接OpenGL和Windows,在Windows平台上设置OpenGL环境头文件、库文件和动态链接库都和WindowsGDI一样,由Windows底层提供,头文件是“WINGDI.H”只能在Windows平台上运行函数格式示例:定义点函数5OpenGL函数格式glVertex3f(x,
y
,z)glVertex3fv(p)属于GL库函数的功能参数的类型参数个数参数为指针注意每部分的大小写6函数库的使用方式包含各个库的头文件程序中直接声明include“*.h”引用各个库的库文件在开发工具的工程设置中加入对“*.lib”的引用将各个库的动态链接库放在系统目录下或者是程序的运行目录下(对于Windows2000来说是“WINNT\System32”目录)(对于WindowsXP来说是“Widows\System32”目录)2.5.3简单例程1)例程分析#include<GL/glut.h>#include<math.h>inti;constintn=1000;constGLfloatR=0.5f;constGLfloatPi=3.1415926536f;constGLfloatfactor=0.1f;voidmyDisplay(void){//矩形glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f,1.0f,1.0f);glRectf(-0.8f,-0.8f,0.8f,0.8f);//三角形 glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f);glVertex2f(0.0f,-0.8f); glColor3f(1.0f,1.0f,0.0f);glVertex2f(0.8f,0.8f); glColor3f(0.0f,1.0f,0.0f);glVertex2f(-0.8f,0.8f); glEnd();//圆glColor3f(1.0f,0.0f,1.0f);glBegin(GL_POLYGON);for(i=0;i<n;++i)glVertex2f(R*cos(2*Pi/n*i),R*sin(2*Pi/n*i));glEnd();}//五星glColor3f(0.0f,0.0f,1.0f);GLfloata=1/(2-2*cos(72*Pi/180));GLfloatbx=a*cos(18*Pi/180);GLfloatby=a*sin(18*Pi/180);GLfloatcy=-a*cos(18*Pi/180);GLfloatPointA[2]={0,a},PointB[2]={bx,by},PointC[2]={0.5,cy},PointD[2]={-0.5,cy},PointE[2]={-bx,by};glBegin(GL_LINE_LOOP);glVertex2fv(PointA);glVertex2fv(PointC);glVertex2fv(PointE);glVertex2fv(PointB);glVertex2fv(PointD);glEnd();
//左下小三角形 glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f);glVertex2f(-0.65f,-0.6f); glColor3f(0.0f,0.0f,1.0f);glVertex2f(-0.6f,-0.7f); glColor3f(1.0f,0.0f,1.0f);glVertex2f(-0.7f,-0.7f);//右下小三角形 glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f);glVertex2f(0.65f,-0.6f); glColor3f(1.0f,1.0f,0.0f);glVertex2f(0.6f,-0.7f); glColor3f(1.0f,0.0f,1.0f);glVertex2f(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 非标切削刀具课程设计
- 课程设计幼儿英语怎么说
- 设计马路课程设计意图
- 2024至2030年中国电磁振动给料机行业投资前景及策略咨询研究报告
- 2024至2030年中国电子地磅行业投资前景及策略咨询研究报告
- 2024至2030年中国棉质超薄夜用卫生巾行业投资前景及策略咨询研究报告
- 2024年混凝土摆式振动棒项目可行性研究报告
- 2024至2030年中国平行蒸发仪数据监测研究报告
- 2024年果汁型汽水项目可行性研究报告
- 2024年数控转台项目可行性研究报告
- 四川省成都市九县区2024-2025学年高一上学期期中考试数学试题(含答案)
- 户外广告安装施工方案
- 2023医疗质量安全核心制度要点释义(第二版)对比版
- 摄影器材采购合同模板
- 增补 金额 合同模板
- 部编语文二学年上册第四单元集体集备及教材解读
- 2024年中央企业全面质量管理知识竞赛考试真题库(含答案)
- 2022版义务教育(道德与法治)课程标准(附课标解读)
- 思想道德与法治第二章
- (完整版)花岗岩地面施工方案
- 电压时间型馈线自动化系统的参数整定方法(主线型)[运用学习]
评论
0/150
提交评论