电子科大-计算机学院-三维图形程序设计实验报告-_第1页
电子科大-计算机学院-三维图形程序设计实验报告-_第2页
电子科大-计算机学院-三维图形程序设计实验报告-_第3页
电子科大-计算机学院-三维图形程序设计实验报告-_第4页
电子科大-计算机学院-三维图形程序设计实验报告-_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、课程名称:三维图形程序设计学院:计算机科学与工程学院专业:计算机科学与技术指导教师:周川学生姓名:郫县卡戴珊学 号:2014666666666实验成绩:期:2016年3月31日电子科技大学计算机学院实验中心电子科技大学实验报告一、实验一: 三维图形程序上机操作训练与图元编程二、实验室名称: 主楼 A2412 实验时间: 2016年 3月31号三、实验目的:1. 掌握VC中OPenG三维编程环境的建立过程;2. 掌握GLUT编写OPenG应用程序的基本步骤,熟悉 GLUT基于事件驱动的编程模型;3. 掌握不同类型图元的顶点装配方式,并能够利用图元建立简单的几何对象。四、实验原理:OPe nGLS

2、程语言面向对象编程技术五、实验内容:(一)安装、配置和测试 OPe nGL维编程环境1. 首先检查 Windows操作系统中是否正确安装了 ViSual StudiO集成开发环境:实验 要求在 Windows XP、 Visual C+ 2005 平台以上;2. 解压 OPenGL.ziP 到任意目录下;3. 检查OPenGL核心库和实用库及其头文件是否安装正确和完整:检查VSINSTALLDIR%VCPlatformSDKlncludeGL目录下是否存在 gl.h、glu.h 两个头文件, 并从解压得到的GL子目录下拷贝缺少的头文件到该目录下;检查VSINSTALLDIR%VCPlatfor

3、mSDKLib目录下是否存在 OPenGL32.lib、GLU32.lib 两个库 文件,并从解压得到的 Lib 子目录下拷贝缺少的 Lib 文件到该目录下;4. 安装GLUT库及其头文件。从解压得到的GL子目录下拷贝glut.h到%VSINSTALLDIR%VCPlatformSDKIncludeGL目录中,从解压得到的 Lib子目录下拷贝 glut32.lib到VSINSTALLDIR%VCPlatformSDKLibT,拷贝 glut32.dll到 windir%system32 目录下。5. 检测OPenGL环境是否配置正确。a. 打开ViSUal StUdiO 集成开发环境,新建一个

4、类型为“ Win32控制台应用程序” 的空项目TeSt ;b. 在项目中新建一个C源文件Test.c ;c. 拷贝如下代码到Test.c中;d. 生成TeSt项目,观察“输出”窗口中的编译和链接输出信息,若显示类似“生 成:1已成功,0已失败,0最新,0已跳过”表明项目生成成功,否则根据输出信息检查 程序或者OPenG编程环境是否设置正确,并在改正后重新生成 TeSt项目;e. 运行Test.exe查看程序是否能够正常启动。/* Test.C */#i nclude <GLglut.h>void display();void ini t();int main (i nt argc,

5、 Char * argv)glutI nit(&argc, argv);glutCreateWindow( “SimPIe”);glutDisplay FUn c(display);in it();glutMa in Loop();void display()glClear(GL_COLOR_BUFFER_BIT);glBegi n(GL_POLYGON);glVertex2f(-0.5, -0.5);glVertex2f(-0.5, 0.5);glVertex2f(0.5, 0.5);glVertex2f(0.5, -0.5);(二) 编程任务 1:1. 分别利用点、线图元生成锥形螺

6、旋曲线和环形螺旋曲线,要求可以设置点的大小、 线可以设置线形和宽度。锥形螺旋曲线的参数方程为:xa *t * cos(c *t)bya*t * sin( c *t)bz c *t环形螺旋曲线的参数方程为:x (a* sin(c* t) b) * cos(t)y (a* sin(c* t) b) * sin(t)z a* cos(c * t)其中,t为参数且t 0,2 。a, b和C是常数,比如可取a=2.0 , b=3.0 , c=18.0。(三) 编程任务 2:1. 在窗口中绘制三角形和四边形两个简单填充图形, 要求它们能够被鼠标选中并随鼠标 一起拖动,此外能够使用右键菜单分别设置两个简单图

