



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OpenGL 编程环境设置及举例首先创建工程,其步骤如下:1)创建一个Win32 Console Application。2)链接OpenGL libraries。在Visual C+中先单击Project,再单击Settings,再找到Link单击,最后在Object/library modules 的最前面加上OpenGL32.lib GLu32.lib GLaux.lib3)单击Project Settings中的C/C+标签,将Preprocessor definitions 中的_CONSOLE改为_WINDOWS。最后单击OK。例题1:#include #include void background(void)glClearColor(0.0,0.0,0.0,0.0);/设置背景颜色为黑色void myDisplay(void)glClear(GL_COLOR_BUFFER_BIT);/buffer设置为颜色可写glBegin(GL_TRIANGLES);/开始画三角形glShadeModel(GL_SMOOTH);/设置为光滑明暗模式glColor3f(1.0,0.0,0.0);/设置第一个顶点为红色glVertex2f(-1.0,-1.0);/设置第一个顶点的坐标为(-1.0,-1.0)glColor3f(0.0,1.0,0.0);/设置第二个顶点为绿色glVertex2f(0.0,-1.0);/设置第二个顶点的坐标为(0.0,-1.0)glColor3f(0.0,0.0,1.0);/设置第三个顶点为蓝色glVertex2f(-0.5,1.0);/设置第三个顶点的坐标为(-0.5,1.0)glEnd();/三角形结束glFlush();/强制OpenGL函数在有限时间内运行void myReshape(GLsizei w,GLsizei h)glViewport(0,0,w,h);/设置视口glMatrixMode(GL_PROJECTION);/指明当前矩阵为GL_PROJECTIONglLoadIdentity();/将当前矩阵置换为单位阵if(w = h)gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);/定义二维正视投影矩阵elsegluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);glMatrixMode(GL_MODELVIEW);/指明当前矩阵为GL_MODELVIEWint main(int argc,char * argv)/*初始化*/glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,400);glutInitWindowPosition(200,200);/*创建窗口*/glutCreateWindow(Triangle);/*绘制与显示*/background();glutReshapeFunc(myReshape);glutDisplayFunc(myDisplay);glutMainLoop();return(0);我们先看看main函数。函数中以glut开头的函数都包含在glut.h中。GLUT库的函数主要执行如处理多窗口绘制、处理回调驱动事件、生成层叠式弹出菜单、绘制位图字体和笔画字体,以及各种窗口管理等任务。 glutInit用来初始化GLUT库并同窗口系统对话协商。 glutInitDisplayMode用来确定所创建窗口的显示模式。本例中的参数GLUT_SINGLE 指定单缓存窗口,这也是缺省模式,对应的模式为GLUT_DOUBLE 双缓存窗口。参数GLUT_RGB指定颜色RGBA模式,这也是缺省模式,对应的模式为GLUT_INDEX 颜色索引模式窗口。 glutInitWindowSize 初始化窗口的大小,第一个参数为窗口的宽度,第二个参数为窗口的高度,以像素为单位。 glutInitWindowPosition 设置初始窗口的位置,第一个参数为窗口左上角x的坐标,第二个参数为窗口左上角y的坐标,以像素为单位。屏幕的左上角的坐标为(0,0),横坐标向右逐渐增加,纵坐标向下逐渐增加。 glutCreateWindow 创建顶层窗口,窗口的名字为扩号中的参数。 background() 这是自己写的函数,设置背景。其实这个函数中的语句可以写在display函数中,但为了使功能块更加清晰,所以把背景这一部分单独提出来。 glutReshapeFunc 注册当前窗口的形状变化回调函数。当改变窗口大小时,该窗口的形状改变回调函数将被调用。在此例中就是myReshape指定形状变化函数。 glutDisplayFunc 注册当前窗口的显示回调函数。当一个窗口的图像层需要重新绘制时,GLUT将调用该窗口的的显示回调函数。在此例中的mydisplay就是显示回调函数,显示回调函数不带任何参数,它负责整个图像层的绘制。我们的大部分工作将集中在这个函数中。 glutMainLoop 进入GLUT事件处理循环。glutMainLoop函数在GLUT程序中最多只能调用一次,它一旦被调用就不再返回,并且调用注册过的回调函数。所以这个函数必须放在注册回调函数的后面,此例中为glutReshapeFunc, glutDisplayFunc。 现在我们对OpenGL程序的典型的程序结构有了一个了解。首先初始化,包括对GLUT库的初始化和对窗口的设置及显示模式的设置。第二,创建窗口。第三,自己创作的核心部分。第四,glutMainLoop 进入GLUT事件处理循环。 下面,我们转到我们的创作核心。 background这个函数很简单,只有一行语句。glClearColor中的四个参数分别是红、绿、蓝和alpha值。这些值定义了窗口的颜色。这些值的范围在0,1之间。缺省值均为0。你可以改变这些值,观察背景色彩的变化。 myDisplay画了一个彩色的三角形。 glClear 将buffers设置为预先设定的值。参数GL_COLOR_BUFFER_BIT表明现在可以向buffer中写入颜色值。 glBegin和glEnd是一一对应的。这两个函数限制了一组或多组图元的顶点定义。在这两个函数中间就是你所绘制的由多个顶点组成的图元。函数的参数表明了所绘制的图元的类型。本例中的GL_TRIANGLES 表明所绘制的图形为三角形。 glShadeModel选择平坦或光滑渐变模式。GL_SMOOTH为缺省值,为光滑渐变模式,GL_FLAT为平坦渐变模式。 glColor设置当前颜色。后面跟的数字为参数个数。3表明有三个参数,分别为红、绿、蓝,4则多一个参数alpha。紧跟数字后面的字母表示数据类型。本例中的glColor3f表示三个参数,数据类型为GLfloat。 glVertex指定顶点。同样函数明中的数字表明参数个数。参数分别为x,y或x、y、z。紧跟数字后面的字母表示数据类型。本例中glVertex2f表明两个参数,数据类型为GLfloat。窗口的中心为原心,坐标为(0,0,0)。横坐标向左为负,向右为正;纵坐标向上为正,向下为负;z坐标向屏幕里为负,屏幕外为正,坐标系符合右手定则。 现在你将main函数中的glutReshapeFunc(myReshape); 注释掉,任意改变三角形顶点的坐标你会发现窗口的最左边,最右边的x值分别为-1和1,而窗口的最上端,最下端的y值分别为1和-1。由此可见glVertex中坐标的值实际上是和窗口的大小成倍数的关系。好了,现在恢复原来的程序。 glFlush迫使OpenGL函数在有限时间里运行。glFlush清空所有buffer,使所有发出的命令能在规定的时间内运行。一定不能忘记这一条语句。只有加了这一句,前面的命令才能执行。 myReshape 改变窗口的大小。 glViewport(Glint x,Glint y,GLsizei width,GLsizei height)设置视口。视口是一个矩形,x,y为视口左下角的坐标,以像素为单位,缺省值为(0,0)。width和height分别为视口的宽和高。OpenGl context第一次贴到窗口上时width和height分别设置成窗口的大小。 glMatrixMode 指明哪一个矩阵为当前矩阵。本例中GL_PROJECTION指明投影矩阵堆栈为随后的矩阵操作的目标。GL_MODELVIEW指明模型视景矩阵。 glLoadIdentity将当前矩阵置换为单位阵。 gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)定义二维正视投影矩阵。left,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全球文旅REITs发展趋势分析与本土化策略研究
- 2025股权转让合同融通协议书
- 2026届内蒙古自治区通辽市霍林郭勒市数学七年级第一学期期末检测试题含解析
- 2025授权销售合同模板正式版
- 2025建筑工程装饰材料购销合同
- 邮储银行本溪市平山区2025秋招英文群面案例角色分析
- 邮储银行绥化市绥棱县2025秋招笔试会计学专练及答案
- 邮储银行葫芦岛市龙港区2025秋招笔试法律专练及答案
- 邮储银行天津市静海区2025秋招笔试计算机基础专练及答案
- 中国银行张家界市武陵源区2025秋招笔试英语阅读理解题专练30题及答案
- 医保购药报销讲解
- 学堂在线 现代生活美学-花香茶之道 章节测试答案
- 夜间驾驶知识课件
- 陕西省西工大附中2022-2023学年七年级上学期第一次月考英语试卷(含答案)
- 个人车位租赁合同(含充电桩安装)
- 2025年人教版小学六年级上册奥林匹克数学竞赛测试题(附参考答案)
- 订购包装木箱合同协议
- 订货系统培训课件
- 商混站驾驶员泵工奖罚制度
- 复杂牙拔除的临床操作
- 7.1 力(课件)2024-2025学年人教版八年级物理下册
评论
0/150
提交评论