(2)对称变换
和伸缩变换相似,如:
关于x轴对称:
(3)错切变换
三、实验内容:
在OpenGL下绘制一个基本图形三角形,并实现该图形的伸缩、对称、错切变换,其中伸缩通过键盘的“f”和“s”键控制。
四、实验步骤及结果:
1.打开VC6.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.打开VC6.0,新建名为sun5的工程文件,并新建名为sun5.cpp的源文件;
2.编写代码,编译并链接;
3.程序运行结果。
(1):
(2):
控制键盘方向键对图形进行变换
实验六三维图形生成及显示
(二)
一、实验目的:
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)得到该处的纹理值,并用此值取代光照明模型中的相应项,实现纹理映射。
三、实验内容:
1.用OpenGL生成一个球体;
2.在生成的球体上加入光源,并改变光照类型。
四、实验步骤及结果:
1.打开VC6.0,新建名为sun6的工程文件,并新建名为sun6.cpp的源文件;
2.编写代码,编译并链接;
3.程序运行结果。