华北电力大学计算机图形学.doc_第1页
华北电力大学计算机图形学.doc_第2页
华北电力大学计算机图形学.doc_第3页
华北电力大学计算机图形学.doc_第4页
华北电力大学计算机图形学.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

华北电力大学实 验 报 告| 实验名称 基于OpenGL的综合实验 课程名称 计算机图形学 | 专业班级: 学生姓名: 学 号: 成 绩:指导教师:姜丽梅 实验日期:2013年5月 华 北 电 力 大 学 实 验 报 告实验一:OpenGL基本图元绘制实验1、 实验目的 了解OpenGL图形软件包绘制图形的基本过程及其程序框架,本实验要求熟悉OpenGL基本图元函数的使用。通过使用OpenGL及GLUT库在Visual C+环境下编写图形绘制程序掌握图形绘制的一般框架,从而为进一步做综合性的图形绘制实验奠定基础。2、 实验要求在两个具有不同属性的窗口中分别显示一个旋转的三角形来演示单缓存和双缓存,在旋转过程中不断改变图形的颜色,利用鼠标或菜单可终止/启动图形旋转。3、 实验内容程序包括哪些函数,各个函数的功能以及整个流程。 理解glut程序框架,理解窗口到视区的变换 ,理解OpenGL实现动画的原理。4、 实验过程与结果分析 1、 OpenGL 绘图工具箱1) 清理屏幕;2) 属性说明;3) 指定坐标系;4) 定义几何图元;5) 定义视点;6) 说明视口;7) 绘制物体;8) 结束运行。 2. OpenGL绘制流程 3、 实验方法与步骤 1、正确配置相关文件;对于Microsoft Visual Studio 2010 把 glut.h 放入 1. C:Program FilesMicrosoft SDKsWindowsv7.0AIncludegl 文件目录下把 glut.lib 放入 2. C:Program FilesMicrosoft SDKsWindowsv7.0ALib文件目录下把 glut32.dll 放入 3. C:WindowsSysWOW64文件目录下 2、使用Win32 Console Application创建新项目; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整;通过改变各个函数参数值,观察图形变化,说明产生相应结果的原因,从而进一步了解函数的作用。 5、对运行结果进行保存; 4、实验运行截图: 当旋转的三角形停在不同的颜色变换的时候实验代码:#include #include#include #define DEG_TO_RAD 0.017453static GLfloat theta = 0.0;bool Flag=true;GLfloat rtri; float x=0.0;void display(void) glClear(GL_COLOR_BUFFER_BIT); glColor3f(cos(x), sin(x), 0.0); glBegin(GL_POLYGON); glVertex2f(cos(DEG_TO_RAD*theta), sin(DEG_TO_RAD*theta);glVertex2f(cos(DEG_TO_RAD*(theta+120), sin(DEG_TO_RAD*(theta+120);glVertex2f(cos(DEG_TO_RAD*(theta+240), sin(DEG_TO_RAD*(theta+240); glEnd(); glFlush();void spinDisplay (void) theta = theta + 1.0;x+; if (theta 360.0)theta = theta - 360.0; glutPostRedisplay(); /标记当前窗口需要重新绘制 void myReshape(int w, int h) glViewport(0, 0, w, h);/指定平面上一个矩形裁剪区域, glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w = h) gluOrtho2D(-1., 1., -1.*(GLfloat)h/(GLfloat)w, 1.*(GLfloat)h/(GLfloat)w); else gluOrtho2D(-1.*(GLfloat)w/(GLfloat)h, 1.*(GLfloat)w/(GLfloat)h, -1., 1.);void myMouse(int button ,int state ,int x ,int y)if(Flag=true)if(button=GLUT_LEFT_BUTTON)Flag=false;Sleep(1000);else return ;else if(Flag=false)Flag=true; return ;void main(int argc, char* argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(100, 100);glutInitWindowSize(500, 500);glutCreateWindow(spinning square); glClearColor(0.0, 0.0, 0.0, 1.0);glutMouseFunc(myMouse);glutDisplayFunc(display); glutReshapeFunc(myReshape); glutIdleFunc(spinDisplay); glutMainLoop(); 实验二:OpenGL三维观察综合实验一、实验目的 了解OpenGL图形软件包绘制图形的基本过程及其程序框架,本实验要求对绘制的简单场景(可以自己拟定)综合利用几何变换或gluLookAt函数实现交互式三维观察程序,从而通过本实验加深理解计算机图形学中的三维图形绘制流程的工作原理。二、实验要求对于绘制的立方体(也可以自己拟定)通过键盘移动视点,利用鼠标或键盘控制立方体的旋转方向,从不同角度观察各面颜色不同的立方体。三、实验内容程序包括哪些函数,各个函数的功能以及整个流程。 理解glut程序框架,理解窗口到视区的变换 ,理解OpenGL实现动画的原理。4、 实验过程与结果分析 1、实验分析 通过改变glOtho2D的参数来得到正确的图形。 这个函数描述了一个平行修剪空间。这种投影意味着理观察者较远的对象看上去不会变小。它创建了一个平行视景体,实际上这个函数的操作是创建了一个正射投影矩阵。其中近裁剪平面是一个矩阵,矩阵左下角点的三维空间坐标是(left,bottom,near)。 对绘制的三维场景综合利用几何变换或gluLookAt函数实现交互式三维观察。 实验运行结果截图:通过按不同的鼠标键让图形从不同的方向旋转通过按不同的键盘的键让图形从不同的方向旋转而且改变大小 结果分析glLookAt()函数定义了视点矩阵,并用该矩阵乘以当前矩阵。 viewer0,viewer1,viewer2定义了视点的位置,centerx centery centerz变量指定了参考点的位置,该点通常为相机所瞄准的场景中心轴线上的点。视点转换操作在模型转换操作之后发出,以便模型转换先对物体发生作用。场景中物体的顶点经过模型转换移动到所希望的位置,然后再对场景进行视点定位等操作。模型转换和视点转换共同构成模型视景矩阵。实验代码:#include #include GLfloat vertices3 = -1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0, -1.0,1.0,-1.0, -1.0,-1.0,1.0, 1.0,-1.0,1.0, 1.0,1.0,1.0, -1.0,1.0,1.0;GLfloat normals3 = -1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0, -1.0,1.0,-1.0, -1.0,-1.0,1.0, 1.0,-1.0,1.0, 1.0,1.0,1.0, -1.0,1.0,1.0;GLfloat colors3 = 0.0,0.0,0.0,1.0,0.0,0.0,1.0,1.0,0.0, 0.0,1.0,0.0, 0.0,0.0,1.0, 1.0,0.0,1.0, 1.0,1.0,1.0, 0.0,1.0,1.0;void polygon(int a, int b, int c , int d)glBegin(GL_POLYGON);glColor3fv(colorsa);glNormal3fv(normalsa);glVertex3fv(verticesa);glColor3fv(colorsb);glNormal3fv(normalsb);glVertex3fv(verticesb);glColor3fv(colorsc);glNormal3fv(normalsc);glVertex3fv(verticesc);glColor3fv(colorsd);glNormal3fv(normalsd);glVertex3fv(verticesd);glEnd();void colorcube()polygon(0,3,2,1);polygon(2,3,7,6);polygon(0,4,7,3);polygon(1,2,6,5);polygon(4,5,6,7);polygon(0,1,5,4);static GLfloat theta = 0.0,0.0,0.0;static GLint axis = 2;static GLdouble viewer= 0.0, 0.0, 5.0; /* initial viewer location */ void display(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/* Update viewer position in modelview matrix */glLoadIdentity();gluLookAt(viewer0,viewer1,viewer2, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);/* rotate cube */glRotatef(theta0, 1.0, 0.0, 0.0);glRotatef(theta1, 0.0, 1.0, 0.0);glRotatef(theta2, 0.0, 0.0, 1.0); colorcube(); glFlush();glutSwapBuffers();void mouse(int btn, int state, int x, int y)if(btn=GLUT_LEFT_BUTTON & state = GLUT_DOWN) axis = 0;if(btn=GLUT_MIDDLE_BUTTON & state = GLUT_DOWN) axis = 1;if(btn=GLUT_RIGHT_BUTTON & state = GLUT_DOWN) axis = 2;thetaaxis += 2.0;if( thetaaxis 360.0 ) thetaaxis -= 360.0;display();void keys(unsigned char key, int x, int y)/* Use x, X, y, Y, z, and Z keys to move viewer */ if(key = x) viewer0-= 1.0; if(key = X) viewer0+= 1.0; if(key = y) viewer1-= 1.0; if(key = Y) viewer1+= 1.0; if(key = z) viewer2-= 1.0; if(key = Z) viewer2+= 1.0; display();void myReshape(int w, int h) glViewport(0, 0, w, h);/* Use a perspective view */ glMatrixMode(GL_PROJECTION); glLoadIdentity();if(w=h) glFrustum(-2.0, 2.0, -2.0 * (GLfloat) h/ (GLfloat) w, 2.0* (GLfloat) h / (GLfloat) w, 2.0, 20.0);else glFrustum(-2.0, 2.0, -2.0 * (GLfloat) w/ (GLfloat) h, 2.0* (GLfloat) w / (GLfloat) h, 2.0, 20.0);/* Or we can use gluPerspective */ /* gluPerspective(45.0, w/h, -10.0, 10.0); */ glMatrixMode(GL_MODELVIEW);voidmain(int argc, char *argv) glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUB

温馨提示

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

评论

0/150

提交评论