收藏 分享(赏)

电子科大-计算机学院-三维图形程序设计实验报告-.docx

上传人:HR专家 文档编号:12112972 上传时间:2021-09-12 格式:DOCX 页数:16 大小:97.66KB
下载 相关 举报
电子科大-计算机学院-三维图形程序设计实验报告-.docx_第1页
第1页 / 共16页
电子科大-计算机学院-三维图形程序设计实验报告-.docx_第2页
第2页 / 共16页
电子科大-计算机学院-三维图形程序设计实验报告-.docx_第3页
第3页 / 共16页
电子科大-计算机学院-三维图形程序设计实验报告-.docx_第4页
第4页 / 共16页
电子科大-计算机学院-三维图形程序设计实验报告-.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

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

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

3、的头文件到该目录下;检查 %VSINSTALLDIR%VCPlatformSDKLib 目录下是否存在 OpenGL32.lib 、GLU32.lib 两个库文件,并从解压得到的 Lib 子目录下拷贝缺少的 Lib 文件到该目录下;4. 安装 GLUT 库及其头文件。从解压得到的GL 子目录下拷贝 glut.h到 %VSINSTALLDIR%VCPlatformSDKIncludeGL 目录中,从解压得到的 Lib 子目录下拷贝 glut32.lib 到 %VSINSTALLDIR%VCPlatformSDKLib 下,拷贝 glut32.dll到 %windir%system32 目录下。5

4、. 检测 OpenGL 环境是否配置正确。a. 打开 Visual Studio 集成开发环境,新建一个类型为“ Win32 控制台应用程序”的空项目 Test;b. 在项目中新建一个 C 源文件 Test.c;c. 拷贝如下代码到 Test.c中;d. 生成 Test项目,观察“输出”窗口中的编译和链接输出信息,若显示类似“生成 : 1 已成功 , 0 已失败 , 0 最新 , 0 已跳过”表明项目生成成功, 否则根据输出信息检查程序或者 OpenGL 编程环境是否设置正确,并在改正后重新生成Test项目;e. 运行 Test.exe查看程序是否能够正常启动。/* Test.C */#inc

5、lude void display();void init();int main(int argc, char * argv)glutInit(&argc, argv);glutCreateWindow( “Simple ”);glutDisplayFunc(display);init();glutMainLoop();void display()glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(-0.5, -0.5);glVertex2f(-0.5, 0.5);glVertex2f(0.5, 0.5);glVertex2f

6、(0.5, -0.5);(二)编程任务1:1. 分别利用点、线图元生成锥形螺旋曲线和环形螺旋曲线,要求可以设置点的大小、线可以设置线形和宽度。锥形螺旋曲线的参数方程为:xa * t*cos( c* t )bya * t*sin( c* t )bzc * t环形螺旋曲线的参数方程为:x(a * sin(c * t)b) * cos(t )y(a * sin(c * t)b) * sin(t)za * 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 Visual Studio 2010中添加相应的头文件以及 lib文件头 文 件 添 加 地 址 为C:ProgramFilesMicrosoftVisualStudio10.0VCincludeGLlib文件

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

9、cos(t)y( a * sin(c* t )b) * sin(t )za * cos(c * t )其中, t 为参数且 t 0,2 。a,b 和 c 是常数,比如可取a=2.0 ,b=3.0 , c=18.0 。/* Test.C */#include#include#definePI 3.1415void drawthelines()floatt, x, y, z;floata=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);glVertex3f(0, 0,

11、 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, 0);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-12.0, 12.0, -12.0, 12.0, -12, 12);intmain(

12、 intargc,char * argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(0,0);glutCreateWindow( Draw the lines);glutDisplayFunc(display);init();glutMainLoop();return0;实验一( 2)/* Test.C */#include#include#definePI 3.1415void drawthelines()floatt, x, y, z;floata=2, b=

13、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);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);glBe

