OpenGL绘图相关函数-2.ppt_第1页
OpenGL绘图相关函数-2.ppt_第2页
OpenGL绘图相关函数-2.ppt_第3页
OpenGL绘图相关函数-2.ppt_第4页
OpenGL绘图相关函数-2.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

第二章 Date1 2.6 OpenGL图形软件包 OpenGL的主要功能 OpenGL的绘制流程 OpenGL的基本语法 OpenGL的程序实例 Date2 OpenGL图形软件包 p OpenGL是SGI(Silicon Graphics Inc.)公司对IRIS GL 进行改进,扩展可移植性,形成的一个跨平台开放式图 形编程接口。 p 目前,OpenGL标准由1992年成立的独立财团OpenGL Architecture Review Board(ARB)以投票方式产生, 并制成规范文档公布。 Date3 OpenGL的主要功能 模型绘制 模型观察 颜色模式 光照应用 图像效果增强 位图和图像处理 纹理映射 实时动画 交互技术 Date4 OpenGL的绘制流程工作方式 一个完整的窗口系统的OpenGL 图形处理系统的结构为:最底 层为图 形硬件,第二层为操作系 统,第三层为窗口系统,第四层 为OpenGL,最上面的层为应 用 软件。 图2.34 OpenGL图形处理系 统在计算机系统中的层次结构 Date5 OpenGL的绘制流程流水线 图2.35 一条简化的OpenGL绘制流水线 包括命令、顶点数据和纹理等数据的OpenGL命令将放在命令 缓冲区中,对几何顶点数据进行必要的变换、光照计算并进行 投影后进入光栅化流程,根据几何形状、颜色及纹理数据生成 图像的帧缓存地址和像素点值,结果置入帧缓冲存储器中。 注意:只有当缓冲区被清空时,缓冲区中的命令和数据才会传递给流水 线的下一个阶段,OpenGL命令才会得到执行。 Date6 OpenGL的基本语法相关库 OpenGL核心库:gl 115个函数 OpenGL实用程序库: glu 43个函 数 OpenGL编程辅助库:aux 31个函 数 OpenGL实用程序工具包(OpenGL utility toolkit, GLUT):glut 30多个函数 Windows专用库:wgl 6个函数 Date7 OpenGL的基本语法命名规则 OpenGL函数都遵循一个命名约定,即采用以下格式: 例如函数glColor3f(),gl表示这个函数来自库gl.h, 根命令Color表示该函数用于颜色设定,3f表示这个函数采 用了三个浮点数参数。 符号常量的表示:GL开头,下划线(_)分开,大写。 例如:GL_RGB,GL_POLYGON等 Date8 OpenGL的基本语法数据类型 OpenGL数据类类型内部表示法定义为义为 C类类型 C字面值值后 缀缀 GLbyte8位整数signed charB GLshort16位整数shortS GLint,GLsizei32位整数longL GLfloat,GLclampf32位浮点数floatF GLdouble,GLclampd64位浮点数doubleD GLubyte,GLboolean8位无符号整数unsigned charUb GLshort16位无符号整数unsigned shortUs GLuint,GLenum, GLbitfield 32位无符号整数unsigned longUi 表2.2 OpenGL的数据类型 Date9 OpenGL程序实例头文件包含 利用OpenGL实现图 形绘制,首先要引入OpenGL核 心库以及其他需要使用的库的头文件。 glut保证了gl.h和glu.h被正确包含。 #include #include Date10 OpenGL程序实例窗口管理 初始化(glutInit ) 创建窗口(glutCreateWindow) 设定窗口的显示模式(glutInitDisplayMode) 指定窗口的位置和大小(glutInitWindowPosition和 glutInitWindowSize ) 指定窗口的显示内容函数(glutDisplayFunc) 运行框架(glutMainLoop) Date11 OpenGL程序实例绘制图形 指定窗口背景色( glClearColor) 颜色管理,使用RGB颜色模型。一种颜色用红、绿 、蓝三种颜色成分混合而成,每种颜色成分使用0.0 到1.0之间的任意有效浮点数来表示颜色值(见下页 )。 Date12 OpenGL程序实例绘制图形 混合色红色成分(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的一些常用混合色 Date13 OpenGL程序实例绘制图形 刷新窗口的缓冲区 glClear(GL_COLOR_BUFFER_BIT); 设定投影参数(将三维图形投影到显示窗口) glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); 绘制图形 glRectf(50.0f, 100.0f, 150.0f, 50.0f); Date14 第三章 Date15 3.4 OpenGL实现橡皮筋技术 橡皮筋技术的实现方法 l利用颜色的异或操作,对原有图形并不是擦除 ,而是再绘制一条同样的直线段并与原图形进 行异或操作,此时原图形会从屏幕上消失; l利用双缓存技术,绘制图形时分别绘制到两个 缓存,交替显示。 Date16 OpenGL实现橡皮筋技术 鼠标实现 l鼠标响应函数 glutMouseFunc l鼠标移动相应函数 glutMotionFunc glutPassiveMotionFunc Date17 键盘实现 l键盘相应函数 glutKeyboardFunc OpenGL实现橡皮筋技术 Date18 3.5 OpenGL实现拾取操作 设置拾取缓冲区 void glSelectBuffer(GLsizei n,GLunint *buff); 进入选择模式 GLint glRenderMode(GLenum mode); Date19 20 OpenGL实现拾取操作 名字堆栈操作 l初始化名字堆栈(glInitNames) l将一个名字压入堆栈(glPushName) l替换名字堆栈的栈顶元素(glLoadName) l将栈顶元素弹出(glPopName) Date20 21 设置合适的变换过程 gluPickMatrix(xPick,yPick,widthPick, heightPick,*vp); 为每个图元分配名字并绘制 切换回渲染模式 分析选择缓冲区中的数据 OpenGL实现拾取操作 Date21 3.6 OpenGL中的菜单功能 菜单注册函数 glutCreateMenu(ProcessMenu); 在菜单中加入菜单项 void glutAddMenuEntry(char *name, GLint value); 将菜单与某个鼠标按键关联 void glutAttachMenu(button); Date22 第四章 Date23 OpenGL中层次模型的实现 o 显示列表的创建 glNewList( listID, listMode ); glutSolidCube(2.0); glEndList(); o 显示列表的执行 void glListBase(GLuint offsetValue); Date24 o 多级显示列表 OpenGL支持创建多级显示列表,即在glNewList 和glEndLsit函数对之间允许调用glCallList函数来 执行其他显示列表。 o 显示列表的删除 void glDeleteLists(GLuint listID, GLsizei range); OpenGL中层次模型的实现 Date25 26 GLUT库中的多面体函数 OpenGL中的实体模型函数 函数说说明 glutSolidTetrahedron( ) glutWireTetrahedron( ) 绘绘制中心位于世界坐标标系原点的实实心四面体和线线框四面体,四面 体的半径为为 。 glutSolidCube(size) glutWireCube(size) 绘绘制中心位于世界坐标标系原点的实实心立方体和线线框立方体,立方 体的半径为为size,size是一个双精度浮点值值。 glutSolidOctahedron ( ) glutWireOctahedron ( ) 绘绘制中心位于世界坐标标系原点的实实心八面体和线线框八面体,八面 体的半径为为1.0。 glutSolidDodecahedro n( ) glutWireDodecahedro n( ) 绘绘制中心位于世界坐标标系原点的实实心12面体和线线框12面体,12面 体的半径为为 。 glutSolidIcosahedron( ) glutWireIcosahedron( ) 绘绘制中心位于世界坐标标系原点的实实心20面体和线线框20面体,20面 体的半径为为1.0。 表4.1 GLUT生成规则多面体的函数 Date26 27 GLUT库中的二、三次曲面 l绘制实体或线框球面 void glutSolidSphere/glutWireSphere (GLdouble radius, GLint slices, GLint stacks); l绘制实体或线框圆锥面 void glutSolidCone/glutWireCone (GLdouble radius, GLdouble height, GLint slices, GLint stacks); OpenGL中的实体模型函数 Date27 28 l绘制实体或线框圆环 void glutSolidTorus/ glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint slices,GLint stacks); l绘制实体或线框茶壶 void glutSolidTeapot/glutWireTeapot (GLdouble size); OpenGL中的实体模型函数 Date28 29 GLU二次曲面函数 l定义一个二次曲面 GLUquadricObj *sphere; l激活二次曲面绘制器 sphere = gluNewQuadric( ); l指定二次曲面的绘制方式 gluQuadricDrawStyle(sphere, GLU_LINE); OpenGL中的实体模型函数 Date29 30 l绘制二次曲面 gluSphere(sphere, radius, slices, stacks); gluCylinder(sphere,baseRadius,topRadius, height, slices, stacks); gluDisk(sphere,innerRadius,outerRadius, slices, stacks); OpenGL中的实体模型函数 Date30 4.3 非规则对象的表示 分形几何 形状语法 基于分数维理论的随机模型 基于物理的模型 粒子系统模型 数据场可视化 Date31 OpenGL中层次模型的实现 o 显示列表的创建 glNewList( listID, listMode ); glutSolidCube(2.0); glEndList(); o 显示列表的执行 void glListBase(GLuint offsetValue); Date32 o 多级显示列表 OpenGL支持创建多级显示列表,即在glNewList 和glEndLsit函数对之间允许调用glCallList函数来 执行其他显示列表。 o 显示列表的删除 void glDeleteLists(GLuint listID, GLsizei range); OpenGL中层次模型的实现 Date33 第五章 Date34 5.8 在OpenGL中绘图 p点的绘制 p直线的绘制 p多边形面的绘制 pOpenGL中的字符函数 pOpenGL中的反走样 Date35 点的绘制 p点的绘制 glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(10.0f, 0.0f, 0.0f); glEnd(); p点的属性(大小) void glPointSize(GLfloat size); Date36 (a)GL_LINES画线模式 (b)GL_LINE_STRIP画线模式 (c)GL_LINE_LOOP画线模式 图5-57 OpenGL画线模式 直线的绘制 p直线的绘制模式 nGL_LINES nGL_LINE_STRIP nGL_LINE_LOOP Date37 直线的绘制 p直线的属性 n线宽 void glLineWidth(GLfloat width) n线型 glEnable(GL_LINE_STIPPLE); glLineStipple(GLint factor,GLushort pattern); Date38 直线的绘制 图5-58 画线模式用于构造线段 Date39 多边形面的绘制 p三角形面的绘制 nGL_TRIANGLES nGL_TRIANGLE_STRIP nGL_TRIANGLE_FAN p四边形面的绘制 nGL_QUADS nGL_QUADS_STRIP p多边形面的绘制(GL_POLYGON) Date40 多边形面的绘制 p多边形面的绘制规则 n所有多边形都必须是平面的。 n多边形的边缘决不能相交,而且多边形必须 是凸的。 p解决:对于非凸多边形,可以把它分割成几个 凸多边形(通常是三角形),再将它绘制出来 。 Date41 多边形面的绘制 p问题:轮廓图形状态会看到组成大表面的所有 小三角形。处理OpenGL提供了一个特殊标记 来处理这些边缘,称为边缘标记。 glEdgeFlag(True) glEdgeFlag(False) 42 Date42 多边形面的属性 p多边形面的正反属性(绕法) 指定顶点时顺序和方向的组合称为“绕 法”。绕法是任何多边形图元的一个重要特 性。一般默认情况下,OpenGL认为逆时 针绕法的多边形是正对着的。 glFrontFace(GL_CW); Date43 多边形面的属性 p多边形面的颜色 nglShadeModel(GL_FLAT) 用指定多边形最 后一个顶点时的当前颜色作为填充多边形 的纯色,唯一例外是GL_POLYGON图元, 它采用的是第一个顶点的颜色。 n glShadeModel(GL_SMOOTH) 从各个顶点 给三角形投上光滑的阴影,为各个顶点指 定的颜色之间进行插值。 Date44 多边形面的属性 p多边形面的显示模式 glPolygonMode(GLenum face, GLenum mode); n参数face用于指定多边形的哪一个面受到 模式改变的影响。 n参数mode用于指定新的绘图模式。 45 Date45 多边形面的属性 p多边形面的填充 多边形面既可以用纯色填充,也可以用 3232的模板位图来填充。 void glPolygonStipple(const GLubyte *mask); glEnable(GL_POLYGON_STIPPLE); 46 Date46 多边形面的属性 p多边形面的法向量 n法向量是垂直于面的方向上点的向量,它确定 了几何对象在空间中的方向。 n在OpenGL中,可以为每个顶点指定法向量。 void glNormal3bsidf (TYPE nx, TYPE ny, TYPE nz); void glNormal3bsidfv (const TYPE* v); 47 Date47 OpenGL中的字符函数 pGLUT位图字符 void glutBitmapCharacter(void *font, int character); pGLUT矢量字符 void glutStrokeCharacter(void *font, int character); 48 Date

温馨提示

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

评论

0/150

提交评论