OpenGL绘图相关函数94463实用教案_第1页
OpenGL绘图相关函数94463实用教案_第2页
OpenGL绘图相关函数94463实用教案_第3页
OpenGL绘图相关函数94463实用教案_第4页
OpenGL绘图相关函数94463实用教案_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021-12-912.6 OpenGL图形(txng)软件包OpenGL的主要功能OpenGL的绘制(huzh)流程OpenGL的基本语法OpenGL的程序实例第1页/共51页第一页,共52页。2021-12-92OpenGL图形(txng)软件包p OpenGL是SGI(Silicon Graphics Inc.)公司对IRIS GL进行(jnxng)改进,扩展可移植性,形成的一个跨平台开放式图形编程接口。p 目前,OpenGL标准由1992年成立的独立财团OpenGL Architecture Review Board(ARB)以投票方式产生,并制成规范文档公布。第2页/共51页第二页,

2、共52页。2021-12-93OpenGL的主要(zhyo)功能模型绘制模型观察颜色模式光照应用图像效果增强位图和图像处理纹理映射(yngsh)实时动画交互技术第3页/共51页第三页,共52页。2021-12-94OpenGL的绘制(huzh)流程工作方式一个完整的窗口(chungku)系统的OpenGL图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口(chungku)系统,第四层为OpenGL,最上面的层为应用软件。图2.34 OpenGL图形处理系统在计算机系统中的层次结构第4页/共51页第四页,共52页。2021-12-95OpenGL的绘制(huzh)流程流水线图

3、2.35 一条简化的OpenGL绘制流水线包括命令、顶点数据(shj)和纹理等数据(shj)的OpenGL命令将放在命令缓冲区中,对几何顶点数据(shj)进行必要的变换、光照计算并进行投影后进入光栅化流程,根据几何形状、颜色及纹理数据(shj)生成图像的帧缓存地址和像素点值,结果置入帧缓冲存储器中。注意:只有当缓冲区被清空时,缓冲区中的命令和数据才会传递给流水线的下一个阶段,OpenGL命令才会得到(d do)执行。第5页/共51页第五页,共52页。2021-12-96OpenGL的基本(jbn)语法相关库OpenGL核心库:gl 115个函数(hnsh)OpenGL实用程序库: glu 43

4、个函数(hnsh)OpenGL编程辅助库:aux 31个函数(hnsh)OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut 30多个函数(hnsh)Windows专用库:wgl 6个函数(hnsh)第6页/共51页第六页,共52页。2021-12-97OpenGL的基本语法命名(mng mng)规则 OpenGL函数都遵循一个命名约定,即采用以下格式: 例如函数glColor3f(),gl表示(biosh)这个函数来自库gl.h,根命令Color表示(biosh)该函数用于颜色设定,3f表示(biosh)这个函数采用了三个浮点数参数。 符号常量的表示

5、(biosh):GL开头,下划线(_)分开,大写。 例如:GL_RGB,GL_POLYGON等第7页/共51页第七页,共52页。2021-12-98OpenGL的基本(jbn)语法数据类型OpenGL数据类型数据类型内部表示法内部表示法定义为定义为C类型类型C字面值后缀字面值后缀GLbyte8位整数signed charBGLshort16位整数shortSGLint,GLsizei32位整数longLGLfloat,GLclampf32位浮点数floatFGLdouble,GLclampd64位浮点数doubleDGLubyte,GLboolean8位无符号整数unsigned charUb

6、GLshort16位无符号整数unsigned shortUsGLuint,GLenum,GLbitfield32位无符号整数unsigned longUi表2.2 OpenGL的数据类型第8页/共51页第八页,共52页。2021-12-99OpenGL程序(chngx)实例头文件包含利用OpenGL实现图形绘制,首先要引入OpenGL核心(hxn)库以及其他需要使用的库的头文件。glut保证了gl.h和glu.h被正确包含。 #include #include 第9页/共51页第九页,共52页。2021-12-910OpenGL程序实例(shl)窗口管理初始化(glutInit )创建窗口(

