资源下载地址:https://download.csdn.net/download/sheziqiong/85628081
实验的目的和要求
在模型变换实验的基础上,掌握以下实验内容OpenGL设置中三维观察、透视投影和正交投影的参数,并使用键盘移动观察相机在透视投影和正交投影之间切换,以验证课程中三维观察的内容;
进一步加深对OpenGL理解和应用三维坐标和矩阵变换。
实验内容及原理
使用Visual Studio C 编译现有项目,修改代码生成以下图形:
添加键盘对茶壶的控制主要是茶壶沿桌面的平移操作(如下图所示的绿色和蓝色标记)和茶壶绕轴旋转操作(如下图所示的红色标记);按钮为:l, j, I, k, e。参考答案中的操作指南可以查看具体的对应关系。
主要仪器设备
Visual Studio C
glut.zip
Ex3-vs2010 工程
操作方法和实验步骤
键盘操作:视角设置与桌子平移
首先先在updateView()函数中设置的‘P操作后转换为透视投影部分:使用gluPerspective()函数:
修改此处的代码:
下面修改key()对于每个按钮在函数中的操作,首先角的移动,然后修改茶壶的移动:
借助提示中给出的数组eye[]和center[]参数结合后面出现的参数gluLookAt()函数可以确定每个参数对应的变化:
void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); 该函数定义视图矩阵,并乘以当前矩阵。第一组eyex, eyey,eyez 表示相机在世界坐标的位置;第二组centerx,centery,centerz世界坐标位置表示相机镜头对准的物体;第三组upx,upy,upz 世界坐标中相机向上的方向。因此,在桌子平移操作过程中,只需调整相应的eye值(相机世界坐标)和center值(物体世界坐标)即可。
键盘操作:茶壶的坐标设置和茶壶的运动
基本上,桌子的整体运动操作已经确定。让我们注意茶壶的固定位置和运动操作。首先,根据提示,我们应该在整体变量中设置一些与茶壶位置相关的变量和判断状态的布尔量:
teapot数组存储位置,tAnim仿照bAnim,判断是否控制转动值。fRotateT仿照fRotate,是控制茶壶旋转的参数。
为了使茶壶和桌子分开运动,在绘制过程中(即Draw_Scene()函数中)需要进行相应的调整和修改:将平移设置为新茶壶的相对设置glRotatef函数。
然后到key()补充函数中茶壶运动的操作:
最后,在redraw()相关茶壶的旋转控制转控制:
记录和处理实验数据
关于数据的选择,我基本上是盲目地设置一个相似的值,然后跑起来看一看。看完后,调整数据,直到它看起来几乎一样。例如,控制茶壶不移除桌面部分,这是通过估计的方法来看的。原因是懒得看具体的桌子长度参数,所以猜猜。另一个例子是,茶壶的相对位置根据原项目中的数据而变化。
实验结果及分析
正投影,只能上下左右移动,不能前后移动。后面会分析原因。
透视投影,旋转调整后的某个位置。
茶壶单独旋转到一定位置,透视投影,线框模式。
茶壶的平移
讨论、心得
调用整数调用步骤(main函数的安排)
初始显示模式-初始窗口大小-绘图-自适应屏幕窗口函数-键盘回调函数-全局回调函数-事件处理循环
探讨正交投影前后平移无效的原因
正交投影的效果可以理解为三视图的主视图(正面),结合下图回顾项目的编写:
从正交角度看,沿z方向平移时看不到。
资源下载地址:https://download.csdn.net/download/sheziqiong/85628081