14、gin(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 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

15、(1, 1, 1,0, 0, 0,0, 1, 0);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-12.0, 12.0, -12.0, 12.0, -12, 12);intmain( intargc,char * argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(0,0);glutCreateWindow( Draw the lines);glutDisplayFunc(display);init()

16、;glutMainLoop();return0;编程任务 2:1. 在窗口中绘制三角形和四边形两个简单填充图形, 要求它们能够被鼠标选中并随鼠标一起拖动,此外能够使用右键菜单分别设置两个简单图形的颜色。#include#include#defineSIZE 512intwide=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=-50

17、0,Rect2_x2=250,Rect2_y2=250;intmovex1=0,movey1=0;intmovex2=0,movey2=0;intmousex=0,mousey=0;intRGB13=1.0,1.0,0.0;intRGB23=0.0,1.0,1.0;void drawObjects(GLenum mode, intflag)if (mode = GL_SELECT) glLoadName(1);glColor3f(RGB10,RGB11,RGB12);glTranslated(4*movex1,4*movey1,0);glRectf(Rect1_x1,Rect1_y1 ,Rec

18、t1_x2 ,Rect1_y2 );glTranslated(-4*movex1,-4*movey1,0);if (mode = GL_SELECT) glLoadName(2);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(intflag)glCl

19、ear(GL_COLOR_BUFFER_BIT);drawObjects(GL_RENDER,flag);glFlush();void processHits (GLint hits, GLuint buffer)unsignedinti, 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)

20、;elseprintf (blue rectanglen);ptr+;printf (n );GLuint selectBufSIZE;void mouse( intbutton,intstate,intx,inty)/鼠标函数GLint hits;GLint viewport4;if(button = GLUT_LEFT_BUTTON & state = GLUT_DOWN)mousex = x;mousey = y;glGetIntegerv (GL_VIEWPORT, viewport);glSelectBuffer (SIZE, selectBuf);glRenderMode(GL_S

21、ELECT);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);glPopMatrix (

22、);glFlush ();hits = glRenderMode (GL_RENDER);HITS = hits;processHits (hits, selectBuf);glutPostRedisplay();void reshape( intw,inth)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(GL_MODELVI

23、EW);glLoadIdentity();void keyboard( unsignedchar key,intx,inty)switch(key) case 27:exit(0);break ;void motion( intx, inty)/建立移动函数if (HITS = 1 & selectBuf3 = 1 )movex1 = x-mousex+movex1;movey1 = mousey-y+movey1;display(1);elseif(HITS = 1 & selectBuf3 = 2 )movex2 = x-mousex+movex2;movey2 = mousey-y+mo

24、vey2;display(2);elseif(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( intdata)/设置控制键盘键switch (data)case 1:RGB10=1.0;RGB11=0.0;RGB12=0.0;break ;case 2:RGB10=0.0;RGB11=1.0;RGB12=0.0;break

25、 ;case 3:RGB10=0.0;RGB11=0.0;RGB12=1.0;break ;display(0);void subMenu2Func( intdata)/设置控制键盘键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(intdata)intsubMenu1,subMenu2,Menu;intm

26、ain( intargc,char * argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (wide, height);glutInitWindowPosition (100, 100);glutCreateWindow (argv0);init ();/ 创建菜单改变颜色subMenu1 = glutCreateMenu(subMenu1Func);glutAddMenuEntry( 红色? ,1);glutAddMenuEntry( 绿色? ,2);glutA

27、ddMenuEntry( 蓝?色? ,3);glutAttachMenu(GLUT_RIGHT_BUTTON);/ 创建菜单改变颜色subMenu2 = glutCreateMenu(subMenu2Func);glutAddMenuEntry( 红色? ,1);glutAddMenuEntry( 绿色? ,2);glutAddMenuEntry( 蓝?色? ,3);glutAttachMenu(GLUT_RIGHT_BUTTON);Menu = glutCreateMenu(MenuFunc);/ 为两个菜单设置名字glutAddSubMenu( 设置方块 1的颜色 ,subMenu1);g

28、lutAddSubMenu( 设置三角形 1的?颜色 ,subMenu2);glutAttachMenu(GLUT_RIGHT_BUTTON);glutReshapeFunc (reshape);glutDisplayFunc(display);glutMouseFunc (mouse);glutKeyboardFunc (keyboard);glutMotionFunc(motion);glutMainLoop();/是程序的监听一直运行,保证捕捉到操作,直到return0;九、总结、改进建议及心得体会:电 子 科 技 大 学实验报告一、实验二:(实验项目名称)二、实验室名称:实验时间:三、实验目的:四、实验原理:五、实验内容:六、实验器材(设备、元器件) :七、实验步骤:八、实验数据及结果分析:九、总结、改进建议及心得体会:.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报