




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机图形学实验报告姓名: 学号: 班级: 目录实验一 OpenGL程序结构练习3实验二 基本图形生成6实验三 交互式控制9实验四 图形基本变换12实验五 三维图形生成及显示15实验六 三维图形生成及显示19实验一 OpenGL程序结构练习【实验目的】1. 熟悉C语言环境下OpenGL的使用方法;2. 了解OpenGL程序的基本结构。【实验原理】绝大多数OpenGL程序具有类似的结构,包含下述函数 main():定义回调函数,打开一个或多个具有指定属性的窗口,进入事件循环(最后一条可执行语句)init():设置状态变量、视图、属性、回调、显示函数、输入和窗口函数 #include / glut
2、.h includes gl.h and glu.hvoid display() void init() int main( int argc, char *argv) 【实验内容】1.了解程序中各个结构的功能;2.用OpenGL生成三角形。【实验步骤及结果】1.导入OpenGL的glut32.lib和glut.h文件:将.lib文件存放到C语言程序文件夹的Library下,.h文件放到Include下;导入应用程序扩展文件glut32.dll,存放到system文件夹下。2.打开VC 6.0,新建工程,并命名为text1,如图1.图 13.在工程text1下新建源文件,并命名为text1.c
3、pp。4.编写代码并编译链接,如图2所示。图 25.运行,结果如图3所示。图 3实验二 基本图形生成【实验目的】1.熟悉OpenGL的程序结构,并了解各部分的功能。2.学会应用OpenGL语言绘制出点,线,多边形。【实验原理】1. GLUT函数glutInit使得应用程序可以获取命令行参数并初始化系统。glutInitDisplayMode设置窗口的属性、RGB颜色、单缓冲区 、属性按照逻辑或组合在一起。glutWindowSize 以像素为单位定义窗口的尺寸。glutWindowPosition 定义窗口左上角在显示器上的位置。glutCreateWindow创建窗口,标题来自于参数值。gl
4、utDisplayFunc定义显示回调函数。glutMainLoop进入无穷的事件循环。2. 变换与视图在OpenGL中投影是利用投影矩阵乘法(变换)进行的,由于只存在一个变换函数系列,因此必须先设置矩阵模式。glMatrixMode(GL_PROJECTION)变换函数是累加在一起的,因此需要从单位阵开始,然后把它改变为一个投影矩阵以定义视景体。3. OpenGL的基本几何形状在display模块下采用glBegin()调用,如:glBegin(GL_POLYGON)既是调用多边形绘制方式。4. 颜色与状态颜色的每个分量在帧缓冲区中是分开存贮的,在缓冲区中通常每个分量占用8位字节。注意在函数
5、glColor3f中颜色的变化范围是从0.0(无)1.0(全部), 而在glColor3ub中颜色值的变化范围是从0到255。在OpenGL程序中,由glColor*设置的颜色成为状态的一部分,后续构造过程将使用这一颜色,直至它被修改为止。颜色与其它属性不是对象的一部分,但是在渲染对象时,要把这些属性赋给对象,可以按下述过程创建具有不同颜色的顶点 glColor()glVertex()glColor()glVertex()【实验内容】1.用OpenGL生成点、线。2.用OpenGL生成多边形。【实验步骤及结果】1.打开VC 6.0,新建名为text2的工程文件,并新建名为text2.cpp的源
6、文件。2.编写代码,编译并链接,如图1所示。图 13.运行,结果如图2所示。图 2 实验三 交互式控制【实验目的】1. 了解OpenGL中交互式控制的原理。2. 学会运用OpenGL程序实现鼠标和键盘对图形及窗口的控制。【实验原理】1. GLUT中的回调函数GLU识别在各种窗口系统(Windows, X, Macintosh)中都有的一组事件:glutDisplayFunc /显示功能glutMouseFunc /鼠标功能glutReshapeFunc /重置形状功能glutKeyboardFunc /键盘功能glutIdleFunc /闲置停顿功能glutMotionFunc /动作请求功能
7、glutPassiveMotionFunc /被动请求功能2. 鼠标回调函数glutMouseFunc(mymouse) void mymouse(GLint btn, GLint state, GLint x, GLint y) 其中btn的值可能是GLUT_LEFT_BUTTON、GLUT_MIDDLE_BUTTON、 GLUT_RIGHT_BUTTON,表示哪个按钮导致了事件发生;state表示相应按钮的状态: GL_UP, GL_DOWN ;x, y表示在窗口中的位置。3. 键盘的应用glutKeyboardFunc(mykey)void mykey(GLubyte key, GLin
8、t x, GLint y)返回键盘上被按下键的ASCII码和鼠标位置。注意在GLUT中并不把释放键做为一个事件。 【实验内容】1.用OpenGL生成一个多边形。2.在多边形的基础上实现用鼠标控制图形窗口的切换,并且能通过鼠标控制变换图形颜色。3.在上述基础上实现用键盘控制图形窗口的关闭。【实验步骤及结果】1.打开VC 6.0,新建名为text3的工程文件,在工程内新建名为text3.cpp的源文件。2.编写代码,编译并链接,如图1所示。图 13.程序运行结果如下:附:鼠标控制方式如图2所示:鼠标左键控制显示display2的螺帽状图形,右键控制显示display1的矩形。图 2在display
9、1中,定义for循环和n的整型变量,实现矩形颜色的变化,如图3所示:n=7时,即可实现8种颜色的变换,在颜色上调用glCoclor3fv(coclorn)定义显示的颜色。图 3键盘控制方式:当键入Q或q时,图形显示窗口关闭运行结果: 实验四 图形基本变换【实验目的】1.了解OpenGL下图形窗口的坐标表示;2.掌握图形坐标的矩阵运算方法;3.能运用坐标的矩阵算法对图形进行伸缩、对称、错切变换。【实验原理】1.空间图形的矩阵表示若用一个行向量 x1 x2 xn 表示n维空间中一个点 坐标,那么n维空间中m个点坐标就可以表示为一个向量 集合:2. 图形变换图形变换可以通过对表示图形坐标的矩阵进行运
10、算来实现,称为矩阵变换法。矩阵变换法的一般形式:(1)伸缩变换当a=d,图形沿x方向和y方向等比例缩放;当a=d1,图形沿x、y方向等比例放大;当0a=d1,图形沿x 、y方向等比例缩小。(2)对称变换和伸缩变换相似,如:关于x轴对称:(3)错切变换【实验内容】在OpenGL下绘制一个基本图形,并实现该图形的伸缩、对称、错切变换。【实验步骤及结果】1.打开VC 6.0,新建名为text4的工程文件,并新建名为text4.cpp的源文件。2.编写代码,编译并链接,如图1所示。图 13. 程序运行结果如图2所示:图 2其中绿色为原图,青蓝色为y=-x对称,黄色为0.6倍缩放后关于x轴对称,红色为x
11、方向错切。实验五 三维图形生成及显示【实验目的】1.了解OpenGL下3D图形生成的原理;2.学会运用OpenGL生成简单的三维图形。【实验原理】1. OpenGL中的照相机在OpenGL中,初始的世界标架和照相机标架相同初始的模型视图矩阵是单位阵照相机位于原点,并指向z轴的负向;OpenGL也指定了默认的视景体,它是一个中心在原点的边长为2的立方体。缺省的投影矩阵是单位阵。移动照相机:可以利用一系列旋转和平移把照相机定位到任意位置。 例如,为了得到侧视图:旋转照相机: R;把照相机从原点移开: T;模型视图矩阵C = TR。注意最后指定的变换是最先被应用的变换glMatrixMode(GL_
12、MODELVIEW);glLoadIdentity();glTranslated(0.0, 0.0, -d);glRotated(-90.0, 0.0, 1.0, 0.0);2. 视图定位矩阵LookAt()函数:在GLU库中包含了函数gluLookAt(),提供了创建定位照相机所用的模型视图矩阵的简单方法。注意在设置中需要一个向上的方向初始化,即上载单位阵也可以与模型变换复合在一起。例如:平行于轴的立方体的等角投影glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(1.,1.,1.,0.,0.,0.,0.,1.,0.);3.投影变换投影
13、变换 投影变换就是定义一个可视空间,可视空间以外的物体不会被绘制到屏幕上。(注意,从现在起,坐标可以不再是-1.0到1.0了!) OpenGL支持两种类型的投影变换,即透视投影和正投影。投影也是使用矩阵来实现的。如果需要操作投影矩阵,需要以GL_PROJECTION为参数调用glMatrixMode()函数。即为: glMatrixMode(GL_PROJECTION); 通常,我们需要在进行变换前把当前矩阵设置为单位矩阵。 glLoadIdentity(); 透视投影所产生的结果类似于照片,有近大远小的效果,比如在火车头内向前照一个铁轨的照片,两条铁轨似乎在远处相交了。【实验内容】1.用Op
14、enGL生成一个球体;2.为了便于观察,在程序中加入交互式控制模式,可以通过鼠标或键盘控制图形的变化。【实验步骤及结果】1.打开VC 6.0,新建名为text5的工程文件,并新建名为text5.cpp的源文件。2.编写代码,编译并链接,如图1所示。图 13. 程序运行结果如图2所示:图 24.控制键盘方向键对图形进行变换,如图3所示图 3实验六 三维图形生成及显示【实验目的】1.了解OpenGL下生成光照模型的方法;2.学会在OpenGL中创建光源,对3D图形进行明暗处理。【实验原理】1. 简单光照明模型模拟物体表面的光照明物理现象的数学模型光照明模型。简单光照明模型只考虑光源对物体的直接光照
15、。Phong光照明模型:简单光照明模型模拟物体表面对光的反射作用,光源为点光源。反射作用分为镜面反射(Specular Reflection)和漫反射(Diffuse Reflection),物体间作用用环境光(Ambient Light)表示Phong模型的实现:对物体表面上的每个点P,均需计算光线的反射方向。为了减少计算量,假设:光源在无穷远处,L为常向量,视点在无穷远处,V为常向量,(HN)近似(RV),H为L与V的平分向量,对所有的点总共只需计算一次H的值,节省了计算时间。示例:增量式光照明模型:在每个多边形顶点处计算光照明强度或参数,然后在各个多边形内部进行双线性插值,得到多边形光滑
16、均匀颜色分布。两个主要算法:双线性光强插值、Gouraud明暗处理;双线性法向插值、Phong明暗处理。2. 局部光照明模型从光电学知识和物体微平面假设出发,介绍镜面反射与物体材质有关的普遍局部光照明模型。局部光照明模型表示:物体表面反射光强,表示环境光的影响。最后一项是考虑了物体表面性质后的反射光强度量,是该局部光照明模型的复杂性与普遍性所在。简单与局部模型比较:3. 纹理及纹理映射解决计算机生成真实感图象缺乏现实物体表面细节的问题。纹理映射是把纹理图象值映射到三维物体的表面的技术。纹理映射的问题:改变物体的属性,可以产生纹理的效果,对简单光照明模型而言,改变漫反射系数来改变物体的颜色;改变物体表面的法向量。映射方法:建立物体空间坐标(x,y,z)和纹理空间坐标(u,v)之间的对应关系,对物体表面进行参数化,反求出物体表面的参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甲方竞选发言稿
- 协会发言稿范文
- 合理膳食知识培训
- 蝴蝶儿童舞蹈课件
- 愿望体验动力课件
- 二零二五年度宾馆会议室租赁合同书-商务会议室租赁及多媒体服务合同
- 二零二五版特种光纤光缆采购合同范本
- 二零二五年抵押车借款及车辆检测服务合同样本
- 2025拆除违章建筑与安全风险评估合同
- 二零二五年电商代运营产品上架与销售策略合同
- 2025年民生民情考试试题及答案
- 中外航海文化知到课后答案智慧树章节测试答案2025年春中国人民解放军海军大连舰艇学院
- 学校食堂保洁服务方案(技术标)
- 输血反应应急预案完整版课件
- 续贷款申请书范文
- 兼职音乐教师合同范例
- 小孩上户口民族不一致委托书
- 科研项目管理质量承诺
- 《妊娠合并阑尾炎》课件
- 21、学生饮用奶食品安全应急预案
- 心肺复苏术课件2024新版
评论
0/150
提交评论