- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高级编程技术)函数原型宏常量定义等)函数的二进制代码)Glut下载地址:
/resources/libraries/glut/glutdlls37beta.zip
对glutdlls37beta文件解压得到5个文件:glut.dll, glut.h ,glut.lib, glut32.dll, glut32.lib。
Glut开发环境配置:
将glut.h复制到..\codeblocks\mingw\include\gl文件夹中。
将glut32.lib复制到..\codeblocks\mingw\lib文件夹中。
将glut32.dll复制到c:\windows\system32文件夹中。
打开codeblocks,在设置\编译器\链接器设置为:
搜索路径设置为:
Glut作为OpenGL编程实用工具库,它能编写带窗口的OpenGL应用程序。Glut是以OpenGL为基础的,由于在Glut的头文件glut.h已经包含OpenGL的头文件gl.h和glu.h,因此应用程序中只需要Glut的头文件。
#include gl\glut.h
开发环境配置好以后,就可以开始建立项目,绘制OpenGL图形。
在我们的Codeblocks 13.12课堂教学版本中,已经将常用的专业函数库软件包下载好,并且已经将开发环境配置好,无需大家再下载并配置include包含和lib库连接。开发步骤如下:
1、开始新建项目,选择“FreeGLUT project”。
2、“请选择FreeGLUT所在的文件夹:”时如下:
3、项目建立后,开始编写代码:
利用Glut编写OpenGL图形程序时,可以编写带窗口的应用程序。
(1)窗口管理
为了完成初始化和创建窗口的任务,需要调用5个Glut函数。
1)glutInit函数:该函数用于初始化GLUT库,必须在调用所有其他GLUT函数之前调用该函数。
2)glutInitDisplayMode函数:用来设定GLUT窗口的显示模式。
3)glutInitWindowPosition函数:指定窗口左上角在屏幕上的位置。
4)glutInitWindowSize函数:指定窗口大小。
5)glutCreatWindow函数:创建一个窗口,在调用主循环函数glutMainLoop()前,窗口不会被显示出来。
(2)显示回调函数
所谓回调函数是指被Windows系统调用的用户自定义的函数。
glutDisplayFunc是GLUT最重要的事件回调函数,每当GLUT认为需要重新显示窗口内容时,都将调用由glutDisplayFunc注册的显示回调函数。因此,应用程序将OpenGL绘制场境的处理都放到显示回调函数中。
(3)处理事件输入
当指定事件发生时(比如某按键按下时,鼠标移动时……),相应的回调函数可以注册到如下 glut函数:
glutReshapeFunc函数
用来注册窗口大小改变时调用的回调函数。
glutKeyboardFunc函数
用来注册当按下一个键(ASCII生成键)时调用的按键处理函数。
glutSpecialFunc函数
用来注册当按下一个非ASCII生成键时调用的按键处理函数。
glutMouseFunc函数
用来注册当鼠标按下或释放时调用的按键处理函数。
glutMotionFunc函数
用来注册当鼠标移动时调用的按键处理函数。
glutTimerFunc函数
用来注册一个定时器回调函数。
glutIdleFunc函数
用来注册一个在事件循环空闲时执行的回调函数。
(4)事件循环
最后需要调用glutMainLoop函数,开启GLUT主事件处理循环,此时,之前创建好的窗口及窗口内容被显示出来,程序开始处理键盘、鼠标、定时器、空闲操作等事件,直到程序终止函数才返回。
(5)绘制三维物体的函数
GLUT提供了许多三维物体的绘制函数,举例如下:
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);?线框球void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);?实心球
void glutWireCube(GLdouble size);?线框立方体void glutSolidCube(GLdouble size);?实心立方体
void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings);?线框圆环void glutSolidTorus(GLdouble innerRadius, GLdouble outerRad
文档评论(0)