实验5 OpenGL模型视图变换.doc

实验5 OpenGL模型视图变换.doc

ID:51528310

大小:59.69 KB

页数:4页

时间:2020-03-12

实验5 OpenGL模型视图变换.doc_第1页
实验5 OpenGL模型视图变换.doc_第2页
实验5 OpenGL模型视图变换.doc_第3页
实验5 OpenGL模型视图变换.doc_第4页
资源描述:

《实验5 OpenGL模型视图变换.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验5OpenGL模型视图变换1.实验目的理解掌握OpenGL程序的模型视图变换。2.实验内容(1)阅读实验原理,运行示范实验代码,理解掌握OpenGL程序的模型视图变换;(2)根据示范代码,尝试完成实验作业。3.实验原理在OpenGL程序中,视图变换必须出现在模型变换之前,但可以在绘图之前的任何时候执行投影变换和视口变换。(1)定的视图变换之前,应该使用glLoadIdentity()函数把当前矩阵设置为单位矩阵。(2)在载入单位矩阵之后,使用gluLookAt()函数指定视图变换。如果程序没有调用gluLookAt(),那么照相机会设定为一个默认的位置和方向。在默认的情况下,照相机位于原点

2、,指向Z轴负方向,朝上向量为(0,1,0)。(3)一般而言,display()函数包括:视图变换+模型变换+绘制图形的函数(如glutWireCube())。display()会在窗口被移动或者原来先遮住这个窗口的东西被一开时,被重复调用,并经过适当变换,保证绘制的图形是按照希望的方式进行绘制。(4)在调用glFrustum()设置投影变换之前,在reshape()函数中有一些准备工作:视口变换+投影变换+模型视图变换。由于投影变换,视口变换共同决定了场景是如何映射到计算机的屏幕上的,而且它们都与屏幕的宽度,高度密切相关,因此应该放在reshape()中。reshape()会在窗口初次创建,移

3、动或改变时被调用。总结起来,OpenGL中矩阵坐标之间的关系为:物理世界坐标→模型视图矩阵→投影矩阵→透视除法→规范化设备坐标→窗口坐标。(1)视图变换函数gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0,)设置照相机的位置把照相机放在(0,0,5),镜头瞄准(0,0,0),朝上向量定为(0,1,0)朝上向量为照相机指定了一个唯一的方向。如果没有调用gluLookAt,照相机就设定一个默认的位置和方向,在默认情况下,照相机位于原点,指向Z轴的负方向,朝上向量为(0,1,0)glLoadIdentity()函数把当前矩阵设置为单位矩阵。(2)使用模型变换

4、的目的是设置模型的位置和方向(3)投影变换,指定投影变换类似于为照相机选择镜头,可以认为这种变换的目的是确定视野,并因此确定哪些物体位于视野之内以及他们能够被看到的程度。除了考虑视野之外,投影变换确定物体如何投影到屏幕上,OpenGL提供了两种基本类型的投影:①透视投影:远大近小;②正投影:不影响相对大小,一般用于建筑和CAD应用程序中(4)视口变换。视口变换指定一个图象在屏幕上所占的区域(5)绘制场景4.实验代码#include#includestaticintyear=0,day=0,day1=0;voidinit(void){glClearCol

5、or(0.0,0.0,0.0,0.0);glShadeModel(GL_FLAT);}voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,1.0,1.0);glPushMatrix();glutWireSphere(1.0,20,16);//太阳glRotatef((GLfloat)year,0.0,1.0,0.0);glPushMatrix();glTranslatef(1.5,0.0,0.0);glRotatef((GLfloat)day,0.0,1.0,0.0);glutWireSphere(0.2,10,8);//火

6、星glPopMatrix();glPushMatrix();glTranslatef(2.5,0.0,0.0);glRotatef((GLfloat)day,0.0,1.0,0.5);glutWireSphere(0.2,10,8);//地球glTranslatef(0.5,0.0,0.0);glRotatef((GLfloat)day,0.0,1.0,0.0);glutWireSphere(0.1,10,8);//月亮glPopMatrix();glPopMatrix();glutSwapBuffers();}voidreshape(intw,inth){glViewport(0,0,(GL

7、sizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,20.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。