OpenGL实验指导.doc_第1页
OpenGL实验指导.doc_第2页
OpenGL实验指导.doc_第3页
OpenGL实验指导.doc_第4页
OpenGL实验指导.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

计算机图形学实验指导书课程名称:计算机图形学基础英文名称:Computer Graphics课程性质:限选编写人:孔繁茹2010年9月1日计算机学院阅读说明l 未加标注的为参考实验l 标有的为必做实验l 标有的为选做实验实验要求l 每个小组 4人,需要完成以下任务n 所有必做实验(40%)8 * 5分n 2项选做实验(20%)2 * 10分n 1项综合实验(40%)1 * 40分Part 1 预备知识实验1.1环境设置参考程序demo.c图 1.1.1一、实验目的熟悉VC编程环境, 配置OpenGL图形环境二、实验内容1OpenGL环境设置v 将OpenGL所需函数库和头文件复制到指定目录. v 也可以通过批处理文件的方式, 将下面四行存入一文本文件, 改名为set.bat, 然后双击set.bat运行.copy glut.h C:Program FilesMicrosoft Visual StudioVC98IncludeGLcopy glut32.libC:Program FilesMicrosoft Visual StudioVC98Libcopy glut32.dllC:WINDOWSsystem32pause注意: 如果VC安装在D盘或其他盘, 应修改相应路径2编译运行demo.c, 查看环境是否配置成功图 1.1.1Part 2 OpenGL 编程基础实验2.1OpenGL编程基础参考程序hello.c图2.1.1chap2-1.cpp图2.1.2一、实验目的熟悉OpenGL编程框架、基本函数、几何原语二、实验内容1. 运行hello.c, 查看运行结果, 并完成以下练习1) 改变背景颜色2) 改变图形颜色3) 改变窗口大小4) 改变窗口位置2. 用OpenGL几何原语绘制点, 直线, 多边形, 三角形带等基本图形.OpenGL编程基础可参考附录。3. 调用以下函数后绘制出的图形会有什么变化?glPolygonMode(GL_FRONT_AND_BACK, GL_LINE );图2.1.1图2.1.2图2.1.3 三角形带 ( Triangle Strip ) 实验2.2绘制钻石图案一、实验目的掌握直线的绘制方式,了解如何根据窗口的大小设定图形的坐标范围二、实验内容绘制钻石图案: 将一圆周进行n等分,然后将所有的等分用直线连接,构成一幅美丽图案。提示: n=8q =2*p/nX=r*cos(q)Y=r*sin(q)图2.2.1Part 3 交互技术实验3.1事件驱动参考程序framework.c一、实验目的了解事件驱动的工作方式二、实验内容1. 运行范例程序,分析源码。实验3.2双帧缓存及动画参考程序rotate.csingle_double.c一、实验目的了解双帧缓存的工作方式、动画的实现方式及如何创建多个窗口二、实验内容1. 运行范例程序,分析源码。实验3.3XOR模式参考程序gasket4-xor.c 一、实验目的熟悉采用XOR模式进行绘图的方式.二、实验内容1. 运行范例程序,分析源码。OpenGL相关函数glEnable(GL_COLOR_LOGIC_OP)glLogicOp(GL_XOR)glLogicOp(GL_COPY)实验3.4草拟参考程序square.c 一、实验目的了解交互程序的编程方式二、实验内容1. 运行square.c, 查看运行结果, 并完成以下练习1) 改用点绘制,调整点的大小,并观察效果2) 当鼠标中键按下时, 退出系统3) 改变鼠标响应方式,移动鼠标就可以在屏幕上画出一连串小正方形, 无论鼠标键是否按下4) 改变鼠标响应方式,单击左键,移动鼠标(移动鼠标时,不必一直保持左键按下),开始绘图,再次按下左键,绘图停止。 实验3.5橡皮筋参考程序rubberLine.crubberLine-smooth.cchap3-1.cppchap3-2.cpprubberLine.c 运行情况:v 第一次单击左键, 确定直线起始点, 接下来单击左键, 直线以XOR Mode 绘制, 并可以不断调整直线终点. 单击右键, 直线以Copy Mode 绘制, 本条直线绘制结束.rubberLine-smooth.c 运行情况:v 第一次单击左键, 确定直线起始点, 接下来随着鼠标的移动, 直线在屏幕上绘制, 并随着鼠标的移动不断伸缩变化, 再一次单击左键, 本条直线绘制结束.一、实验目的通过橡皮筋的绘制熟悉交互程序的编程方式二、实验内容1. 实现矩形橡皮筋的绘制v 第一次单击左键, 确定矩形左上角起始点, 接下来随着鼠标的移动, 矩形在屏幕上绘制, 并随着鼠标的移动不断伸缩变化, 再一次单击左键, 本矩形绘制结束.2. 实现折线橡皮筋的绘制图3.5.1图3.5.2图3.5.3实验3.6 拾取参考程序pick.c 图3.4.1chap3-3.cpp图3.4.2picksquare.c图3.4.3pickdepth.c图3.4.4一、实验目的了解OpenGL拾取功能的实现方式二、实验内容1. 运行范例程序,分析源码。2. 在屏幕上再绘制一个绿色正方形, 并实现对三个图形对象的拾取。图3.4.1图3.4.5图3.4.3图3.4.2图3.4.4实验3.7 拖动参考程序drag-copy.c drag-xor.c一、实验目的了解拖动的实现方式二、实验内容1. 运行范例程序,分析源码。实验3.8 菜单参考程序paint.c 一、实验目的了解菜单的实现方式二、实验内容1. 运行范例程序,分析源码。实验3.9 模拟跟踪球参考程序trackball.c 一、实验内容1. 运行范例程序,分析源码。Part 4 几何造型技术实验4.1多边形网格 参考程序earth.c图4.1.1bteapot.c图4.1.2一、实验目的了解多边形网格的实现方式, 绘制三角形带, 四边形带, 扇形带v GL_TRIANGLE_STRIPGL_QUAD_STRIPGL_TRIANGLE_FAN二、实验内容1. 运行earth.c, 查看运行结果, 并完成以下练习1) 使网格更加密集2) 每次点击鼠标, 球偏转10度3) 使球体自动旋转,并且单击鼠标左键、右键或中键时,旋转方向将发生改变。图4.1.1图4.1.2实验4.2实体模型 参考程序chap4-1.cpp 一、实验目的了解OpenGL中实体模型的绘制方式二、实验内容1. 在绘图窗口内绘制4个实体模型2. 用鼠标进行拾取实验4.3 显示列表 (Display List)参考程序list.c 图4.3.1list2.c图4.3.2chap4-2.cpp图4.3.3quadric.c图4.3.4一、实验目的了解显示列表的实现方式二、实验内容1. 运行参考程序, 分析程序功能。2. 实现图4.3.5中的效果。图4.3.1图4.3.5图4.3.3图4.3.4图 4.3.2实验4.4绘制分形图: Sierpinski Gasket参考程序gasket.c 图4.4.1gasket2.c图4.4.2gasket3d.c图4.4.3一、实验目的通过示例代码, 熟悉分形图生成的方式。二、实验内容1. 运行范例程序,分析源码。注意: Sierpinski Gasket 绘制原理参考附录B1.图4.4.1图4.4.2图4.4.3实验4.5绘制分形图: 分形树参考程序treeTask.c 图4.5.1一、实验目的了解分形树的绘制方式二、实验内容1. 绘制如图4.5.2 单节点分形树, 树枝左右偏转45度, 0.5分割。2. 绘制如图4.5.3 多节点分形树, 树枝左右偏转60度, 0.618分割。3. 绘制如图4.5.4 带红色果子分形树。4. 绘制如图4.5.5 随机分形树,对左右偏转角度加入随机分量。5. 实现单步绘制提示:先按某一方向画一条直线,然后在此线段上找到一系列节点,在每一节点处向左右偏转一定角度各画一条分枝。节点位置和节点处所画分枝的长度可参考编程要求中的分割比例。图4.5.2图4.5.3图4.5.4图4.5.1图4.5.5 实验4.6绘制分形图: 摇摆分形树参考程序tree-弯曲.c 图4.6.1FractalLeaf.exe一、实验目的了解分形树的绘制方式二、实验内容1. 参考弯曲分形树,控制分行树的形态,实现FractalLeaf.exe 的效果a) 键盘上下键:调整叶子伸展程度b) 键盘左右键:调整叶子弯曲程度2. 参考弯曲分形树,在弯曲分形树的基础上加入动画,使树左右摇摆。3. 在摇摆分形树的基础上加上对鼠标事件的处理, 用户按下左键, 动画开始,再次按下左键, 动画暂停。图4.6.1实验4.7例子系统 参考程序star图4.7.1matrix图4.7.21一、实验目的了解例子系统的实现方法二、实验内容1. 运行范例程序,分析源码。2. 模拟一个爆炸场面,碎片用三角形表示,颜色随机。图4.7.1图4.7.2Par5 基本图形生成算法 实验5.1直线和圆的扫描转换算法验证参考程序DDALine.c一、实验目的验证基本图形生成算法二、实验内容1. 从以下算法中任选一个进行验证v 直线- 中点Bresenham算法v 直线- 改进的Bresenham算法v 圆- 中点Bresenham算法OpenGL相关函数glPointSize(GLfloat size);设置点的宽度, 单位为像素. 实验5.2线型、线宽参考程序stippleLines.c图5.2.1一、实验目的了解线型、线宽的实现方法二、实验内容1. 在直线和圆的扫描转换程序基础上实现线型和线宽。应用像素模板实现线型, 应用线刷子或和方刷子实现线宽。(注意: 自己实现线型线宽算法,而不是直接调用glLineStipple)2. 分别用点和折线模式实现正弦和余弦曲线的绘制。(教材P150 5.29)OpenGL相关函数glEnable(GL_LINE_STIPPLE);glLineStipple(Glint factor, GLushort pattern);factor指定每位连续使用多少次,取值范围1256pattern是由0和1组成的16位数例: glLineStipple(1, 0xFF00);glLineWidth(GLfloat width);width 为直线的宽度, 单位为像素例: glLineWidth(2);图5.2.1实验5.3字体参考程序dwarf.cfont.cstroke.c一、实验目的了解字体的实现方法二、实验内容1. 运行范例程序,分析源码。实验5.4多边形填充参考程序polys.c一、实验目的了解多边形的填充方法二、实验内容1. 运行范例程序,分析源码。Part 6 二维变换及二维观察实验6.1二维变换参考程序二维变换-task.c model.c一、实验目的掌握利用OpenGL实现二维变换的方法二、实验内容1. 完成一个二维变换演示程序,功能如下:v 黑色背景, 绘制正方形v 单击鼠标左键, 正方形 逆时针旋转10度;单击鼠标右键, 正方形 顺时针旋转10度. v 单击鼠标中键, 退出程序v 键入x,沿x轴正向平移;键入X,沿x轴负向平移v 键入y,沿y轴正向平移;键入Y,沿y轴负向平移v 键入z,正方形缩小2倍;键入Z,正方形放大2倍实验6.2窗口和视区 参考程序gasket-viewport.c chp6-2.cpp一、实验目的了解窗口和视区的实现方式二、实验内容1. 对gasket-viewport.c进行程序填空. 需填空处有 Attention 字样. 实现以下功能:v 点击鼠标左键: 窗口不变, 视区变小v 点击鼠标右键: 窗口不变, 视区变大v 按下键盘a 键: 视区不变, 窗口变小v 按下键盘A 键: 视区不变, 窗口变大2. 运行chap6-2.cpp,了解多视区的实现方式。OpenGL相关函数Void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top )Void glViewport ( GLint x, GLint y, GLint w, GLint h ); 实验6.3直线裁减一、实验目的实现直线裁剪算法二、实验内容1. 利用以下三种算法之一进行直线裁减.v Cohen - Sutherland算法v 中点分割算法v Liang-Barsky 算法 实验6.4多边形裁减参考程序SutherHodge.c图6.4.1一、实验目的实现多边形裁剪算法二、实验内容1. 实现 Weiler-Atherton 算法 (双边裁剪算法)图6.4.1 Part 7 三维变换及三维观察实验7.1透视投影三维变换及三维观察参考程序frust.c图7.1.1一、实验目的掌握透视投影的实现方法二、实验内容1. 运行参考程序,并对源代码进行分析。 2. 绘制其他实体模型,实现透视投影。3. 用鼠标或键盘改变投影参数,查看显示结果。 OpenGL相关函数glFrustumgluLookAtglScalef实验7.2视点变换参考程序cubeView.c图7.2.1一、实验目的掌握视点变换的实现方法二、实验内容1. 运行参考程序,并对源代码进行分析。 实验7.3 矩阵堆栈-机器人手臂参考程序robot.c图7.3.1 一、实验目的掌握矩阵堆栈的实现方法二、实验内容1. 运行参考程序,并对源代码进行分析。 2. 请将最后一截蓝色的部分长度缩短一倍。 实验7.4 矩阵堆栈-机器人参考程序figure.c 一、实验内容1. 运行参考程序,并对源代码进行分析。图7.4.1图7.1.1图7.2.1图7.3.1 实验7.5矩阵堆栈-太阳系参考程序planet.c图7.5.1 一、实验目的掌握矩阵堆栈的实现方法二、实验内容1. 请改成地球围绕太阳自动旋转的方式 2. 请再加上一个月亮, 并围绕地球旋转。实现图7.5.2中的效果图7.5.1图7.5.2 实验7.6 拾取和变换 一、实验目的掌握拾取和变换的实现方式二、实验内容1. 在绘图窗口内绘制4个实体模型2. 用鼠标进行拾取3. 用键盘对拾取的模型进行x、y、z三个方向上的旋转变换 实验7.7 三视图一、实验目的掌握三视图的实现方法二、实验内容1. 利用OpenGL中的多视区,分别在4个视区内显示如图7-41所示空间四面体的透视投影图、主视图、俯视图和侧视图。 (教材P228 7.16) 实验7.8 动画参考程序chap7-1.cpp 一、实验目的掌握动画的实现方法二、实验内容1. 创建一个球体动画,使球体在窗口内做自由落体运动,并在撞击地面后能够弹回原来的高度。 (教材P228 7.15) 实验7.9 碰撞检测一、实验目的掌握碰撞检测的实现方法二、实验内容1. 创建一个球体动画,使球体以一个初始速度开始在一个三维封闭空间内运动,当碰到任何一面墙壁, 按反射原理弹开, 然后继续在空间内运动。2. 多个球体在空间内运动,球和球之间碰撞也会弹开。Part 8 曲线曲面实验8.1曲线曲面参考程序bezcurve.cbezmesh.cbezsurf.csurface.cchap8-1.cppchap8-2.cppchap8-4.cpp一、实验目的了解曲线曲面的绘制方式二、实验内容1. 运行范例程序,分析源码。Part 9 消隐实验9.1消隐参考程序chap9-1.cppchap9-2.cpp一、实验目的了解消隐的实现方式二、实验内容1. 运行范例程序,分析源码。Part 10真实感图形生成实验10.1光照模型参考程序chap10-1.cpplight.cmovelight.c一、实验目的了解真实感图形的生成方式二、实验内容1. 绘制OpenGL程序,显示一个圆环,点光源设在圆环的中心位置,通过键盘操作实现光源的移动,观察光源移动时圆环的显示效果。 (教材P315 10.10)实验10.2纹理参考程序checker.c一、实验目的了解真实感图形的生成方式二、实验内容1. 绘制OpenGL程序,绘制一个球面,其表面具有黑白相间的矩形纹理,并使用点光源照射。 (教材P315 10.17)实验10.3材质参考程序material.cteapots.c一、实验目的了解真实感图形的生成方式二、实验内容1. 运行范例程序,分析源码。实验10.4真实感图形生成参考程序colormat.cfog.cPart 11 综合实验注意:以下实验中的可选技术手段为:光照、纹理、阴影实验11.1 简单绘图程序一、实验内容1. 实现点、直线、三角形、矩形、多边形的绘制。2. 必须实现的技术手段: 菜单、网格、橡皮筋、草拟技术、约束、引力域3. 可选技术手段: 拾取、旋转、形变实验11.2 图案变换程序一、实验内容1. 设计一些图形模式(10个以上),使程序在鼠标、键盘的控制下在图形模式之间转换。转换过程中,需要在屏幕上显示粒子的轨迹。2. 可按照随机方式或顺序方式自动进行模式间的转换。实验11.3 游戏一、实验内容1. 从以下题目中选一,也可以自选题目l 二维拼图游戏l 二维迷宫游戏l 二维射击游戏l 贪吃蛇游戏l 小人跳舞附录A1. OpenGL与Windows操作系统之间的库函数层次关系A2. OpenGL几何原语A3. OpenGL几何原语中顶点的指定方式A4. OpenGL常用函数Geometric Primitives DefinitionglBegin(GL_POINTS);glVertex2f(x1, y1);glVertex2f(x2, y2);glEnd( );glBegin(GL_LINES);glVertex2f(x1, y1);glVertex2f(x2, y2);glEnd( );glVertex2i (GLint xi, GLint yi)glVertex3f (GLfloat x, GLfloat y, GLfloat z)GLfloat vertex3glVertex3fv(vertex)OpenGL Geometric PrimitivesGL_POINTSGL_LINES GL_LINE_STRIPGL_LINE_LOOPGL_POLYGONGL_TRIANGLESGL_QUADSGL_TRIANGLE_STRIPGL_QUAD_STRIPGL_TRIANGLE_FANcolorglClearColor(1.0, 1.0, 1.0, 1.0) glColor3f(1.0, 0.0, 0.0)Logic OperationglEnable(GL_COLOR_LOGIC_OP)glLogicOp(GL_XOR)glLogicOp(GL_COPY)Window managementglutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);glutCreateWindow(char *title)glutInitWindowSize(480, 640);glutInitWindowPosition(0, 0);glutMainLoop( );Register callback functionglutDisplayFunc() glutReshapeFunc() glutKeyboardFunc() glutMouseFunc() glutMotionFunc() glutPassiveMotionFunc() glutIdleFunc() ViewglOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far )gluOrtho2D( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top )glViewport(GLint x, GLint y, GLint w, GLint h );glTranslatef(TYPE x, TYPE y, TYPE z);

温馨提示

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

评论

0/150

提交评论