计算机研究性教学第二次报告Word文档下载推荐.docx
- 文档编号:18664038
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:12
- 大小:174.43KB
计算机研究性教学第二次报告Word文档下载推荐.docx
《计算机研究性教学第二次报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机研究性教学第二次报告Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
七、组内分工12
八、参考文献13
一、研究目的
(1)几何变换是CAD/CAM技术的基本功能,课堂主要讲授CAD图形的几何变换原理,包括二维图形和三维图形的平移、旋转、缩放、对称以及透视变换等。
本次专题是利用OpenGL软件包,实现CAD图形的几何变换功能,实现理论与实践的结合。
(2)OpenGL是行业领域中最为广泛接纳的2D/3D图形软件包,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
任何一款CAD软件都必须具备模型显示的功能,本研究专题利用OpenGL将STL文件显示出来,并实现其几何变换,使学生初步掌握CAD软件的开发技能。
(3)提供给学生一个做学术研讨的机会,培养学生与他人沟通的能力,培养团队合作的习惯与意识。
通过事先布置具有一定难度和工作量的任务,要求学生在课堂利用PPT汇报本组的方法与成果,促使学生团队合作讨论方案,再分工实施,最后汇总形成整体方案。
二、研究专题背景
本专题从任课教师的科研项目中提取出的一部分内容,指导教师提供一个软件雏形模板,是Vc++编程环境下的win32控制台应用程序,具有STL大文件数据的读取、显示功能,也能通过键盘交互实现图形的平移和旋转等功能。
图1是本次专题提供的模版程序执行结果,该程序读取并显示了一个F1方程式赛车的STL文件模型,同时使用了OpenGL的光照相关函数,增强了显示效果。
该赛车模型的大小接近60M,但是模版程序仍然可以流畅地显示图形及其变换过程,显示了C++的高效性。
图1读取并显示F1赛车STL模型
三、小组研究内容
在指导教师给定的CAD几何变换源代码基础上,参照现有CAD/CAM软件(如MasterCAM、SolidWorks等)的操作风格和模式,利用OpenGL软件包的功能和Vc++语言,增加几何变换的功能。
教师提供的软件源代码参见文件ViewSTL.cpp和myOpenglEnv.h,另提供一STL文档。
OpenGL库函数从网上下载,包括*.h、*.lib、*.dll文档。
OpenGL编程环境设置参见附件2。
具体研究内容:
实现CAD图形的视图功能,能生成STL图形的前、后、左、右、上、下视图和等轴测视图,可添加图标操作功能。
CAD图形如下:
四、程序
1)主体程序
#include"
stdafx.h"
#defineGLUT_DISABLE_ATEXIT_HACK
#include<
GL/glut.h>
#include<
list>
fstream>
usingnamespacestd;
typedefstructtagTrip{
GLdoublem_normal[3];
GLdoublem_vex[3][3];
}Trip,*pTrip;
typedeflist<
Trip>
TripList;
TripListm_list;
voidReadFile(constchar*filename)
{
ifstreamfin;
fin.open(filename,ios:
:
binary);
charbuff[100]={0};
intnum=0;
fin.read(buff,80);
fin.read((char*)&
num,4);
floata;
for(inti=0;
i<
num;
i++)
{
pTripptemp=newTrip;
//读法向量
for(inti=0;
3;
{
fin.read((char*)&
a,4);
ptemp->
m_normal[i]=a;
}
//读三个顶点
for(intj=0;
j<
j++)
{
fin.read((char*)&
ptemp->
m_vex[i][j]=a;
}
fin.read(buff,2);
m_list.push_back(*ptemp);
deleteptemp;
}
fin.close();
}
voidupwardview()
glRotatef(-90,1.0,0.0,0.0);
//仰视图
voidleftview()
{
glRotatef(90,0.0,0.0,1.0);
//左视图
voidrightview()
glRotatef(-90,0.0,0.0,1.0);
//右视图
voidbackview()
glRotatef(180,0.0,0.0,1.0);
//后视图
voidtopview()
glRotatef(90,1.0,0.0,0.0);
//俯视图
voidisometricdrawing()
GLfloatm[4][4]={{0.707,0,0.707,0},
{0.408,0.816,-0.408,0},
{0,0,1,0},
{0,0,0,1}};
glMultMatrixf(*m);
//正等轴侧视图
voiddisplay(void)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
TripList:
iteratorit;
for(it=m_list.begin();
it!
=m_list.end();
it++)
glNormal3f(it->
m_normal[0],it->
m_normal[1],it->
m_normal[2]);
glVertex3f(it->
m_vex[i][0],it->
m_vex[i][1],it->
m_vex[i][2]);
glEnd();
glFlush();
voidmyReshape(intw,inth)
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<
=h)
glOrtho(-200,200,-200*(GLfloat)h/(GLfloat)w,200*(GLfloat)h/(GLfloat)w,-1000.0,1000.0);
else
glOrtho(-200*(GLfloat)w/(GLfloat)h,200*(GLfloat)w/(GLfloat)h,-200,200,-1000.0,1000.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(100.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0);
}
voidKeyPressFunc(unsignedcharkey,intx,inty)
switch(key)
case'
a'
leftview();
break;
case'
d'
rightview();
w'
upwardview();
s'
backview();
m'
topview();
n'
isometricdrawing();
default:
glutPostRedisplay();
voidmyinit(void)
GLfloatlight_position[]={1.0,1.0,1.0,0.0};
glClearColor(1,1,1,0);
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
//glShadeModel(GL_FLAT);
voidmain(intargc,char*argv[])
char*file[]={"
test1.stl"
"
test2.stl"
test3.stl"
test4.stl"
test5.stl"
"
test6.stl"
test7.stl"
};
inti=4;
printf("
输入需要打开的文件[1]~[7]\n"
);
scanf("
%d"
&
i);
ReadFile(file[i-1]);
glutInit(&
argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
glutInitWindowSize(800,600);
glutCreateWindow("
3DEffectsDemo"
myinit();
glutReshapeFunc(myReshape);
glutKeyboardFunc(KeyPressFunc);
glutDisplayFunc(display);
glutMainLoop();
2)程序备注
gluLookAt函数:
voidgluLookAt(GLdoubleeyex,GLdoubleeyey,GLdoubleeyez,
GLdoublecenterx,GLdoublecentery,GLdoublecenterz,
GLdoubleupx,GLdoubleupy,GLdoubleupz);
该函数定义一个视图矩阵,并与当前矩阵相乘。
第一组eyex,eyey,eyez相机在世界坐标的位置
第二组centerx,centery,centerz相机镜头对准的物体在世界坐标的位置
第三组upx,upy,upz相机向上的方向在世界坐标中的方向
你把相机想象成为你自己的脑袋:
第一组数据就是脑袋的位置
第二组数据就是眼睛看的物体的位置
第三组就是头顶朝向的方向(因为你可以歪着头看同一个物体)。
glRotatef函数:
glRotatef(GLfloatangle,GLfloatx,GLfloaty,GLfloatz);
其中,angle为旋转的角度,单位为度。
如果说x,y,z表达的是一个坐标(x,y,z),那么这个函数就说明了当前几何图形围着这个坐标点旋转,x,y,z表达的意思并不是坐标点,而是要围绕哪个坐标轴旋转.即其实这里的x,y,z值相当于一个布尔值,0.0表示假,而非零参数则表示真。
所以如果你想让当前的几何图形围绕着z轴旋转,那么x和y都设为0,而z设为非零值即可。
如果这里的x,y,z的值都设置为0.0,那么将围绕着x轴旋转。
还有一点需要注意,如果设置的旋转值(x,y,z的值)为正数,那么旋转的方向是逆时针的,如果旋转值是负数,那么旋转的方向是顺时针的。
VS2010上openGL开发环境配置
1.把解压得到的头文件(如glut.h等)放到"
D:
\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC\include\gl"
(与具体安装位置有关,应该是安装目录\MicrosoftVisualStudio10.0\VC\include\gl),须先建立…\gl目录;
2.把解压得到的lib文件(如glut.lib和glut32.lib等)放到"
“Programfiles(x86)\MicrosoftVisualstudio10.0\VC\lib"
中(与具体安装位置有关,同上);
3.把解压得到的dll文件(如glut.dll、glut32.dll等)放到"
C:
\Windows\SysWOW64"
4.新建的工程中使用OpenGl,选择一下两种方法之一:
a)在新建的项目中,选择project->
projectproperty->
ConfigurationProperties->
Linker->
Input->
AdditionalDependencies在其中添加opengl32.lib;
glu32.lib;
glut32.lib等。
b)在头文件或*.cpp文件开始部分添加,“#pragmacomment(lib,"
glu32.lib"
)”等语句,本专题中采用了本方法。
五、功能实现情况
输出左视图:
输出右视图
输出仰视图
输出后视图
输出俯视图
输出正等轴测图
六、总结
通过这次的研究性专题的学习,我们小组成员提升了自己发现问题、分析问题、解决问题的能力,并且通过对OpenGL软件包的学习与运用,进一步提高了自己的自学能力,为今后的学习生活夯实了基础。
同时,这次研究性专题的学习还培养了我们对CAD/CAM技术的兴趣,让我们对未来的学习充满了信心与期待。
而研究性学习的开展让我们脱离课本的束缚,将所学知识付诸于实践,有利于我们更好地理解、掌握课本知识,提升我们的综合能力。
七、组内分工
姓名
组内职务
分工
组内排序
组长
程序设计、word制作
1
苑弘瑞
组员
ppt制作、word制作
2
张学敏
ppt制作
3
李宗凯
审查
4
八、参考文献
[1]DonaldHeran,M.PaulineBaker/蔡士杰等译.计算机图形学(第三版).北京:
电子工业出版社,2005.
[2]DaveShreiner,GrahamSellers/王锐等译.OpenGL编程指南(第八版).机械工业出版社,2014.10.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 研究 教学 第二次 报告