7、glutCreateWindow)设定窗口的显示模式(glutInitDisplayMode)指定窗口的位置和大小(glutInitWindowPosition和glutInitWindowSize )指定窗口的显示内容(nirng)函数(glutDisplayFunc)运行框架(glutMainLoop)第10页/共51页第十页,共52页。2021-12-911OpenGL程序(chngx)实例绘制图形指定窗口背景色( glClearColor)颜色管理(gunl),使用RGB颜色模型。一种颜色用红、绿、蓝三种颜色成分混合而成,每种颜色成分使用0.0到1.0之间的任意有效浮点数来表示颜色值(

8、见下页)。第11页/共51页第十一页,共52页。2021-12-912OpenGL程序实例绘制(huzh)图形混合色红色成分(R)绿色成分(G)蓝色成分(B)黑0.00.00.0红1.00.00.0绿0.01.00.0黄1.01.00.0蓝0.00.01.0紫1.00.01.0青0.01.01.0深灰0.250.250.25浅灰0.750.750.75棕0.600.400.12南瓜橙0.980.6250.12粉红0.980.040.70紫红0.600.400.70白1.01.01.0表2.2 OpenGL的一些(yxi)常用混合色第12页/共51页第十二页,共52页。2021-12-913Op

9、enGL程序实例绘制(huzh)图形刷新窗口的缓冲区 glClear(GL_COLOR_BUFFER_BIT);设定投影参数(将三维图形投影到显示(xinsh)窗口) glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0);绘制图形 glRectf(50.0f, 100.0f, 150.0f, 50.0f);第13页/共51页第十三页,共52页。2021-12-914第三章第14页/共51页第十四页,共52页。2021-12-9153.4 OpenGL3.4 OpenGL实现实现(shxin)(shxin)橡皮筋橡皮筋技术技术橡

10、皮筋技术的实现方法利用颜色(yns)的异或操作,对原有图形并不是擦除,而是再绘制一条同样的直线段并与原图形进行异或操作,此时原图形会从屏幕上消失;利用双缓存技术,绘制图形时分别绘制到两个缓存,交替显示。第15页/共51页第十五页,共52页。2021-12-916OpenGLOpenGL实现实现(shxin)(shxin)橡皮筋技术橡皮筋技术鼠标实现鼠标响应函数 glutMouseFunc鼠标移动相应(xingyng)函数 glutMotionFunc glutPassiveMotionFunc第16页/共51页第十六页,共52页。2021-12-917键盘实现(shxin)键盘相应函数 glu

11、tKeyboardFuncOpenGL实现(shxin)橡皮筋技术第17页/共51页第十七页,共52页。2021-12-9183.5 OpenGL3.5 OpenGL实现实现(shxin)(shxin)拾取操拾取操作作 设置拾取缓冲区 void glSelectBuffer(GLsizei n,GLunint *buff); 进入(jnr)选择模式 GLint glRenderMode(GLenum mode);第18页/共51页第十八页,共52页。2021-12-91919OpenGLOpenGL实现实现(shxin)(shxin)拾取操作拾取操作名字堆栈(duzhn)操作初始化名字堆栈(d

12、uzhn)(glInitNames)将一个名字压入堆栈(duzhn)(glPushName)替换名字堆栈(duzhn)的栈顶元素(glLoadName)将栈顶元素弹出(glPopName)第19页/共51页第十九页,共52页。2021-12-92020设置合适的变换过程 gluPickMatrix(xPick,yPick,widthPick, heightPick,*vp);为每个图元分配名字并绘制切换(qi hun)回渲染模式分析选择缓冲区中的数据OpenGL实现拾取(shq)操作第20页/共51页第二十页,共52页。2021-12-9213.6 OpenGL3.6 OpenGL中的菜单中的

13、菜单(ci dn)(ci dn)功能功能菜单注册函数 glutCreateMenu(ProcessMenu);在菜单中加入菜单项 void glutAddMenuEntry(char *name, GLint value);将菜单与某个鼠标按键(n jin)关联 void glutAttachMenu(button);第21页/共51页第二十一页,共52页。2021-12-922第四章第22页/共51页第二十二页,共52页。2021-12-923OpenGLOpenGL中层次模型的实现中层次模型的实现(shxin)(shxin)o 显示列表的创建(chungjin)o glNewList( l

14、istID, listMode );o glutSolidCube(2.0);oo glEndList();o 显示列表的执行o void glListBase(GLuint offsetValue);第23页/共51页第二十三页,共52页。2021-12-924o 多级显示列表o OpenGL支持(zhch)创建多级显示列表,即在glNewList和glEndLsit函数对之间允许调用glCallList函数来执行其他显示列表。o 显示列表的删除o void glDeleteLists(GLuint listID, GLsizei range);OpenGL中层次模型的实现(shxin)第2

