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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验一OPENGL基本图形绘制.docx

1、实验一OPENGL基本图形绘制实验一OpenGL基本图形绘制一、实验目的和要求:1、了解三维图形编程机制以及OpenGL三维图形绘制的程序结构;2、通过编程实现简单三维图形的绘制;3、掌握三维图形显示原理。二、实验内容:1、 使用VisualC+6.0和OpenGL编写一个简单的三维程序。2、 建议有能力的学生进一步学习OpenGL的复杂功能创建效果更好的三维图形;三、实验步骤:1、 初步了解OpenGL的功能以及语法特点;2、 下载glut包,复制glut32.dll到winnt/system32文件夹下,复制glut32.lib到vc98/lib文件夹下,复制glut.h到vc98/inc

2、lude/gl文件夹下;3、 创建VC工程:选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32ConsoleApplication项,然后填入你自己的Projectname,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里;4、 为项目添加文件:为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glut32.lib、opengl32.lib,这三个文件位于VC安装目录下的lib目录(如c:programfilesdevstudiovclib)中。选中菜单Project

3、-AddToProject-Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到Project-Setting-Link-Object/libraryModules即可。点击工具条中NewTextFile按钮,新建一个文本文件,存盘为Test.c作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了;5、 请将下面的程序写入源文件Test.c;#include#includeconstintn=60;constGLfloatR=0.2f;constGLfloatPi=3.1415926536f;

4、voidmyDisplay(void) inti; glClear(GL_COLOR_BUFFER_BIT); /glShadeModel(GL_FLAT); /glShadeModel(GL_SMOOTH); /点 glPointSize(2.0); glBegin(GL_POINTS); glVertex2f(0.0f,0.0f); glEnd(); /由闭合折线组成的圆 glBegin(GL_LINE_LOOP); glColor3f(1.0,1.0,0.0); for(i=0;iAddToProject-Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。

5、这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到Project-Setting-Link-Object/libraryModules即可。点击工具条中NewTextFile按钮,新建一个文本文件,存盘为Test.c作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了;4、 请将下面的程序写入源文件Test.c;#includestaticintangle=45;/定义旋转角度voidreshape(GLsizeiw,GLsizeih) /视口变换 glViewport(0,0,w,h);/使用glViewport来定义视口。其中前两个参数定义了视口的左下脚(0,0表示最

6、左下方) /后两个参数分别是宽度和高度。 /投影变换 glMatrixMode(GL_PROJECTION);/OpenGL支持两种类型的投影变换,即透视投影和正投影。 /投影也是使用矩阵来实现的。如果需要操作投影矩阵,需要以 /GL_PROJECTION为参数调用glMatrixMode函数。 /glLoadIdentity();/重置模型观察矩阵 /glFrustum(-1.0,1.0,-1.0,1.0,1.0,10.0); /使用glFrustum函数可以将当前的可视空间设置为透视投影空间。 /用它之前先要用glMatrixMode()说明当前矩阵方式是投影GL_PROJECTION。

7、/也可以使用更常用的gluPerspective函数。 /空间可以是“正投影”的(使用glOrtho或gluOrtho2D), /也可以是“透视投影”的(使用glFrustum或gluPerspective)。 glOrtho(-1.0,1.0,-1.0,1.0,-1.0,6.0); /正射投影,同glFrustum,六个参数分别为:左右垂直切面坐标,底上水平切面坐标 /近深度切面和远深度切面的距离,可为负值。voidmyDisplay() glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); /模型变换 glMatrixMode(GL_MODEL

8、VIEW); glTranslatef(0.0f,0.0f,0.0f);/物体在三个坐标上的位移值。 glRotatef(angle,0.5f,0.5f,0.0f);/物体绕(0,0,0)到(x,y,z)的直线以逆时针旋转,参数angle表示旋转的角度。 glScalef(1.0,1.0,1.0);/三个参数分别是X、Y、Z轴向的比例变换因子。 /金字塔底边 glBegin(GL_QUADS); glVertex3f(0.5f,-0.5f,0.5f); glVertex3f(-0.5f,-0.5f,0.5f); glVertex3f(0.5f,-0.5f,-0.5f); glVertex3f(

9、-0.5f,-0.5f,-0.5f); glEnd(); glBegin(GL_TRIANGLES); /三角形前侧面 glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,0.5f,0.0f); glColor3f(0.0f,0.5f,0.0f); glVertex3f(-0.5f,-0.5f,0.5f); glColor3f(0.0f,0.0f,0.5f); glVertex3f(0.5f,-0.5f,0.5f); /三角形右侧面 glColor3f(0.0f,1.0f,0.0f); glVertex3f(0.0f,0.5f,0.0f); glColor3f

