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

上传人:b****5 文档编号:8314816 上传时间:2023-01-30 格式:DOCX 页数:19 大小:121.32KB
下载 相关 举报
电子科大计算机学院三维图形程序设计实验报告.docx_第1页
第1页 / 共19页
电子科大计算机学院三维图形程序设计实验报告.docx_第2页
第2页 / 共19页
电子科大计算机学院三维图形程序设计实验报告.docx_第3页
第3页 / 共19页
电子科大计算机学院三维图形程序设计实验报告.docx_第4页
第4页 / 共19页
电子科大计算机学院三维图形程序设计实验报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

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

《电子科大计算机学院三维图形程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《电子科大计算机学院三维图形程序设计实验报告.docx(19页珍藏版)》请在冰豆网上搜索。

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

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

实验报告

课程名称:

三维图形程序设计

学  院:

计算机科学与工程学院

专  业:

计算机科学与技术

指导教师:

周川

学生姓名:

郫县卡戴珊

学  号:

2014666666666

实验成绩:

日  期:

2016年3月31日

电子科技大学计算机学院实验中心

电子科技大学

实验报告

一、实验一:

三维图形程序上机操作训练与图元编程

二、实验室名称:

主楼A2412实验时间:

2016年3月31号

三、实验目的:

1.掌握VC中OpenGL三维编程环境的建立过程;

2.掌握GLUT编写OpenGL应用程序的基本步骤,熟悉GLUT基于事件驱动的编程模型;

3.掌握不同类型图元的顶点装配方式,并能够利用图元建立简单的几何对象。

四、实验原理:

OpenGL编程语言

面向对象编程技术

五、实验内容:

(一)安装、配置和测试OpenGL三维编程环境

1.首先检查Windows操作系统中是否正确安装了VisualStudio集成开发环境:

实验要求在WindowsXP、VisualC++2005平台以上;

2.解压OpenGL.zip到任意目录下;

3.检查OpenGL核心库和实用库及其头文件是否安装正确和完整:

检查%VSINSTALLDIR%\VC\PlatformSDK\Include\GL目录下是否存在gl.h、glu.h两个头文件,并从解压得到的GL子目录下拷贝缺少的头文件到该目录下;检查%VSINSTALLDIR%\VC\PlatformSDK\Lib目录下是否存在OpenGL32.lib、GLU32.lib两个库文件,并从解压得到的Lib子目录下拷贝缺少的Lib文件到该目录下;

4.安装GLUT库及其头文件。

从解压得到的GL子目录下拷贝glut.h到%VSINSTALLDIR%\VC\PlatformSDK\Include\GL目录中,从解压得到的Lib子目录下拷贝

glut32.lib到%VSINSTALLDIR%\VC\PlatformSDK\Lib下,拷贝glut32.dll到%windir%\system32目录下。

5.检测OpenGL环境是否配置正确。

a.打开VisualStudio集成开发环境,新建一个类型为“Win32控制台应用程序”的空项目Test;

b.在项目中新建一个C源文件Test.c;

c.拷贝如下代码到Test.c中;

d.生成Test项目,观察“输出”窗口中的编译和链接输出信息,若显示类似“生成:

1已成功,0已失败,0最新,0已跳过”表明项目生成成功,否则根据输出信息检查程序或者OpenGL编程环境是否设置正确,并在改正后重新生成Test项目;

e.运行Test.exe查看程序是否能够正常启动。

/**Test.C**/

#include

voiddisplay();

voidinit();

intmain(intargc,char**argv)

{

glutInit(&argc,argv);

glutCreateWindow(“Simple”);

glutDisplayFunc(display);

init();

glutMainLoop();

}

voiddisplay()

{

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();

}

voidinit()

{

glClearColor(0.0,0.0,0.0,0.0);

}

(二)编程任务1:

1.分别利用点、线图元生成锥形螺旋曲线和环形螺旋曲线,要求可以设置点的大小、线可以设置线形和宽度。

锥形螺旋曲线的参数方程为:

环形螺旋曲线的参数方程为:

其中,t为参数且

a,b和c是常数,比如可取a=2.0,b=3.0,c=18.0。

(三)编程任务2:

1.在窗口中绘制三角形和四边形两个简单填充图形,要求它们能够被鼠标选中并随鼠标一起拖动,此外能够使用右键菜单分别设置两个简单图形的颜色。

利用三角形图元生成黑白相间的圆锥台,要求通过键盘或鼠标能够改变圆锥台地大端和小端直径。

六、实验器材(设备、元器件):

机房电脑、MicrosoftVisualStudio、OpenGLAPI函数库

七、实验步骤:

1:

配置环境

首先需要配置OpenGL编程环境,在MicrosoftVisualStudio2010中添加相应的头文件以及lib文件》

头文件添加地址为C:

\ProgramFiles\MicrosoftVisualStudio10.0\VC\include\GL

lib文件添加地址C:

\ProgramFiles\MicrosoftVisualStudio10.0\VC\lib

并且将glut.dll添加到System.32的文件夹里

2:

建立工程

建立OpenGL工程的过程

选择空项目;

输入名称;

选择添加文件;

键入代码;

3:

根据具体的题目要求进行实验

八、实验数据及结果分析:

编程任务1:

分别利用点、线图元生成锥形螺旋曲线和环形螺旋曲线,要求可以设置点的大小、线可以设置线形和宽度。

锥形螺旋曲线的参数方程为:

环形螺旋曲线的参数方程为:

其中,t为参数且

a,b和c是常数,比如可取a=2.0,b=3.0,c=18.0。

/**Test.C**/

#include

#include

#definePI3.1415

voiddrawthelines()

{

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)+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,0);

glVertex3f(0,0,12);

glEnd();

}

voiddisplay()

{

glClear(GL_COLOR_BUFFER_BIT);

drawthelines();

glFlush();

}

 

voidinit()

{

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(intargc,char**argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowPosition(0,0);

glutCreateWindow("Drawthelines");

glutDisplayFunc(display);

init();

glutMainLoop();

return0;

}

实验一

(2)

/**Test.C**/

#include

#include

#definePI3.1415

voiddrawthelines()

{

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*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);

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();

}

voiddisplay()

{

glClear(GL_COLOR_BUFFER_BIT);

drawthelines();

glFlush();

}

 

voidinit()

{

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(intargc,char**argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowPosition(0,0);

glutCreateWindow("Drawthelines");

glutDisplayFunc(display);

init();

glutMainLoop();

return0;

}

编程任务2:

1.在窗口中绘制三角形和四边形两个简单填充图形,要求它们能够被鼠标选中并随鼠标一起拖动,此外能够使用右键菜单分别设置两个简单图形的颜色。

#include

#include

#defineSIZE512

intwide=600,height=600;

GLintHITS;

voidinit()

{

glClearColor(1.0,1.0,1.0,0.0);

}

intRect1_x1=-250,Rect1_y1=-250,Rect1_x2=450,Rect1_y2=450;

intRect2_x1=-500,Rect2_y1=-500,Rect2_x2=250,Rect2_y2=250;

 

intmovex1=0,movey1=0;

intmovex2=0,movey2=0;

intmousex=0,mousey=0;

intRGB1[3]={1.0,1.0,0.0};

intRGB2[3]={0.0,1.0,1.0};

voiddrawObjects(GLenummode,intflag)

{

if(mode==GL_SELECT)glLoadName

(1);

glColor3f(RGB1[0],RGB1[1],RGB1[2]);

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(RGB2[0],RGB2[1],RGB2[2]);

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);

}

voiddisplay(intflag)

{

glClear(GL_COLOR_BUFFER_BIT);

drawObjects(GL_RENDER,flag);

glFlush();

}

voidprocessHits(GLinthits,GLuintbuffer[])