15、4页/共51页第二十四页,共52页。2021-12-92525GLUT库中的多面体函数(hnsh)OpenGL中的实体模型函数(hnsh)函数函数说明说明glutSolidTetrahedron( )glutWireTetrahedron( )绘制中心位于世界坐标系原点的实心四面体和线框四面体,四面绘制中心位于世界坐标系原点的实心四面体和线框四面体,四面体的半径为体的半径为 。glutSolidCube(size)glutWireCube(size)绘制中心位于世界坐标系原点的实心立方体和线框立方体,立方绘制中心位于世界坐标系原点的实心立方体和线框立方体,立方体的半径为体的半径为size,si

16、ze是一个双精度浮点值。是一个双精度浮点值。glutSolidOctahedron ( )glutWireOctahedron ( )绘制中心位于世界坐标系原点的实心八面体和线框八面体,八面绘制中心位于世界坐标系原点的实心八面体和线框八面体,八面体的半径为体的半径为1.0。glutSolidDodecahedron( )glutWireDodecahedron( )绘制中心位于世界坐标系原点的实心绘制中心位于世界坐标系原点的实心12面体和线框面体和线框12面体,面体,12面面体的半径为体的半径为 。glutSolidIcosahedron( )glutWireIcosahedron( )绘制中

17、心位于世界坐标系原点的实心绘制中心位于世界坐标系原点的实心20面体和线框面体和线框20面体,面体,20面面体的半径为体的半径为1.0。表4.1 GLUT生成规则(guz)多面体的函数第25页/共51页第二十五页,共52页。2021-12-92626GLUT库中的二、三次曲面绘制实体(sht)或线框球面 void glutSolidSphere/glutWireSphere (GLdouble radius, GLint slices, GLint stacks);绘制实体(sht)或线框圆锥面 void glutSolidCone/glutWireCone (GLdouble radius,

18、GLdouble height, GLint slices, GLint stacks);OpenGL中的实体模型函数(hnsh)第26页/共51页第二十六页,共52页。2021-12-92727绘制(huzh)实体或线框圆环 void glutSolidTorus/ glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint slices,GLint stacks);绘制(huzh)实体或线框茶壶 void glutSolidTeapot/glutWireTeapot (GLdouble size);OpenGL中的实体模型

19、函数(hnsh)第27页/共51页第二十七页,共52页。2021-12-92828GLU二次曲面函数定义(dngy)一个二次曲面 GLUquadricObj *sphere;激活二次曲面绘制器 sphere = gluNewQuadric( );指定二次曲面的绘制方式 gluQuadricDrawStyle(sphere, GLU_LINE); OpenGL中的实体模型函数(hnsh)第28页/共51页第二十八页,共52页。2021-12-92929 绘制(huzh)二次曲面gluSphere(sphere, radius, slices, stacks);gluCylinder(sphere

20、,baseRadius,topRadius, height, slices, stacks);gluDisk(sphere,innerRadius,outerRadius, slices, stacks); OpenGL中的实体模型函数(hnsh)第29页/共51页第二十九页,共52页。2021-12-9304.3 非规则非规则(guz)对象的表示对象的表示 分形几何分形几何 形状语法形状语法 基于分数基于分数(fnsh)维理论的随机模型维理论的随机模型 基于物理的模型基于物理的模型 粒子系统模型粒子系统模型 数据场可视化数据场可视化第30页/共51页第三十页,共52页。2021-12-931

21、OpenGLOpenGL中层次模型的实现中层次模型的实现(shxin)(shxin)o 显示(xinsh)列表的创建o glNewList( listID, listMode );o glutSolidCube(2.0);oo glEndList();o 显示(xinsh)列表的执行o void glListBase(GLuint offsetValue);第31页/共51页第三十一页,共52页。2021-12-932o 多级显示(xinsh)列表o OpenGL支持创建多级显示(xinsh)列表,即在glNewList和glEndLsit函数对之间允许调用glCallList函数来执行其他显

22、示(xinsh)列表。o 显示(xinsh)列表的删除o void glDeleteLists(GLuint listID, GLsizei range);OpenGL中层次模型的实现(shxin)第32页/共51页第三十二页,共52页。2021-12-933第五章第33页/共51页第三十三页,共52页。2021-12-9345.8 在OpenGL中绘图(hu t)p点的绘制p直线(zhxin)的绘制p多边形面的绘制pOpenGL中的字符函数pOpenGL中的反走样第34页/共51页第三十四页,共52页。2021-12-935点的绘制(huzh)p点的绘制p glBegin(GL_POINTS

23、);p glVertex3f(0.0f, 0.0f, 0.0f);p glVertex3f(10.0f, 0.0f, 0.0f);p glEnd();p点的属性(shxng)(大小)p void glPointSize(GLfloat size);第35页/共51页第三十五页,共52页。2021-12-936(a)GL_LINES画线模式(msh) (b)GL_LINE_STRIP画线模式(msh) (c)GL_LINE_LOOP画线模式(msh)图5-57 OpenGL画线模式(msh)直线(zhxin)的绘制p直线的绘制(huzh)模式pGL_LINESpGL_LINE_STRIPpGL_