7、形的颜色。利用三角形图元生成黑白相间的圆锥台,要求通过键盘或鼠标能够改变圆锥台地大端和 小端直径。六、实验器材(设备、元器件) :机房电脑、MiCrOSOft ViSual StudiO 、OPenGLAPI函数库七、实验步骤:1 :配置环境首先需要配置 OPenGL编程环境,在 MiCrOSOft ViSUaI StUdiO 2010 中添加相应 的头文件以及 lib 文件头 文 件 添 加 地 址 为 C:PrOgram FileSMiCrOSOft ViSual StudiO 10.0VCinCludeGLlib 文件添加地址 C:PrOgram FileSMiCrOSOft ViSua

8、l StudiO 10.0VClib 并且将 glut.dll 添加到 SyStem.32 的文件夹里2:建立工程建立OPenG工程的过程选择空项目;输入名称;选择添加文件; 键入代码;3:根据具体的题目要求进行实验八、实验数据及结果分析:编程任务1:分别利用点、线图元生成锥形螺旋曲线和环形螺旋曲线,要求可以设置点的大小、线 可以设置线形和宽度。锥形螺旋曲线的参数方程为:Xa * t * cos( c * t )bya * t * sin( c * t )bZ C * t环形螺旋曲线的参数方程为:X (a* Sin(c*t) b) * cos(t)y (a* Sin(c*t) b)*sin(t

9、)Z a* COS(c* t)其中,t为参数且t 0,2 。 a,b和C是常数,比如可取a=2.0,b=3.0,c=18.0</* Test.C */#i nclude <GLglut.h>#in clude <math.h>#define Pl 3.1415void drawthelines()float t, x, y, z;float a=2, b=3, c=18; glColor3f(1.0, 0.5, 0.5); glBegin(GL_LINE_STRIP);for (t=0; t<=2*PI; t+=0.0002) x = a*t*cos(c*t

10、)+b;y = a*t*sin(c*t)+b;z = c*t;glVertex3f(x, y, z);glEnd();glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINES); glVertex3f(0, 0, 0); glVertex3f(12, 0, 0);glEnd();glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINES); glVertex3f(0, 0, 0); glVertex3f(0, 12, 0);glEnd();glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINES); glVertex3

11、f(0, 0, 0); glVertex3f(0, 0, 12);glEnd();void display()glClear(GL_COLOR_BUFFER_BIT); drawthelines();glFlush();void init()glClearColor(0.0, 0.0, 0.0,0.0); glColor3f(1.0, 1.0, 1.0); gluLookAt(1, 1, 1,0, 0, 0,0, 1, O);glMatrixMode(GL_PROJECTION); glLoadlde ntity();glOrtho(-12.0, 12.0, -12.0, 12.0, -12,

12、 12); int main( int argc, Char * argv)glutl nit (&argc, argv);glut In itDisplayMode(GLUT_SINGLE|GLUT_RGB);glutl nitWin dowPositio n(0,0);glutCreateWindow( "Draw the lines" ); glutDisplayFu nc(display);in it();glutMai nLoop();return 0;实验一(2)iMl1 J » 6'3.¾3>M. T. E./* Te

13、st.C */#in elude <GLglut.h>#include <math.h> #define PI 3.1415void drawthelines()float t, x, y, z;float a=2, b=3, c=18; glColor3f(1.0, 0.5, 0.5);glBegin(GL_LINE_STRIP);for (t=0; t<=2*PI; t+=0.0002)x = (a*sin(c*t)+b)*cos(t); y = (a*sin(c*t)+b)*sin(t);z = a*cos(c*t); glVertex3f(x, y, z)

14、;glEnd();glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINES);glVertex3f(0, 0, 0); glVertex3f(12, 0, 0);glEnd();glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINES);glVertex3f(0, 0, 0); glVertex3f(0, 12, 0);glEnd();glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINES);glVertex3f(0, 0, 0); glVertex3f(0, 0, 12);glEnd();void disp