{

unsignedinti,j;

GLintii,jj,names,*ptr;

printf("hits=%d\n",hits);

ptr=(GLint*)buffer;

for(i=0;i

names=*ptr;

ptr+=3;

for(j=0;j

if(*ptr==1)

printf("redrectangle\n");

else

printf("bluerectangle\n");

ptr++;

}

printf("\n");

}

}

 

GLuintselectBuf[SIZE];

voidmouse(intbutton,intstate,intx,inty)//鼠标函数

{

GLinthits;

GLintviewport[4];

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();

gluPickMatrix((GLdouble)x,(GLdouble)(viewport[3]-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);

glutPostRedisplay();

}

}

voidreshape(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_MODELVIEW);

glLoadIdentity();

}

voidkeyboard(unsignedcharkey,intx,inty)

{

switch(key){

case27:

exit(0);

break;

}

}

voidmotion(intx,inty)//建立移动函数

{

if(HITS==1&&selectBuf[3]==1)

{

movex1=x-mousex+movex1;

movey1=mousey-y+movey1;

display

(1);

}

elseif(HITS==1&&selectBuf[3]==2)

{

movex2=x-mousex+movex2;

movey2=mousey-y+movey2;

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;

}

voidsubMenu1Func(intdata)//设置控制键盘键

{

switch(data)

{

case1:

RGB1[0]=1.0;

RGB1[1]=0.0;

RGB1[2]=0.0;

break;

case2:

RGB1[0]=0.0;

RGB1[1]=1.0;

RGB1[2]=0.0;

break;

case3:

RGB1[0]=0.0;

RGB1[1]=0.0;

RGB1[2]=1.0;

break;

}

display(0);

}

voidsubMenu2Func(intdata)//设置控制键盘键

{

switch(data)

{

case1:

RGB2[0]=1.0;

RGB2[1]=0.0;

RGB2[2]=0.0;

break;

case2:

RGB2[0]=0.0;

RGB2[1]=1.0;

RGB2[2]=0.0;

break;

case3:

RGB2[0]=0.0;

RGB2[1]=0.0;

RGB2[2]=1.0;

break;

}

display(0);

}

voidMenuFunc(intdata)

{

}

intsubMenu1,subMenu2,Menu;

intmain(intargc,char**argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(wide,height);

glutInitWindowPosition(100,100);

glutCreateWindow(argv[0]);

init();

//创建菜单改变颜色

subMenu1=glutCreateMenu(subMenu1Func);

glutAddMenuEntry("红ì色?

",1);

glutAddMenuEntry("绿ì色?

",2);

glutAddMenuEntry("蓝?

色?

",3);

glutAttachMenu(GLUT_RIGHT_BUTTON);

//创建菜单改变颜色

subMenu2=glutCreateMenu(subMenu2Func);

glutAddMenuEntry("红ì色?

",1);

glutAddMenuEntry("绿ì色?

",2);

glutAddMenuEntry("蓝?

色?

",3);

glutAttachMenu(GLUT_RIGHT_BUTTON);

Menu=glutCreateMenu(MenuFunc);

//为两个菜单设置名字

glutAddSubMenu("设置方块1的颜色",subMenu1);

glutAddSubMenu("设置三角形1的?

颜色",subMenu2);

glutAttachMenu(GLUT_RIGHT_BUTTON);

glutReshapeFunc(reshape);

glutDisplayFunc(display);

glutMouseFunc(mouse);

glutKeyboardFunc(keyboard);

glutMotionFunc(motion);

glutMainLoop();//是程序的监听一直运行,保证捕捉到操作,直到

return0;

}

九、总结、改进建议及心得体会:

电子科技大学

实验报告

一、实验二:

(实验项目名称)

二、实验室名称:

实验时间:

三、实验目的:

四、实验原理:

五、实验内容:

六、实验器材(设备、元器件):

七、实验步骤:

八、实验数据及结果分析:

九、总结、改进建议及心得体会:

...

(注:

文档可能无法思考全面,请浏览后下载,供参考。

可复制、编制,期待你的好评与关注!

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

当前位置:首页 > 小学教育 > 数学

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

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