24、LINE_LOOP第36页/共51页第三十六页,共52页。2021-12-937直线(zhxin)的绘制p直线(zhxin)的属性p线宽p void glLineWidth(GLfloat width)p线型p glEnable(GL_LINE_STIPPLE);p glLineStipple(GLint factor,GLushort pattern);第37页/共51页第三十七页,共52页。2021-12-938直线(zhxin)的绘制图5-58 画线模式用于构造(guzo)线段第38页/共51页第三十八页,共52页。2021-12-939多边形面的绘制(huzh)p三角形面的绘制(huz

25、h)pGL_TRIANGLESpGL_TRIANGLE_STRIPpGL_TRIANGLE_FANp四边形面的绘制(huzh)pGL_QUADSpGL_QUADS_STRIPp多边形面的绘制(huzh)(GL_POLYGON)第39页/共51页第三十九页,共52页。2021-12-940多边形面的绘制(huzh)p多边形面的绘制规则p所有多边形都必须是平面的。p多边形的边缘决不能相交,而且(r qi)多边形必须是凸的。p解决:对于非凸多边形,可以把它分割成几个凸多边形(通常是三角形),再将它绘制出来。第40页/共51页第四十页,共52页。2021-12-941多边形面的绘制(huzh)p问题:

26、轮廓图形状态会看到组成大表面的所有小三角形。处理OpenGL提供了一个(y )特殊标记来处理这些边缘,称为边缘标记。p glEdgeFlag(True)p glEdgeFlag(False)41第41页/共51页第四十一页,共52页。2021-12-942多边形面的属性(shxng)p多边形面的正反属性(shxng)(绕法)p 指定顶点时顺序和方向的组合称为“绕法”。绕法是任何多边形图元的一个重要特性。一般默认情况下,OpenGL认为逆时针绕法的多边形是正对着的。 p glFrontFace(GL_CW);第42页/共51页第四十二页,共52页。2021-12-943多边形面的属性(shxng

27、)p多边形面的颜色pglShadeModel(GL_FLAT) 用指定多边形最后一个顶点时的当前颜色作为填充多边形的纯色,唯一例外是GL_POLYGON图元,它采用的是第一个顶点的颜色。p glShadeModel(GL_SMOOTH) 从各个顶点给三角形投上光滑(gung hu)的阴影,为各个顶点指定的颜色之间进行插值。第43页/共51页第四十三页,共52页。2021-12-944多边形面的属性(shxng)p多边形面的显示模式p glPolygonMode(GLenum face,GLenum mode);p参数face用于指定多边形的哪一个(y )面受到模式改变的影响。p参数mode用于

28、指定新的绘图模式。44第44页/共51页第四十四页,共52页。2021-12-945多边形面的属性(shxng)p多边形面的填充p 多边形面既可以(ky)用纯色填充,也可以(ky)用3232的模板位图来填充。p void glPolygonStipple(const GLubyte *mask); glEnable(GL_POLYGON_STIPPLE);45第45页/共51页第四十五页,共52页。2021-12-946多边形面的属性(shxng)p多边形面的法向量p法向量是垂直于面的方向上点的向量,它确定了几何(j h)对象在空间中的方向。p在OpenGL中,可以为每个顶点指定法向量。p v

29、oid glNormal3bsidf (TYPE nx, TYPE ny, TYPE nz);p void glNormal3bsidfv (const TYPE* v);46第46页/共51页第四十六页,共52页。2021-12-947OpenGL中的字符(z f)函数pGLUT位图字符(z f)p void glutBitmapCharacter(void *font, int character);pGLUT矢量字符(z f)p void glutStrokeCharacter(void *font, int character);47第47页/共51页第四十七页,共52页。2021-12-948OpenGL中的反走样(zu yng)p启用反走样(zu yng)p glEnable(primitiveType);p启用OpenGL颜色混和并指定颜色混合函数p glEnable(GL_BLEND);p glBlendFunc(GL_SCR_ALPHA,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论