最新图形与多媒体-三维计算机图形学(opengl简介ppt课件.ppt





《最新图形与多媒体-三维计算机图形学(opengl简介ppt课件.ppt》由会员分享,可在线阅读,更多相关《最新图形与多媒体-三维计算机图形学(opengl简介ppt课件.ppt(75页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2一、一、OpenGL简介简介 什么是什么是OpenGL OpenGL的组成的组成 一个简单的绘图程序一个简单的绘图程序 OpenGL函数命名规范函数命名规范 NT环境中环境中OpenGL的命令解释流程的命令解释流程9OpenGL程序的基本结构程序的基本结构 第一部分是初始化部分:第一部分是初始化部分:主要是设置一些主要是设置一些OpenGL的状态开关,如颜色模式的状态开关,如颜色模式(RGBA或或ALPHA)的选择,是否作光照处理(若有)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。的话,还需设置光源的特性),深度检验,裁剪等等。 这些状态一般都用函数这些状态一
2、般都用函数glEnable(?), glDisable(?) 来设置,来设置,?表示特定的状态。表示特定的状态。10 第二部分设置观察坐标系下的取景模式和取景框大小。第二部分设置观察坐标系下的取景模式和取景框大小。主要用到三个函数:主要用到三个函数:void glViewport(left,top,right,bottom);设置在屏幕上的窗口大小,四个参数描述屏幕窗口四设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示);个角上的坐标(以象素表示); void glOrtho(left,right,bottom,top,near,far);设置投影方式为正交投影(平行投影
3、),其取景体积设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体是一个各面均为矩形的六面体; void gluPerspective(fovy,aspect,zNear,zFar);设置投影方式为透视投影,其取景体积是一个截头锥设置投影方式为透视投影,其取景体积是一个截头锥体,在这个体积内的物体投影到锥的顶点。体,在这个体积内的物体投影到锥的顶点。 11第三部分是第三部分是OpenGL的主要部分,使用的主要部分,使用OpenGL的库函数构造几何物体对象的数学描的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系,几何变换,述,包括点线面的位置和拓扑关系,几何变换
4、,光照处理等等。光照处理等等。 注:移植到使用注:移植到使用MFC框架下的框架下的Windows程序中,程序中,由于由于Windows自身有一套显示方式,需要进行自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。一些必要的改动以协调这两种不同显示方式。12绘图前的一些准备工作绘图前的一些准备工作 清除当前窗口的内容,以免影响绘图的效果清除当前窗口的内容,以免影响绘图的效果 void glClearColor ( red , green , blue , alpha );给定当前屏幕的背景设置颜色,给定当前屏幕的背景设置颜色,red , green , blue , alpha
5、 为为RGBA颜色值颜色值.13 void glClear ( mask );命令标志要清除的缓冲区。可以清除的缓冲区如下表命令标志要清除的缓冲区。可以清除的缓冲区如下表所示:所示: 缓冲区 名称 颜色缓冲区 GL_COLOR_BUFFER_BIT 深度缓冲区 GL_DEPTH_BUFFER_BIT 累加缓冲区 GL_ACCUM_BUFFER_BIT 模板缓冲区 GL_STENCIL_BUFFER_BIT14可以用可以用glClearColor, glClearDepth, glClearIndex, glClearStencil, glClearAcc函数为各自对应的缓函数为各自对应的缓冲区
6、赋值。若要同时清除多个缓冲区,使用上冲区赋值。若要同时清除多个缓冲区,使用上表中所列的表中所列的mask位或组合,在速度上要比使用位或组合,在速度上要比使用多次调用多次调用glClear函数要快得多函数要快得多。 15描述几何要素描述几何要素 按一定的顺序给出几何要素的顶点,按一定的顺序给出几何要素的顶点,glVertex命令指定一个顶点,并在生成顶点后,把当前命令指定一个顶点,并在生成顶点后,把当前颜色,纹理坐标,法线等值赋给这个顶点。颜色,纹理坐标,法线等值赋给这个顶点。 函数函数void glVertex234sifdv(coords);有时用矢量形式定义顶点,执行效率高,但是有时用矢量
7、形式定义顶点,执行效率高,但是它只能在它只能在glBegin与与glEnd之间调用才有意义。之间调用才有意义。16 glBegin标志几何要素定义的开始,标志几何要素定义的开始,glEnd函数函数则标志结束一个几何要素的定义。则标志结束一个几何要素的定义。 函数函数 void glBegin(Glenum mode);mode 的值见下表。的值见下表。17 Mode 的值 解释GL_POINTS一系列独立的点GL_LINES每两点相连成为线段GL_POLYGON简单,凸多边形的边界GL_TRIANGLES三点相连成为一个三角形GL_QUADS四点相连成为一个四边形GL_LINE_STRIP顶点
8、相连成为一系列线段GL_LINE_LOOP顶点相连成为一系列线段,连接最后一点与第一点GL_TRIANGLE_STRIP相连的三角形带GL_TRIANGLE_FAN相连的三角形扇形GL_QUAD_STRIP相连的四边形带18一个简单的绘图程序一个简单的绘图程序 例程例程#include #include #include #include void main(void)OpenAWindow();/创建一个窗口创建一个窗口InitOpenGL();/初始化初始化OpenGLglColor3f(1.0,1.0,1.0);/设置当前颜色设置当前颜色glBegin(GL_POLYGON);/开始绘图
9、开始绘图glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();/强制输出强制输出KeepTheWindowOnScreenForAWhile(); /使窗口在屏幕上保留一会使窗口在屏幕上保留一会19OpenGL函数命名规范函数命名规范void glVertex3fv(Glfloat *vertex); 前缀前缀 后缀后缀 前缀前缀 gl ,glu,aux-该函数属于哪个函数库该函数属于哪个函数库 后缀后缀 2,3,4-参数的维数参数的维数 b,s
10、,l,f,d,ub,us,ui-参数的数据类型参数的数据类型 v-以数组方式传递参数以数组方式传递参数 函数名中的单词首写字母大写函数名中的单词首写字母大写20NT环境中环境中OpenGL的命令解释流程的命令解释流程OpenGL命令OpenGL DLL客户服务器OpenGL ICD加速卡DDIWin32 DDIServer DLL视频驱动应用程序不带加速卡 带加速卡应用程序OpenGL命令OpenGL DLL客户服务器Server DLLWin32 DDI视频驱动21NT环境中环境中OpenGL的命令解释流程的命令解释流程 ICDICD是可安装的客户驱动(是可安装的客户驱动(Installab
11、le Installable Client DriverClient Driver) DLLDLL是动态联接库(是动态联接库(Dynamic Link Dynamic Link LibraryLibrary) DDIDDI是设备驱动接口(是设备驱动接口(Device Driver Device Driver InterfaceInterface) 22二、二、OpenGL图元图元 创建第一个应用程序创建第一个应用程序 图元的绘制图元的绘制 图元的属性图元的属性23创建第一个应用程序创建第一个应用程序(1/8)(1/8) 初始化显示方式初始化显示方式例:例: 将显示方式置为单缓存、直接颜色方式将
12、显示方式置为单缓存、直接颜色方式 void auxInitDisplayMode(GL_SINGLE|AUX_RGBA);void auxInitDisplayMode(Glbitfield mask); mask:GL_DOUBLE(GL_SINGLE)| AUX_RGBA(AUX_INDEX)| AUX_DEPTH |AUX_STENCIL|AUX_ACCUM24创建第一个应用程序创建第一个应用程序(2/8)(2/8) 创建窗口创建窗口初始化窗口的位置与大小初始化窗口的位置与大小 创建并显示窗口创建并显示窗口 void auxInitPosition(Glint x,GLint y,GLs
13、izei width,GLsizei height);(x,y):窗口的原点:窗口的原点width,height:窗口的宽和高:窗口的宽和高 void auxInitWindow(GLbyte *title);title:窗口标题:窗口标题 25创建第一个应用程序创建第一个应用程序(3/8)(3/8) 初始化帧缓存(颜色缓存)初始化帧缓存(颜色缓存)指定初始颜色指定初始颜色清帧缓存清帧缓存 void glClearColor(GLclampf r,GLclampf g, GLclampf b,GLclampf a);缺省值:缺省值:(0.0,0.0,0.0,0.0) void glClear(
14、GL_COLOR_BUFFER_BIT); 26创建第一个应用程序创建第一个应用程序(4/8)(4/8) 初始化深度缓存初始化深度缓存指定初始深度值指定初始深度值 清深度缓存清深度缓存void glClearDepth(GLclampd depth);缺省值:缺省值:0.0 void glClear(GL_DEPTH_BUFFER_BIT); 27创建第一个应用程序创建第一个应用程序(5/8)(5/8) 设置投影方式设置投影方式置投影方式为平行投影置投影方式为平行投影置投影方式为透视投影置投影方式为透视投影 void glOrtho(GLdouble left,GLdouble right,G
15、Ldouble bottom,GLdouble top,Gldouble near,GLdouble far); void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far); 28创建第一个应用程序创建第一个应用程序(6/8)(6/8) 指定图元的颜色指定图元的颜色 绘图绘图 强制输出强制输出void glColor*(); void glFlush(void); 29创建第一个应用程序创建第一个应用程序(7/8)(7/8)例程例程2-1#include
16、 #include #include #include void KeepTheWindowOnScreenForAWhile()_sleep(2000); void main(void)auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,500,400);auxInitWindow(Create Your Own Program);glClearColor(0.0,0.0,0.0,0.0);glClearDepth(0.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
17、30创建第一个应用程序创建第一个应用程序(8/8)(8/8)glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);glColor3f(1.0,1.0,1.0);glBegin(GL_POLYGON);glVertex3f(-0.5,-0.5,0.0);glVertex3f(-0.5,0.5,0.0);glVertex3f(0.5,0.5,0.0);glVertex3f(0.5,-0.5,0.0);glEnd(); glFlush();KeepTheWindowOnScreenForAWhile(); 31图元的绘制(图元的绘制(1/21/2) 图元的种类图元的种类点、线段、多
18、边形、矩形点、线段、多边形、矩形 图元的表示图元的表示 点:三维坐标点:三维坐标(x,y,z)齐次坐标齐次坐标(x,y,z,1) 线段:两个端点线段:两个端点 多边形:顶点序列多边形:顶点序列矩形:左下角点、右上角点矩形:左下角点、右上角点 绘制图元绘制图元 定义一个顶点定义一个顶点 void glVertex234sifdv(TYPE coords);例:例:glVertex3f(1.0,1.0,1.0);32图元的绘制(图元的绘制(2/22/2) glBegin()与与glEnd()允许在允许在glBegin()与与glEnd()之间调用的之间调用的OpenGL命令命令 void glBe
19、gin(GLenum mode);mode:GL_POINTS,GLLINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_POLYGON,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_QUADS,GL_QUAD_STRIPvoid glEnd(void);glVertex*();glColor*();glIndex();glNormal();glEvalCoord*();glCallList(),glCallLists();glTexCoord();glEdgeFlag();glMaterial(); 33图元的属性(图元的属性(1/51/5) 颜
20、色颜色 点点 大小(缺省值为大小(缺省值为1) 线段线段线宽线宽 void glColor*();void glIndex();void glPointSize(GLfloat size);void glLineWidth(GLfloat width); 34图元的属性(图元的属性(2/52/5)线型:连续线(缺省值)、点画线等线型:连续线(缺省值)、点画线等 多边形多边形绘制方式:顶点、边界、填充绘制方式:顶点、边界、填充 void glEnable(GL_LINE_STIPPLE);void glLineStipple(GLint factor,GLushort pattern);例:例:
21、patternfactor结果结果0 x00FF 10 x00FF 2 void glPolygonMode(GLenum face,GLenum mode);face:GL_FRONT_AND_BACK(缺省值)GL_FRONTGL_BACKmode:GL_POINTGL_LINEGL_FILL(缺省值) 35图元的属性(图元的属性(3/53/5) 前向面与后向面前向面与后向面 背面剔除背面剔除void glFrontFace(GLenum mode);mode:GL_CCW(缺省值)(缺省值)GL_CWvoid glCullFace(GLenum mode);mode:GL_FRONT G
22、L_BACK(缺省值)(缺省值)GL_FRONT_AND_BACK 36图元的属性(图元的属性(4/54/5)多边形填充方式多边形填充方式 均匀填色方式均匀填色方式 位图不透明方式位图不透明方式 位图透明方式位图透明方式 象素图方式象素图方式 void glEnable(GL_POLYGON_STIPPLE);void glPolygonStipple(const Glubyte *mask);mask:位图位图 37图元的属性(图元的属性(5/55/5) 标记多边形边界标记多边形边界 多边形法向多边形法向void glEdgeFlag(GLboolean flag); void glNorm
23、al3*(TYPE nx,TYPE ny,TYPE nz);void glNormal3*v(const TYPE *v); 38三、辅助库三、辅助库 初始化一个窗口初始化一个窗口 处理输入事件处理输入事件 修改查色表修改查色表 绘制简单的三维物体绘制简单的三维物体 管理后台进程管理后台进程 运行主程序运行主程序 辅助库中定义的虚键值辅助库中定义的虚键值39为什么需要辅助库为什么需要辅助库 使得使得OpenGL具有平台无关性具有平台无关性 窗口管理窗口管理 输入事件处理输入事件处理 绘制简单的三维物体绘制简单的三维物体 后台与主进程管理后台与主进程管理40窗口管理(窗口管理(1/2) 设置窗口
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 图形 多媒体 三维 计算机 图形学 opengl 简介 ppt 课件

限制150内