计算机图形学实验报告孙舸Word文档下载推荐.docx

上传人:b****5 文档编号:21527867 上传时间:2023-01-31 格式:DOCX 页数:23 大小:1.02MB
下载 相关 举报
计算机图形学实验报告孙舸Word文档下载推荐.docx_第1页
第1页 / 共23页
计算机图形学实验报告孙舸Word文档下载推荐.docx_第2页
第2页 / 共23页
计算机图形学实验报告孙舸Word文档下载推荐.docx_第3页
第3页 / 共23页
计算机图形学实验报告孙舸Word文档下载推荐.docx_第4页
第4页 / 共23页
计算机图形学实验报告孙舸Word文档下载推荐.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

计算机图形学实验报告孙舸Word文档下载推荐.docx

《计算机图形学实验报告孙舸Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告孙舸Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。

计算机图形学实验报告孙舸Word文档下载推荐.docx

一、实验目的-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<

GL/glut.h>

//glut.hincludesgl.handglu.h

voiddisplay()

{……}

voidinit()

intmain(intargc,char**argv)

{……}

三、实验内容:

1.了解程序中各个结构的功能;

2.了解用OpenGL绘制点、线、三角形及多边形;

3.绘制一个绿色的三角形。

四、实验步骤及结果:

1.导入OpenGL的glut32.lib和glut.h文件:

将.lib文件存放到C语言程序文件夹的Library下,.h文件放到Include下;

导入应用程序扩展文件glut32.dll,存放到system文件夹下;

2.打开VC6.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()

1.用OpenGL生成点、线;

2.用OpenGL生成多边形。

1.打开VC6.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)

voidmymouse(GLintbtn,GLintstate,GLintx,GLinty)

其中btn的值可能是GLUT_LEFT_BUTTON、GLUT_MIDDLE_BUTTON、GLUT_RIGHT_BUTTON,表示哪个按钮导致了事件发生;

state表示相应按钮的状态:

GL_UP,GL_DOWN;

x,y表示在窗口中的位置。

3.键盘的应用

glutKeyboardFunc(mykey)

voidmykey(GLubytekey,GLintx,GLinty)

返回键盘上被按下键的ASCII码和鼠标位置。

注意在GLUT中并不把释放键做为一个事件。

1.用OpenGL生成一个三角形;

2.在三角形的基础上实现多边形形成圆的过程,用鼠标左键增加边数,鼠标右键减少边数;

3.在上述基础上实现用键盘“q”或“Q”控制图形窗口的关闭。

1.打开VC6.0,新建名为sun3的工程文件,在工程内新建名为sun3.cpp的源文件;

实验四图形基本变换

1.了解OpenGL下图形窗口的坐标表示;

2.掌握图形坐标的矩阵变换运算方法;

4.了解OpenGL中封装好的图形变换函数;

3.能运用坐标的矩阵算法对图形进行伸缩、对称、错切变换。

1.空间图形的矩阵表示

若用一个行向量[x1x2…xn]表示n维空间中一个点坐标,那么n维空间中m个点坐标就可以表示为一个向量集合:

2.图形变换

图形变换可以通过对表示图形坐标的矩阵进行运算来实现,称为矩阵变换法。

矩阵变换法的一般形式:

(1)伸缩变换

当a=d,图形沿x方向和y方向等比例缩放;

当a=d>

1,图形沿x、y方向等比例放大;

当0<

a=d<

1,图形沿x、y方向等比例缩小。

(2)对称变换

和伸缩变换相似,如:

关于x轴对称:

(3)错切变换

在OpenGL下绘制一个基本图形三角形,并实现该图形的伸缩、对称、错切变换,其中伸缩通过键盘的“f”和“s”键控制。

1.打开VC6.0,新建名为sun4的工程文件,并新建名为sun4.cpp的源文件;

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(),提供了创建定位照相机所用的模型-视图矩阵的简单方法。

注意在设置中需要一个向上的方向初始化,即上载单位阵也可以与模型变换复合在一起。

例如:

平行于轴的立方体的等角投影

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.打开VC6.0,新建名为sun5的工程文件,并新建名为sun5.cpp的源文件;

3.程序运行结果。

(1):

控制键盘方向键对图形进行变换

实验六三维图形生成及显示

(二)

1.了解OpenGL下生成光照模型的方法;

2.学会在OpenGL中创建光源,对3D图形进行明暗处理。

1.简单光照明模型

模拟物体表面的光照明物理现象的数学模型-光照明模型。

简单光照明模型只考虑光源对物体的直接光照。

Phong光照明模型:

简单光照明模型模拟物体表面对光的反射作用,光源为点光源。

反射作用分为镜面反射(SpecularReflection)和漫反射(DiffuseReflection),物体间作用用环境光(AmbientLight)表示

Phong模型的实现:

对物体表面上的每个点P,均需计算光线的反射方向。

为了减少计算量,假设:

光源在无穷远处,L为常向量,视点在无穷远处,V为常向量,(H•N)近似(R•V),H为L与V的平分向量,对所有的点总共只需计算一次H的值,节省了计算时间。

示例:

增量式光照明模型:

在每个多边形顶点处计算光照明强度或参数,然后在各个多边形内部进行双线性插值,得到多边形光滑均匀颜色分布。

两个主要算法:

双线性光强插值、Gouraud明暗处理;

双线性法向插值、Phong明暗处理。

2.局部光照明模型

从光电学知识和物体微平面假设出发,介绍镜面反射与物体材质有关的普遍局部光照明模型。

局部光照明模型表示:

物体表面反射光强,表示环境光的影响。

最后一项是考虑了物体表面性质后的反射光强度量,是该局部光照明模型的复杂性与普遍性所在。

简单与局部模型比较:

3.纹理及纹理映射

解决计算机生成真实感图象缺乏现实物体表面细节的问题。

纹理映射是把纹理图象值映射到三维物体的表面的技术。

纹理映射的问题:

改变物体的属性,可以产生纹理的效果,对简单光照明模型而言,改变漫反射系数来改变物体的颜色;

改变物体表面的法向量。

映射方法:

建立物体空间坐标(x,y,z)和纹理空间坐标(u,v)之间的对应关系,对物体表面进行参数化,反求出物体表面的参数后,根据(u,v)得到该处的纹理值,并用此值取代光照明模型中的相应项,实现纹理映射。

2.在生成的球体上加入光源,并改变光照类型。

1.打开VC6.0,新建名为sun6的工程文件,并新建名为sun6.cpp的源文件;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1