计算机图形学实验报告.doc_第1页
计算机图形学实验报告.doc_第2页
计算机图形学实验报告.doc_第3页
计算机图形学实验报告.doc_第4页
计算机图形学实验报告.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

计算机图形学实验报告姓名:孙舸学号:201211106134班级:电信121实验时间:2015.10.1-2015.12.21目 录实验一 opengl程序结构练习- 4 -一、实验目的- 4 -二、实验原理- 4 -三、实验内容- 5 -四、实验步骤及结果- 5 -实验二 基本图形生成- 8 -一、实验目的- 8 -二、实验原理- 8 -三、实验内容- 10 -四、实验步骤及结果- 10 -实验三 交互式控制- 13 -一、实验目的- 13 -二、实验原理- 13 -三、实验内容- 14 -四、实验步骤及结果- 14 -实验四 图形基本变换- 16 -一、实验目的- 16 -二、实验原理- 16 -三、实验内容- 17 -四、实验步骤及结果- 18 -实验五 三维图形生成及显示(一)- 21 -一、实验目的- 21 -二、实验原理- 21 -三、实验内容- 23 -四、实验步骤及结果- 23 -实验六 三维图形生成及显示(二)- 26 -一、实验目的- 26 -二、实验原理- 26 -三、实验内容- 28 -四、实验步骤及结果- 28 -实验一 opengl程序结构练习一、实验目的:1. 熟悉c语言环境下opengl的使用方法;2. 了解opengl程序的基本结构;3. 学习绘制一些基本的图形。二、实验原理:绝大多数opengl程序具有类似的结构,包含下述函数 main():定义回调函数,打开一个或多个具有指定属性的窗口,进入事件循环(最后一条可执行语句)init():设置状态变量、视图、属性、回调、显示函数、输入和窗口函数 #include / glut.h includes gl.h and glu.hvoid display() void init() int main( int argc, char *argv) 三、实验内容:1.了解程序中各个结构的功能;2.了解用opengl绘制点、线、三角形及多边形;3绘制一个绿色的三角形。四、实验步骤及结果:1.导入opengl的glut32.lib和glut.h文件:将.lib文件存放到c语言程序文件夹的library下,.h文件放到include下;导入应用程序扩展文件glut32.dll,存放到system文件夹下;2.打开vc 6.0,新建工程,并命名为sun1;3.在工程sun1下新建源文件,并命名为sunge.cpp;4.编写代码并编译链接;5.运行结果。选择界面实验二 基本图形生成一、实验目的:1.熟悉opengl的程序结构,并了解各部分的功能;2.学会应用opengl语言绘制出点,线,多边形。二、实验原理:1. glut函数glutinit使得应用程序可以获取命令行参数并初始化系统。glutinitdisplaymode设置窗口的属性、rgb颜色、单缓冲区 、属性按照逻辑或组合在一起。glutwindowsize 以像素为单位定义窗口的尺寸。glutwindowposition 定义窗口左上角在显示器上的位置。glutcreatewindow创建窗口,标题来自于参数值。glutdisplayfunc定义显示回调函数。glutmainloop进入无穷的事件循环。2. 变换与视图在opengl中投影是利用投影矩阵乘法(变换)进行的,由于只存在一个变换函数系列,因此必须先设置矩阵模式。glmatrixmode(gl_projection)变换函数是累加在一起的,因此需要从单位阵开始,然后把它改变为一个投影矩阵以定义视景体。3. opengl的基本几何形状在display模块下采用glbegin()调用,如:glbegin(gl_polygon)既是调用多边形绘制方式。4. 颜色与状态颜色的每个分量在帧缓冲区中是分开存贮的,在缓冲区中通常每个分量占用8位字节。注意在函数glcolor3f中颜色的变化范围是从0.0(无)1.0(全部), 而在glcolor3ub中颜色值的变化范围是从0到255。在opengl程序中,由glcolor*设置的颜色成为状态的一部分,后续构造过程将使用这一颜色,直至它被修改为止。颜色与其它属性不是对象的一部分,但是在渲染对象时,要把这些属性赋给对象,可以按下述过程创建具有不同颜色的顶点 glcolor()glvertex()glcolor()glvertex()三、实验内容:1.用opengl生成点、线;2.用opengl生成多边形。四、实验步骤及结果:1.打开vc 6.0,新建名为sun2的工程文件,并新建名为sun.cpp的源文件;2.编写代码,编译并链接;3.运行结果。(1):选择界面(2):(3):实验三 交互式控制一、实验目的:1. 了解opengl中交互式控制的原理;2. 学会运用opengl程序的回调函数实现鼠标和键盘操作的响应。二、实验原理:1. glut中的回调函数glu识别在各种窗口系统(windows, x, macintosh)中都有的一组事件:glutdisplayfunc /显示功能glutmousefunc /鼠标功能glutreshapefunc /重置形状功能glutkeyboardfunc /键盘功能glutidlefunc /闲置停顿功能glutmotionfunc /动作请求功能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, glint x, glint y)返回键盘上被按下键的ascii码和鼠标位置。注意在glut中并不把释放键做为一个事件。 三、实验内容:1.用opengl生成一个三角形;2.在三角形的基础上实现多边形形成圆的过程,用鼠标左键增加边数,鼠标右键减少边数;3.在上述基础上实现用键盘“q”或“q”控制图形窗口的关闭。四、实验步骤及结果:1.打开vc 6.0,新建名为sun3的工程文件,在工程内新建名为sun3.cpp的源文件;2.编写代码,编译并链接;3.运行结果。 实验四 图形基本变换一、实验目的:1.了解opengl下图形窗口的坐标表示;2.掌握图形坐标的矩阵变换运算方法;4了解opengl中封装好的图形变换函数;3.能运用坐标的矩阵算法对图形进行伸缩、对称、错切变换。二、实验原理:1.空间图形的矩阵表示若用一个行向量 x1 x2 xn 表示n维空间中一个点 坐标,那么n维空间中m个点坐标就可以表示为一个向量 集合:2. 图形变换图形变换可以通过对表示图形坐标的矩阵进行运算来实现,称为矩阵变换法。矩阵变换法的一般形式:(1)伸缩变换当a=d,图形沿x方向和y方向等比例缩放;当a=d1,图形沿x、y方向等比例放大;当0a=d1,图形沿x 、y方向等比例缩小。(2)对称变换和伸缩变换相似,如:关于x轴对称:(3)错切变换三、实验内容:在opengl下绘制一个基本图形三角形,并实现该图形的伸缩、对称、错切变换,其中伸缩通过键盘的“f”和“s”键控制。四、实验步骤及结果:1.打开vc 6.0,新建名为sun4的工程文件,并新建名为sun4.cpp的源文件;2.编写代码,编译并链接;4. 程序运行结果。选择界面原图:放大:显示原图的2.0倍伸缩变换缩小:显示原图的0.5倍伸缩变换其中绿色为原图,青蓝色为y=-x对称,黄色为0.6倍缩放后关于x轴对称,红色为x方向错切。实验五 三维图形生成及显示(一)一、实验目的:1.了解opengl下3d图形生成的原理;2.学会运用opengl生成简单的三维图形。二、实验原理:1. opengl中的照相机在opengl中,初始的世界标架和照相机标架相同初始的模型视图矩阵是单位阵照相机位于原点,并指向z轴的负向;opengl也指定了默认的视景体,它是一个中心在原点的边长为2的立方体。缺省的投影矩阵是单位阵。移动照相机:可以利用一系列旋转和平移把照相机定位到任意位置。 例如,为了得到侧视图:旋转照相机: r;把照相机从原点移开: t;模型视图矩阵c = tr。注意最后指定的变换是最先被应用的变换glmatrixmode(gl_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.投影变换投影变换 投影变换就是定义一个可视空间,可视空间以外的物体不会被绘制到屏幕上。(注意,从现在起,坐标可以不再是-1.0到1.0了!) opengl支持两种类型的投影变换,即透视投影和正投影。投影也是使用矩阵来实现的。如果需要操作投影矩阵,需要以gl_projection为参数调用glmatrixmode()函数。即为: glmatrixmode(gl_projection); 通常,我们需要在进行变换前把当前矩阵设置为单位矩阵。 glloadidentity(); 透视投影所产生的结果类似于照片,有近大远小的效果,比如在火车头内向前照一个铁轨的照片,两条铁轨似乎在远处相交了。三、实验内容:1.用opengl生成一个球体;2.为了便于观察,在程序中加入交互式控制模式,可以通过鼠标或键盘控制图形的变化;3用opengl绘制一个各个面颜色不同的彩色正方体,并通过鼠标左键控制其旋转。四、实验步骤及结果:1.打开vc 6.0,新建名为sun5的工程文件,并新建名为sun5.cpp的源文件;2.编写代码,编译并链接;3. 程序运行结果。(1):(2):控制键盘方向键对图形进行变换实验六 三维图形生成及显示(二)一、实验目的:1.了解opengl下生成光照模型的方法;2.学会在opengl中创建光源,对3d图形进行明暗处理。二、实验原理:1. 简单光照明模型模拟物体表面的光照明物理现象的数学模型光照明模型。简单光照明模型只考虑光源对物体的直接光照。phong光照明模型:简单光照明模型模拟物体表面对光的反射作用,光源为点光源。反射作用分为镜面反射(specular reflection)和漫反射(diffuse reflection),物体间作用用环境光(ambient light)表示phong模型的实现:对物体表面上的每个点p,均需计算光线的反射方向。为了减少计算量,假设:光源在无穷远处,l为常向量,视点在无穷远处,v为常向量,(hn)近似(rv),h为l与v的平分向量,对所有的点总共只需计算一次h的值,节省了计算时间。示例:增量式光照明模型:在每个多边形顶点处计算光照明强度或参数,然后在各个多边形内部进行双线性插值,得到多边形光滑均匀颜色分布。两个主要算法:双线性光强插值、gouraud明暗处理;双线性法向插值、phong明暗处理。2. 局部光照明模型从光电学知识和物体微平面假设出发,介绍镜面反射与物体材质有关的普遍局部光照明模型。局部光照明模型表示:物体表面反射光强,表示环境光的影响。最后一项是考虑了物体表面性质后的反射光强度量,是该局部光照明模型的复杂性与普遍性所在。简单与局部模型比较:3. 纹理及纹理映射解决计算机生成真实感图象缺乏现实物体表面细节的问题。纹理映射是把纹理图象值映射到三维物体的表面的技术。纹理映射的问题:改变物体的属性,可以产生纹理的效果,对

温馨提示

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

评论

0/150

提交评论