计算机图形学课程设计报告--简单图形绘制软件的设计与实现.doc_第1页
计算机图形学课程设计报告--简单图形绘制软件的设计与实现.doc_第2页
计算机图形学课程设计报告--简单图形绘制软件的设计与实现.doc_第3页
计算机图形学课程设计报告--简单图形绘制软件的设计与实现.doc_第4页
计算机图形学课程设计报告--简单图形绘制软件的设计与实现.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

滁滁州州学学院院 图图形形学学设设计计报报告告 课程名称 课程名称 计算机机图形学 设计题目设计题目 简单图形绘制软件的设计与实现 系系 别 别 计算机科学与技术系 专专 业 业 姓姓 名 名 起止日期 起止日期 2011 年 5 月 20 日 2011 年 6 月 20 日 指导教师 指导教师 计算机科学与技术系二计算机科学与技术系二 0000 九年制九年制 目录目录 引引言言 1 需需求求分分析析 1 概概要要设设计计 1 3 1 概概要要设设计计实实现现的的内内容容 1 3 2 函函数数的的功功能能描描述述 1 详详细细设设计计 2 调调试试与与操操作作说说明明 4 课课程程设设计计总总结结与与体体会会 6 致致谢谢 6 参参考考文文献献 6 附附录录 7 1 课程设计的主要内容课程设计的主要内容 引言引言 本学期系统的学习了计算机图形学 在学期末按课程要求对其进行设计 本课程主要内容包括以图形学算法为目标 深入研究 续而策划设计实现一个 能够表现计算机图形学算法原理的或完整过程的演示系统 并能从某些方面做 出评价和改进意见 通过完成一个完整程序 经历策划 设计 开发 总结 达到通过本课程设计 使自己巩固和实践计算机图形学课程中的理论和算法 掌握基本图形显示程序设计方法 及二维和三维图形变换等程序设计方法 学 习表现计算机图形学算法的技巧 同时以达到培养认真学习积极探索的精神 需求分析需求分析 图形学设计报告题目 地球与卫星模拟图 图形学设计报告任务及要求 以计算机图形学的研究内容 发展与应用 实现图形输入输出设备 图形显示原理 图形软件标准 基本图形生成算法 图形几何变换与裁剪 自由曲线和曲面 三维实体造型 光照模型 颜色模型 光线跟踪 纹理模拟 常用的计算机动画技术和软件等 课程设计思想 绘制一个地图与卫星模拟图 在此中综合实现本学期中学 习到 OpenGL 编程中大部分的方法与操作 软硬件运行环境 Microsoft Windows XP 工发工具 VC 6 0 概要设计概要设计 3 1 概要设计实现的内容概要设计实现的内容 利用 VC 6 0 完成了一个地图与卫星模拟图 该模拟图能实现基本的图形 操作功能 通过本次实验 应该了解图形学里使用 OpenGL 的一些基于操作 了解直线 矩形 圆和 Bezier 曲线和曲面等图形的绘制原理 旋转原理 移动 原理和缩放原理等 本设计包括图形绘制模块 键盘控制模块 图形绘制模块 该模块包括图形的绘制和操作功能 主要有绘制直线 移动直线 缩放和旋转 直线 绘制和缩放圆形 绘制 Bezier 曲线 绘制 Berier 曲面等 键盘控制模块 该模块主要实现通过键盘 Z X W A S D 来控制旋转 移动 放大等 3 2 函数的功能描述函数的功能描述 初始化 OPENGL 的灯光 材质 雾 投影方式的函数 void initview 绘制图形基于操作函数 void draw 绘制图形 berzer 曲面函数 void berzer surface float control point int m int n 绘制图形 berzer 曲线函数 void berzer curve float control point int n int f 设置一维纹理函数 void set texture1d GLubyte image int width 对 OPENGL 图像的材质操作的函数 void initMaterial 2 详细设计详细设计 1 对图形的操作 void EnableOpenGL HWND hWnd HDC hDC HGLRC hRC 初始化设备 void DisableOpenGL HWND hWnd HDC hDC HGLRC hRC 还原绘图设备 void initview 初始化 OPENGL 的灯光 材质 雾 投影方式等 void draw 绘制图形如曲线 曲面 圆柱 球 点 线 多边形等 void berzer surface float control point int m int n 绘制图形 berzer 曲面 void berzer curve float control point int n int f 绘制图形 berzer 曲线 void set texture1d GLubyte image int width 设置一维纹理 void initMaterial 初始化 OPENGL 的材质 2 通过方向键 Z X W A S D 来控制旋转 移动 放大等 if GetAsyncKeyState VK UP 0 rx 1 if GetAsyncKeyState VK DOWN 0 rx 1 if GetAsyncKeyState VK LEFT 0 ry 1 if GetAsyncKeyState VK RIGHT 0 ry 1 if GetAsyncKeyState Z 0 scale 0 02 if GetAsyncKeyState X 0 scale 0 02 if GetAsyncKeyState D 0 tx 0 05 if GetAsyncKeyState A 0 tx 0 05 if GetAsyncKeyState W 0 ty 0 05 if GetAsyncKeyState S 0 ty 0 05 glPushMatrix 保存 3 绘制 berzer 曲线和曲面 void berzer surface float control point int m int n 绘制图形 berzer 曲面 void berzer curve float control point int n int f 绘制图形 berzer 曲线 berzer 曲线的控制点 float cpoint 5 3 1 5 1 5 1 0 0 5 1 5 3 0 0 5 1 5 5 0 1 5 1 5 2 0 3 1 5 0 berzer 曲面的控制点 GLfloat ctrlpoints 4 4 3 1 5 1 5 2 0 0 5 1 5 2 0 0 5 1 5 1 0 1 5 1 5 1 0 1 5 0 5 1 0 0 5 0 5 2 0 0 5 0 5 1 0 1 5 0 5 1 0 1 5 0 5 1 0 0 5 0 5 3 1 0 0 5 0 5 1 0 1 5 0 5 1 5 1 5 1 5 2 0 0 5 1 5 1 0 0 5 1 5 1 0 1 5 1 5 1 0 4 对图形光的处理 GLfloat light ambient 0 1 0 1 0 1 1 0 环境光颜色 GLfloat light diffuse 0 3 0 3 0 3 1 0 漫反射光颜色 GLfloat light specular 1 1 1 1 0 镜面反射光颜色 GLfloat light position 0 0 10 1 0 glLightfv GL LIGHT0 GL POSITION light position 设置灯光的位置 glLightfv GL LIGHT0 GL AMBIENT light ambient glLightfv GL LIGHT0 GL DIFFUSE light diffuse glLightfv GL LIGHT0 GL SPECULAR light specular glLightf GL LIGHT0 GL SPOT CUTOFF 30 光锥的轴与中 心线的夹角 GLfloat spot direction 0 0 1 0 glLightfv GL LIGHT0 GL SPOT DIRECTION spot direction 定义聚光方向 glLightf GL LIGHT0 GL SPOT EXPONENT 10 控制光的集中程度 glEnable GL LIGHTING 设置灯光有效 glEnable GL LIGHT0 设置第一个灯光有效 5 设置对象的材质 void initMaterial glDisable GL TEXTURE 1D GLfloat mat ambient 0 8 0 0 9 1 0 GLfloat mat diffuse 0 8 0 0 9 1 0 GLfloat mat specular 0 7 0 7 0 7 1 0 GLfloat mat shininess 10 glMaterialfv GL FRONT GL AMBIENT mat ambient 设置材质的环境光颜色 glMaterialfv GL FRONT GL DIFFUSE mat diffuse 设置材质的漫反射光颜色 glMaterialfv GL FRONT GL SPECULAR mat specular 设置材质的镜反光颜色 glMaterialfv GL FRONT GL SHININESS mat shininess 设置材质的镜反光的强度 6 对纹理操作 void set texture1d GLubyte image int width GLfloat sgenparams 1 0 1 0 1 0 0 0 glPixelStorei GL UNPACK ALIGNMENT 1 glTexEnvf GL TEXTURE ENV GL TEXTURE ENV MODE GL MODULATE 设置纹理映射方式 glTexParameterf GL TEXTURE 1D GL TEXTURE WRAP S GL REPEAT glTexParameterf GL TEXTURE 1D GL TEXTURE MAG FILTER GL LINEAR glTexParameterf GL TEXTURE 1D GL TEXTURE MIN FILTER GL LINEAR 4 控制纹素映射到片元 fragment 时怎样对待纹理 glTexImage1D GL TEXTURE 1D 0 3 width 0 GL RGB GL UNSIGNED BYTE image 1D 纹理定义的函数 glTexGeni GL S GL TEXTURE GEN MODE GL OBJECT LINEAR 自动产生纹理坐标 glTexGenfv GL S GL OBJECT PLANE sgenparams glEnable GL TEXTURE GEN S glEnable GL TEXTURE 1D 调试与操作说明调试与操作说明 1 正常绘制的旋转效果如图 1 所示 图 1 绘制效果图 2 通过按键盘 Z 键将其远移 可以通过按键盘 X 键将其近移放大 远移效果图如图 2 所示 图 2 远移效果图 5 3 通过按键盘 D 键将其右移 可以通过按键盘 A 键将其左移 右移效果图如图 3 所示 图 3 右移效果图 4 通过按键盘 W 键将其上移 可以通过按键盘 S 键将其下移 上移效果图如图 4 所示 图 4 上移效果图 5 通过键盘操作旋转物体可以看到对光照操作处理的效果 如图 5 所示 6 图 5 光照效果图 课程设计总结与体会课程设计总结与体会 这次课程设计是我更加了解了计算机图形学这门课程 知道了很多以前一 知半解的知识 让我收获不小 到真正自己动手做的时候才会发现不足之处 在做设计的期间 又温习了原来所学的知识 有助于知识系统的归纳 任何知 识和理论都要归结于实践 同时设计程序的过程也是困难重重 在设计的过程 中自己不断的查找相关书籍 了解知识 并运用这些知识解决设计中的问题 加深了对知识的了解 使自己更加熟练的运用各种知识 对计算机图形学的了 解也有加深 明白了计算机图形学在生活中的作用 它与我们息息相关 只有 自己亲手去做你才会真正的了解它 了解计算机图形学 程序设计的过程不是 枯燥无味的 当你去挖掘它的用法 设计的理念 你越好发现它的魅力 一个 生动有趣的图形可以用文章加以说明 用算法用程序绘制出来 致谢致谢 本图形学设计是在我的老师杨斌的亲切关怀和悉心指导下完成的 他严肃 的科学态度 严谨的治学精神 精益求精的工作作风 深深地感染和激励着我 从课题的选择到设计的最终完成 我要感谢杨老师对我的教育培养 您细心指 导我的学习与研究 在此 我要向您深深地鞠上一躬 还要感谢在我身边帮助 过我的同学们 感谢你们热情的付出 你们兢兢业业 奋发向上的精神 将是 我今后人生前进道路上的一种力量 再次感谢我的老师 参考文献参考文献 1 美 Steve Cunningham 计算机图形学 M 石教英 潘志庚 等译 北京 机 械工业出版社 2009 2 美 P J Deitel C 大学教程 M 北京 电子工业出版社 2007 3 孙波 OpenGL 编程实例学习教程 范建华等译 北京 北京大学出版社 7 2000 附录附录 程序源代码和部分注释 pragma comment lib glut32 lib pragma comment lib opengl32 lib pragma comment lib glu32 lib pragma comment lib glaux lib include include include include LRESULT CALLBACK WndProc HWND hWnd UINT message WPARAM wParam LPARAM lParam void EnableOpenGL HWND hWnd HDC hDC HGLRC hRC 初始化设备 void DisableOpenGL HWND hWnd HDC hDC HGLRC hRC 还原绘图设备 void initview 初始化 OPENGL 的灯光 材质 雾 投影方式等 void draw 绘制图形如曲线 曲面 圆柱 球 点 线 多边形等 void berzer surface float control point int m int n 绘制图形 berzer 曲面 void berzer curve float control point int n int f 绘制图形 berzer 曲线 void set texture1d GLubyte image int width 设置一维纹理 void initMaterial 初始化 OPENGL 的材质 define stripeImageWidth 64 GLubyte stripeImage 3 stripeImageWidth berzer 曲线的控制点 float cpoint 5 3 1 5 1 5 1 0 0 5 1 5 3 0 0 5 1 5 5 0 1 5 1 5 2 0 3 1 5 0 berzer 曲面的控制点 GLfloat ctrlpoints 4 4 3 1 5 1 5 2 0 0 5 1 5 2 0 0 5 1 5 1 0 1 5 1 5 1 0 1 5 0 5 1 0 0 5 0 5 2 0 0 5 0 5 1 0 1 5 0 5 1 0 1 5 0 5 1 0 0 5 0 5 1 0 0 5 0 5 1 0 1 5 0 5 1 5 1 5 1 5 2 0 0 5 1 5 1 0 0 5 1 5 1 0 1 5 1 5 1 0 int WINAPI WinMain HINSTANCE hInstance HINSTANCE hPrevInstance LPSTR lpCmdLine int iCmdShow WNDCLASS wc HWND hWnd HDC hDC HGLRC hRC MSG msg BOOL bQuit FALSE 8 float rx 0 0f ry 0 rx 代表 X 轴的转角 ry 代表 Y 轴的转角 float scale 0 5 scale 代表放大比例 float tx 0 ty 0 tz 10 tx ty tz 代表 X Y Z 轴的移动量 注册窗口的类 wc style CS OWNDC wc lpfnWndProc WndProc wc cbClsExtra 0 wc cbWndExtra 0 wc hInstance hInstance wc hIcon LoadIcon NULL IDI APPLICATION wc hCursor LoadCursor NULL IDC ARROW wc hbrBackground HBRUSH GetStockObject BLACK BRUSH wc lpszMenuName NULL wc lpszClassName GLSample RegisterClass 创建主窗口 hWnd CreateWindow GLSample OpenGL Sample WS CAPTION WS POPUPWINDOW WS VISIBLE 0 0 600 600 NULL NULL hInstance NULL 初始化设备和 OPENGL EnableOpenGL hWnd initview 程序主循环 while bQuit 检查窗口消息 if PeekMessage else TranslateMessage DispatchMessage else OPENGL 代码如下 glClearColor 0 0f 0 6f 0 8f 0 0f 设置窗口背景色 glClear GL COLOR BUFFER BIT 清除颜色缓冲 9 if GetAsyncKeyState VK UP 0 方向键 Z X W A S D 来控制旋转 移动 放大 rx 1 if GetAsyncKeyState VK DOWN 0 rx 1 if GetAsyncKeyState VK LEFT 0 ry 1 if GetAsyncKeyState VK RIGHT 0 ry 1 if GetAsyncKeyState Z 0 scale 0 02 if GetAsyncKeyState X 0 scale 0 02 if GetAsyncKeyState D 0 tx 0 05 if GetAsyncKeyState A 0 tx 0 05 if GetAsyncKeyState W 0 ty 0 05 if GetAsyncKeyState S 0 ty 0 05 glPushMatrix 保存 glTranslatef tx ty tz 目标分别沿三个轴向平移的偏移量 glRotatef rx 1 0 0 表示目标沿从点 x y z 到原点的方向逆时针旋转 rx 度 glRotatef ry 0 1 0 glScalef scale scale scale 目标分别沿三个轴向缩放的比例因子 draw glPopMatrix 取回 SwapBuffers hDC 双缓冲交换 Sleep 1 使 OPENGL 无效和还原设备 DisableOpenGL hWnd hDC hRC DestroyWindow hWnd return msg wParam LRESULT CALLBACK WndProc HWND hWnd UINT message WPARAM wParam LPARAM lParam switch message case WM CREATE 10 return 0 case WM CLOSE PostQuitMessage 0 return 0 case WM DESTROY return 0 case WM KEYDOWN switch wParam case VK ESCAPE PostQuitMessage 0 return 0 return 0 default return DefWindowProc hWnd message wParam lParam 设置设备的描述表和象素格式 void EnableOpenGL HWND hWnd HDC hDC HGLRC hRC PIXELFORMATDESCRIPTOR pfd 设备的描述表 int iFormat get the device context DC hDC GetDC hWnd set the pixel format for the DC ZeroMemory pfd nSize sizeof pfd pfd nVersion 1 pfd dwFlags PFD DRAW TO WINDOW PFD SUPPORT OPENGL PFD DOUBLEBUFFER pfd iPixelType PFD TYPE RGBA pfd cColorBits 24 pfd cDepthBits 16 pfd iLayerType PFD MAIN PLANE iFormat ChoosePixelFormat hDC SetPixelFormat hDC iFormat create and enable the render context RC hRC wglCreateContext hDC wglMakeCurrent hDC hRC 选入绘图设备 void DisableOpenGL HWND hWnd HDC hDC HGLRC hRC wglMakeCurrent NULL NULL 取回绘图设备 wglDeleteContext hRC ReleaseDC hWnd hDC 11 void initview 取绘图设备 GLfloat light ambient 0 1 0 1 0 1 1 0 环境光颜色 GLfloat light diffuse 0 3 0 3 0 3 1 0 漫反射光颜色 GLfloat light specular 1 1 1 1 0 镜面反射光颜色 GLfloat light position 0 0 10 1 0 glLightfv GL LIGHT0 GL POSITION light position 设置灯光的位置 glLightfv GL LIGHT0 GL AMBIENT light ambient glLightfv GL LIGHT0 GL DIFFUSE light diffuse glLightfv GL LIGHT0 GL SPECULAR light specular glLightf GL LIGHT0 GL SPOT CUTOFF 30 光锥的轴与中 心线的夹角 GLfloat spot direction 0 0 1 0 glLightfv GL LIGHT0 GL SPOT DIRECTION spot direction 定义聚光方向 glLightf GL LIGHT0 GL SPOT EXPONENT 10 控制光的集中程度 glEnable GL LIGHTING 设置灯光有效 glEnable GL LIGHT0 设置第一个灯光有效 initMaterial int j for j 0 j stripeImageWidth j stripeImage 3 j 0 stripeImage 3 j 1 255 6 j stripeImage 3 j 2 255 for j 0 j 3 j cpoint j 1 0 3 cos j 3 1416 3 3 1416 6 cpoint j 1 1 3 sin j 3 1416 3 3 1416 6 cpoint j 1 2 0 glDepthFunc GL LESS 设置 Z 缓冲有效 glEnable GL CULL FACE glEnable GL AUTO NORMAL 设置自动化法向量有效 glEnable GL NORMALIZE glFrontFace GL CW glCullFace GL BACK glShadeModel GL FLAT 设置渲染方式为平面方式 int w 600 h 600 glViewport 0 0 w h glMatrixMode GL PROJECTION 设置矩阵方式 glLoadIdentity gluPerspective 60 1 3 50 设置投影方式为透视投影方式 取景角 60 度 glMatrixMode GL MODELVIEW glLoadIdentity 12 void initMaterial 设置对象的材质 glDisable GL TEXTURE 1D GLfloat mat ambient 0 8 0 0 9 1 0 GLfloat mat diffuse 0 8 0 0 9 1 0 GLfloat mat specular 0 7 0 7 0 7 1 0 GLfloat mat shininess 10 glMaterialfv GL FRONT GL AMBIENT mat ambient 设置材质的环境光颜色 glMaterialfv GL FRONT GL DIFFUSE mat diffuse 设置材质的漫反射光颜色 glMaterialfv GL FRONT GL SPECULAR mat specular 设置材质的镜反光颜 色 glMaterialfv GL FRONT GL SHININESS mat shininess 设置材质的镜反光的 强度 void draw glPushMatrix glTranslatef 3 0 10 目标分别沿三个轴向平移的偏移量 glRotatef 30 1 0 0 表示目标沿 X 轴逆时针旋转 30 度 glRotatef 50 0 1 0 表示目标沿 Y 轴逆时针旋转 50 度 GLUquadricObj aa gluNewQuadric 画二次曲面 gluCylinder aa 0 5 1 1 10 10 画二次曲面 圆台 顶径为 底径为 高底的细分数分别为 30 30 gluSphere aa 3 30 30 画二次曲面 球 直径为 3 UW 方向的细分数分别为 30 30 gluDeleteQuadric aa glPopMatrix initMaterial glLineWidth 1 glBegin GL LINE STRIP 设置为连续画直线 glColor3f 1 0f 0 0f 0 0f glVertex3f 0 0 0 glColor3f 0 0f 1 0f 0 0f glVertex3f 1 0 0 glColor3f 0 0f 0 0f 1 0f glVertex3f 2 2 0 glColor3f 0 0f 0 0f 1 0f glVertex3f 3 3 0 glEnd berzer curve set texture1d berzer surface

温馨提示

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

评论

0/150

提交评论