10、(0.0f,0.0f,0.5f); glVertex3f(0.5f,-0.5f,0.5f); glColor3f(0.0f,0.5f,0.0f); glVertex3f(0.5f,-0.5f,-0.5f); /三角形后侧面 glColor3f(0.0f,0.0f,0.1f); glVertex3f(0.0f,0.5f,0.0f); glColor3f(0.0f,0.5f,0.0f); glVertex3f(0.5f,-0.5f,-0.5f); glColor3f(0.0f,0.0f,0.5f); glVertex3f(-0.5f,-0.5f,-0.5f); /三角形左侧面 glColor3f(

11、1.0f,1.0f,1.0f); glVertex3f(0.0f,0.5f,0.0f); glColor3f(0.0f,0.0f,0.5f); glVertex3f(-0.5f,-0.5f,-0.5f); glColor3f(0.0f,0.5f,0.0f); glVertex3f(-0.5f,-0.5f,0.5f); glEnd(); glFlush();intmain(intargc,char*argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowPosition(0,0);

12、glutInitWindowSize(500,500); glutCreateWindow(OpenGL3D坐标转换); glutReshapeFunc(reshape); glutDisplayFunc(&myDisplay); glutMainLoop(); return0;5、 修改投影方式,观察不同的投影变换效果,适当修改绘图函数myDisplay中的内容,自由发挥并绘制三维图形;6、 完成实验报告并提交程序源代码。实验三绘制Bezier曲线一、实验目的和要求:1、 理解Bezier曲线的生成方式;2、 掌握二次Bezier曲线和三次Bezier曲线的生成算法;3、 使用C语言实现Be

13、zier曲线的绘制。二、实验内容:1、 使用VisualC+6.0和OpenGL进行二次Bezier曲线和三次Bezier曲线的绘制。三、实验步骤:1、 下载glut包,复制glut32.dll到winnt/system32文件夹下,复制glut32.lib到vc98/lib文件夹下,复制glut.h到vc98/include/gl文件夹下;2、 创建VC工程:选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32ConsoleApplication项,然后填入你自己的Projectname,如Test,回车即可。VC为你创建一个工作区(WorkSpace)

14、,你的项目Test就放在这个工作区里;3、 为项目添加文件:为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glut32.lib、opengl32.lib,这三个文件位于VC安装目录下的lib目录(如c:programfilesdevstudiovclib)中。选中菜单Project-AddToProject-Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到Project-Setting-Link-Object/libraryModules即可。点击工具条中Ne

15、wTextFile按钮,新建一个文本文件,存盘为Test.c作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了;4、 请将下面的程序写入源文件Test.c,下面的程序完成二次Bezier曲线的绘制;#include#includeintSCREEN_HEIGHT=480;/屏幕高度/跟踪鼠标点击次数,达到3次后绘制Bezier曲线intNUMPOINTS=0;/点classPointpublic: floatx,y; voidsetxy(floatx2,floaty2)x=x2;y=y2; constPoint&operator=(constPoint&rPoint)x=rPoint

16、.x;y=rPoint.y;return*this;Pointabc3;voidmyInit() glClearColor(0.0,0.0,0.0,0.0); glColor3f(1.0,0.0,0.0); glPointSize(4.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,640.0,0.0,480.0); voiddrawDot(intx,inty) glBegin(GL_POINTS); glVertex2i(x,y); glEnd(); glFlush();voiddrawLine(Pointp

17、1,Pointp2) glBegin(GL_LINES); glVertex2f(p1.x,p1.y); glVertex2f(p2.x,p2.y); glEnd(); glFlush();/计算下一个Bezier曲线上的点PointdrawBezier(PointA,PointB,PointC,doublet) PointP; P.x=pow(1-t),2)*A.x+2*t*(1-t)*B.x+pow(t,2)*C.x; P.y=pow(1-t),2)*A.y+2*t*(1-t)*B.y+pow(t,2)*C.y; returnP;voidmyMouse(intbutton,intstate

18、,intx,inty)/左键按下if(button=GLUT_LEFT_BUTTON&state=GLUT_DOWN) /存储鼠标点击的点 abcNUMPOINTS.setxy(float)x,(float)(SCREEN_HEIGHT-y); NUMPOINTS+; /绘制红点 drawDot(x,SCREEN_HEIGHT-y); /绘制Bezier曲线 if(NUMPOINTS=3) glColor3f(1.0,1.0,1.0); /绘制控制多边形 drawLine(abc0,abc1); drawLine(abc1,abc2); PointPOld=abc0; /绘制Bezier曲线段

19、,控制t的增量可以控制曲线精度 for(doublet=0.0;t=1.0;t+=0.1) PointP=drawBezier(abc0,abc1,abc2,t); drawLine(POld,P); POld=P; glColor3f(1.0,0.0,0.0); NUMPOINTS=0; voidmyDisplay() glClear(GL_COLOR_BUFFER_BIT); glFlush();intmain(intargc,char*argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(640,480); glutInitWindowPosition(100,150); glutCreateWindow(BezierCurve); glutMouseFunc(myMouse); glutDisplayFunc(myDisplay); myInit(); glutMainLoop(); return0;5、 扩展程序代码,可以支持3次Bezier曲线的绘制;

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

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