实验5 OpenGL模型视图变换_第1页
实验5 OpenGL模型视图变换_第2页
实验5 OpenGL模型视图变换_第3页
实验5 OpenGL模型视图变换_第4页
全文预览已结束

下载本文档

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

文档简介

1、实验5 OpenGL模型视图变换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<GL/glut.h>#include<stdlib.h>static int year =0,day=0,day1=0;void ini

5、t(void)glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_FLAT);void display(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);glutWireSpher

6、e(0.2,10,8);/火星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(); void reshape(int w,int h)glVi

7、ewport(0,0,(GLsizei)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.0,0.0);void keyboard(unsigned char key, int x,int y)switch (key)case 'd':da

8、y=(day+10)%360;glutPostRedisplay();break;case 'D':day=(day-10)%360;glutPostRedisplay();break;case 'y':year=(year + 5)%360;glutPostRedisplay();break;case 'Y':year=(year-5)%360;glutPostRedisplay();break;case 27:exit(0);break;default:break;int main(int argc,char* argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv0);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutKeyboar

温馨提示

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

评论

0/150

提交评论