15、lay() glClear(GL_COLOR_BUFFER_BIT); drawthelines();glFlush();void init()glClearColor(0.0, 0.0, 0.0,0.0); glColor3f(1.0, 1.0, 1.0);gluLookAt(1, 1, 1,0, 0, 0,0, 1, 0);glMatrixMode(GL_PROJECTION); glLoadIdentity();glOrtho(-12.0, 12.0, -12.0, 12.0, -12, 12); int main( int argc, char * argv)glutInit(&

16、;argc, argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(0,0);glutCreateWindow( "Draw the lines" );glutDisplayFunc(display);init();glutMainLoop();return 0;编程任务 2:1. 在窗口中绘制三角形和四边形两个简单填充图形, 要求它们能够被鼠标选中并随鼠标 一起拖动,此外能够使用右键菜单分别设置两个简单图形的颜色。#include <stdio.h>#include &l

17、t;GL/glut.h> #define SIZE 512int wide=600,height=600;GLint HITS;void init()glClearColor (1.0, 1.0, 1.0, 0.0);int Rect1_x1=-250,Rect1_y1=-250,Rect1_x2=450,Rect1_y2=450; int Rect2_x1=-500,Rect2_y1=-500,Rect2_x2=250,Rect2_y2=250;int movex1=0,movey1=0;int movex2=0,movey2=0;int mousex=0,mousey=0;int R

18、GB13=1.0,1.0,0.0;int RGB23=0.0,1.0,1.0;void drawObjects(GLenum mode, int flag)if (mode = GL_SELECT) glLoadName(1); glColor3f(RGB10,RGB11,RGB12); glTranslated(4*movex1,4*movey1,0); glRectf(Rect1_x1,Rect1_y1 ,Rect1_x2 ,Rect1_y2 ); glTranslated(-4*movex1,-4*movey1,0);if (mode = GL_SELECT) glLoadName(2)

19、; glColor3f(RGB20,RGB21,RGB22); glTranslated(4*movex2,4*movey2,0); glBegin(GL_TRIANGLES);glVertex2i(0,0);glVertex2i(145,245);glVertex2i(-45,280);glEnd();glTranslated(-4*movex2,-4*movey2,0);void display( int flag)glClear(GL_COLOR_BUFFER_BIT); drawObjects(GL_RENDER,flag);glFlush();void processHits (GL

20、int hits, GLuint buffer)unsigned int i, j;GLint ii, jj, names, *ptr;printf ("hits = %dn" , hits);ptr = (GLint *) buffer;for (i = 0; i < hits; i+) names = *ptr;ptr+=3;for (j = 0; j < names; j+) if (*ptr=1)printf ( "red rectanglen" ); elseprintf ( "blue rectanglen")

21、;ptr+;printf ( "n" );GLuint selectBufSIZE;void mouse( int button, int state, int x, int y) / 鼠标函数 GLint hits;GLint viewport4;if (button = GLUT_LEFT_BUTTON && state = GLUT_DOWN)mousex = x;mousey = y;glGetIntegerv (GL_VIEWPORT, viewport);glSelectBuffer (SIZE, selectBuf);glRenderMode(

22、GL_SELECT);glInitNames();glPushName(0);glMatrixMode (GL_PROJECTION);glPushMatrix ();glLoadIdentity ();gluPickMatrix (GLdouble) x, (GLdouble) (viewport3 - y),5.0, 5.0, viewport); gluOrtho2D (-2.0*wide, 2.0*wide, -2.0*height, 2.0*height);drawObjects(GL_SELECT,0);glMatrixMode (GL_PROJECTION); glPopMatr

23、ix ();glFlush ();hits = glRenderMode (GL_RENDER);HITS = hits;processHits (hits, selectBuf);glutPostRedisplay();void reshape( int w, int h)wide = w;height = h;glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity();gluOrtho2D (-2.0*wide, 2.0*wide, -2.0*height, 2.0*height); glMatrixMode(

24、GL_MODELVIEW);glLoadIdentity();void keyboard( unsigned char key, int x, int y)switch (key) case 27:exit(0);break ;void motion( int x, int y) / 建立移动函数if (HITS = 1 && selectBuf3 = 1 )movex1 = x-mousex+movex1;movey1 = mousey-y+movey1; display(1);else if (HITS = 1 && selectBuf3 = 2 )move

25、x2 = x-mousex+movex2;movey2 = mousey-y+movey2; display(2);else if (HITS = 2 )movex1 = x-mousex+movex1;movey1 = mousey-y+movey1;movex2 = x-mousex+movex2;movey2 = mousey-y+movey2; display(3);mousex = x;mousey = y;void subMenu1Func( int data) / 设置控制键盘键 switch (data)case 1:RGB10=1.0;RGB11=0.0;RGB12=0.0;

26、break ;case 2:RGB10=0.0;RGB11=1.0;RGB12=0.0;break ;case 3:RGB10=0.0;RGB11=0.0;RGB12=1.0;break ;display(0);void subMenu2Func( int data) / 设置控制键盘键switch (data)case 1:RGB20=1.0;RGB21=0.0;RGB22=0.0;break ;case 2:RGB20=0.0;RGB21=1.0;RGB22=0.0;break ;case 3:RGB20=0.0;RGB21=0.0;RGB22=1.0;break ;display(0);void MenuFunc(int data)int subMenu1,subMenu2,Menu;int main( int argc, char * argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (wide, height);glutInitWindowPosition (100, 100);glutCreateWindo

温馨提示

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

评论

0/150

提交评论