ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:121.32KB ,
资源ID:8314816      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8314816.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电子科大计算机学院三维图形程序设计实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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子目录下拷贝缺少的头文件到该目录下;检查%VS

3、INSTALLDIR%VCPlatformSDKLib目录下是否存在OpenGL32.lib、GLU32.lib两个库文件,并从解压得到的Lib子目录下拷贝缺少的Lib文件到该目录下;4. 安装GLUT库及其头文件。从解压得到的GL子目录下拷贝glut.h到%VSINSTALLDIR%VCPlatformSDKIncludeGL目录中,从解压得到的Lib子目录下拷贝 glut32.lib到%VSINSTALLDIR%VCPlatformSDKLib下,拷贝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 已跳过”表明项目生成成功,否则根据输出信息检查程序或者OpenGL编程环境是否设置正确,并在改正后重新生成Test项目;e. 运行Test.exe查看程序是否能够正常启动。 /* Test.C */#include void display();void init();int main(int argc, char *

5、 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(0.5, -0.5);glEnd();glFlush();void init() glClearColor(0.

6、0,0.0,0.0,0.0);(二)编程任务1: 1.分别利用点、线图元生成锥形螺旋曲线和环形螺旋曲线,要求可以设置点的大小、线可以设置线形和宽度。锥形螺旋曲线的参数方程为:环形螺旋曲线的参数方程为:其中,t为参数且。a,b和c是常数,比如可取a=2.0,b=3.0,c=18.0。(三)编程任务2:1. 在窗口中绘制三角形和四边形两个简单填充图形,要求它们能够被鼠标选中并随鼠标一起拖动,此外能够使用右键菜单分别设置两个简单图形的颜色。利用三角形图元生成黑白相间的圆锥台,要求通过键盘或鼠标能够改变圆锥台地大端和小端直径。六、实验器材(设备、元器件):机房电脑、Microsoft Visual S

7、tudio、OpenGLAPI 函数库七、实验步骤:1:配置环境首先需要配置OpenGL编程环境,在 Microsoft Visual Studio 2010 中添加相应的头文件以及lib文件头文件添加地址为 C:Program FilesMicrosoft Visual Studio 10.0VCincludeGLlib文件添加地址 C:Program FilesMicrosoft Visual Studio 10.0VClib并且将glut.dll 添加到System.32 的文件夹里 2:建立工程建立OpenGL工程的过程选择空项目;输入名称;选择添加文件;键入代码;3:根据具体的题目要

8、求进行实验八、实验数据及结果分析:编程任务1: 分别利用点、线图元生成锥形螺旋曲线和环形螺旋曲线,要求可以设置点的大小、线可以设置线形和宽度。锥形螺旋曲线的参数方程为: 环形螺旋曲线的参数方程为:其中,t为参数且。a,b和c是常数,比如可取a=2.0,b=3.0,c=18.0。/* Test.C */#include #include #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

9、(t=0; t=2*PI; t+=0.0002) x = a*t*cos(c*t)+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(); gl

10、Color3f(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(1, 1, 1, 0, 0, 0, 0, 1, 0); glMatrixMode(GL_PROJECTION

11、); glLoadIdentity(); glOrtho(-12.0, 12.0, -12.0, 12.0, -12, 12);int main(int argc, char * argv) glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(0,0); glutCreateWindow(Draw the lines); glutDisplayFunc(display); init(); glutMainLoop(); return 0; 实验一(2)/* Test.C

12、 */#include #include #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); glEnd(); glColor3f(1.0, 1.0, 1.0

13、); 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 display() glClear(GL_COLOR_B

14、UFFER_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(&argc, argv); glutInit

15、DisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(0,0); glutCreateWindow(Draw the lines); glutDisplayFunc(display); init(); glutMainLoop(); return 0; 编程任务2:1. 在窗口中绘制三角形和四边形两个简单填充图形,要求它们能够被鼠标选中并随鼠标一起拖动,此外能够使用右键菜单分别设置两个简单图形的颜色。#include #include #define SIZE 512int wide=600,height=600;GLint HIT

16、S;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 RGB13=1.0,1.0,0.0;int RGB23=0.0,1.0,1.0;void drawObjects(GLenum mo

17、de,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); glColor3f(RGB20,RGB21,RGB22); glTranslated(4*movex2,4*movey2,0);

18、 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 (GLint hits, GLuint buffer) unsigned int i, j; GLint ii, jj, na

19、mes, *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); else printf (blue rectanglen); ptr+; printf (n); GLuint selectBufSIZE;void mouse(int button, int state, int x, int y) /鼠标函数 GLint h

20、its; GLint viewport4; if (button = GLUT_LEFT_BUTTON & state = GLUT_DOWN) mousex = x; mousey = y; glGetIntegerv (GL_VIEWPORT, viewport); glSelectBuffer (SIZE, selectBuf); glRenderMode(GL_SELECT); glInitNames(); glPushName(0); glMatrixMode (GL_PROJECTION); glPushMatrix (); glLoadIdentity (); gluPickMa

21、trix (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 (); glFlush (); hits = glRenderMode (GL_RENDER); HITS = hits; processHits (hits, selectBuf); glutPostRedis

22、play(); 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(GL_MODELVIEW); glLoadIdentity();void keyboard(unsigned char key, int x, int y) switch (key) case 27:

23、 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 ) movex2 = x-mousex+movex2; movey2 = mousey-y+movey2; display(2); else if (HITS = 2 ) movex1 = x-mousex+movex1; movey1 =

24、 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; 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; d

25、isplay(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) glut

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

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

28、ubMenu2); glutAttachMenu(GLUT_RIGHT_BUTTON); glutReshapeFunc (reshape); glutDisplayFunc(display); glutMouseFunc (mouse); glutKeyboardFunc (keyboard); glutMotionFunc(motion); glutMainLoop();/是程序的监听一直运行,保证捕捉到操作,直到 return 0;九、总结、改进建议及心得体会:电 子 科 技 大 学实 验 报 告一、实验二:(实验项目名称) 二、实验室名称: 实验时间: 三、实验目的:四、实验原理:五、实验内容:六、实验器材(设备、元器件):七、实验步骤:八、实验数据及结果分析:九、总结、改进建议及心得体会:. (注:文档可能无法思考全面,请浏览后下载,供参考。可复制、编制,期待你的好评与关注!)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1