虚拟现实建模技术课件

上传人:txadgkn****dgknqu... 文档编号:242029477 上传时间:2024-08-10 格式:PPT 页数:50 大小:314.84KB
返回 下载 相关 举报
虚拟现实建模技术课件_第1页
第1页 / 共50页
虚拟现实建模技术课件_第2页
第2页 / 共50页
虚拟现实建模技术课件_第3页
第3页 / 共50页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 虚拟现实建模工具,第四章 虚拟现实建模工具,1,虚拟现实系统图形程序设计接口,OpenGL,虚拟现实建模语言,VRML,虚拟现实建模工具,3Dsmax,虚拟现实系统图形程序设计接口,2,虚拟环境构建主要是应用,三维图形,技术,包括,图形的构建,图形的显示,4.1虚拟现实系统图形程序设计接口,虚拟环境构建主要是应用三维图形技术,包括4.1虚拟现实系统图,3,在虚拟现实系统中,模型是十分复杂的;,显示:,软件:3D图形应用程序,硬件:3D图形加速卡,接口:三维图形应用程序接口(3D API),沟通3D图形应用程序和3D图形加速卡,在虚拟现实系统中,模型是十分复杂的;,4,三维图形编程接口(3D API)多达50多种,选择大公司和在图形应用方面获得广泛认可的公司提供的三维API引擎;,OpenGL,Quick-Draw 3D,Direct3D,三维图形编程接口(3D API)多达50多种,5,OpenGL,:SGI,优点:适用于跨平台的应用开发,可运行在Unix、Windows XP、Windows NT、及Mac平台上,缺点:不能完成某些高级功能,如某些文件操作功能,OpenGL:SGI,6,Quick-Draw 3D(QD3D):Apple公司,优点:跨平台的应用开发,具有某些高级功能;是面向对象的图形系统;,Quick-Draw 3D(QD3D):Apple公司,7,Direct3D:,Microsoft1996年发布的三维API,是交互式媒体技术家族DirectX中的一员;,具有某些高级功能;,Direct3D:,8,为什么是OpenGL?,(1)OpenGL:性能优越,计算环境广泛,个人计算机-工作站-超级计算机;,(2)虚拟环境平台Open Inventor、World Tool Kit、Mulitgen CreatorVega是以OpenGL为基础开发的;,为什么是OpenGL?(1)OpenGL:性能优越,计算环境,9,(3)许多在计算机界具有领导地位的计算机公司纷纷采用OpenGL作为三维图形应用程序设计界面,OpenGL程序具有广泛的移植性;,(3)许多在计算机界具有领导地位的计算机公司纷纷采用Open,10,4.1,OpenGL简介,什么是OpenGL,OpenGL的组成,OpenGL的工作流程,OpenGL的基本操作,OpenGL程序的基本结构,4.1 OpenGL简介什么是OpenGL,11,一、什么是OpenGL?,功能强大的图形库:可开发多种特殊视觉(如光照,纹理,透明,阴影)的三维图形;,软硬件平台无关的跨平台三维图形引擎,运行于多种窗口系统之上;,包含图元生成、投影、光照、光栅化等图形显示过程所需的功能,一、什么是OpenGL?功能强大的图形库:可开发多种特殊视觉,12,OpenGL的发展历史:,前身是由SGI公司为其图形工作站开发的IRIS GL,是一个工业标准的三维图形软件接口。,向其他平台移植时,开发了OpenGL,有GL的功能,而且是开放的,适用于多种硬件平台及操作系统,,用户可以创建出接近光线跟踪的高质量静止或动画的三维彩色图象,而且是要比光线跟踪算法快一个数量级。,OpenGL的发展历史:,13,二、OpenGL的组成,OpenGL库,包括115个基本函数,函数以gl开头,例:glColor3f(),glTranslate3f().,完成图元的定义、几何变换、投影等功能,二、OpenGL的组成,14,OpenGL实用库,实用函数43个,函数以glu开头,例:gluPerspective();,完成更高层的图形处理如曲线曲面的生成、图象操作等,OpenGL实用库,15,OpenGL辅助库,包括函数31个,函数以aux开头,例:auxInitWindow();,主要用于窗口管理,OpenGL辅助库,16,主要特点,OpenGL可以在网络上工作,即,客户机/服务器,型,客户机:显示图形,服务器:运行图形程序,客户机与服务器可以不同类型,但两者服从相同的协议。,OpenGL的,硬件无关性,好的移植性,主要特点OpenGL可以在网络上工作,即客户机/服务器型,17,三、OpenGL基本工作流程,(1)根据基本图形单元(点,线,多边形),建立景物模型,,并对景物模型进行数学描述。,(2)在三维空间中,放置景物模型,,并设置视点。,(3)计算模型中物体的,颜色,(直接定义或由光照及纹理间接给出),(4),光栅化,,把模型数学描述和颜色信息转换至屏幕上,在上述过程中,可执行,消隐处理,等操作,三、OpenGL基本工作流程(1)根据基本图形单元(点,线,,18,四、OpenGL的基本操作,图元绘制,图元属性,OpenGL变换(几何变换、投影变换、裁剪变换、视口变换),OpenGL图形的描绘,四、OpenGL的基本操作图元绘制,19,1、图元绘制,图元的表示,点:三维坐标(x,y,z),齐次坐标(x,y,z,1),线段:两个端点,多边形:顶点序列,矩形:左下角点、右上角点,绘制图元,定义一个顶点,void glVertex234sifdv(TYPE coords);,例:,glVertex3f(1.0,1.0,1.0);,1、图元绘制图元的表示例:glVertex3f(1.0,1.,20,绘制函数要在glBegin与glEnd之间调用。,glBegin标志几何要素定义的开始,glEnd函数则标志结束一个几何要素的定义。,函数,void glBegin(Glenum mode);,mode 的值见下表。,绘制函数要在glBegin与glEnd之间调用。,21,Mode 的值,解释,GL_POINTS,一系列独立的点,GL_LINES,每两点相连成为线段,GL_POLYGON,简单,凸多边形的边界,GL_TRIANGLES,三点相连成为一个三角形,GL_QUADS,四点相连成为一个四边形,GL_LINE_STRIP,顶点相连成为一系列线段,GL_LINE_LOOP,顶点相连成为一系列线段,连接最后一点与第一点,GL_TRIANGLE_STRIP,相连的三角形带,GL_TRIANGLE_FAN,相连的三角形扇形,GL_QUAD_STRIP,相连的四边形带,Mode 的值 解释GL_POINTS一系,22,允许在,glBegin(),与,glEnd(),之间调用的,OpenGL,命令,glVertex*();,glColor*();,glIndex();,glNormal();,glEvalCoord*();,glCallList(),glCallLists();,等,允许在glBegin()与glEnd()之间调用的OpenG,23,2、图元的属性(1/5),颜色,点,大小(缺省值为1),void glColor*();,void glIndex();,void glPointSize(GLfloat size);,2、图元的属性(1/5)颜色void glColor*();,24,线段,线宽,线型:连续线(缺省值)、点画线等,void glLineWidth(GLfloat width);,void glEnable(GL_LINE_STIPPLE);,void glLineStipple(GLint factor,GLushort pattern);,例:patternfactor结果,0 x00FF 1,0 x00FF 2,线段void glLineWidth(GLfloat wid,25,图元的属性(2/5),多边形,绘制方式:顶点、边界、填充,void glPolygonMode(GLenum face,GLenum mode);,face:GL_FRONT_AND_BACK(缺省值),GL_FRONT,GL_BACK,mode:GL_POINT,GL_LINE,GL_FILL(,缺省值),图元的属性(2/5)void glPolygonMode(G,26,图元的属性(3/5),前向面与后向面,背面剔除,void glFrontFace(GLenum mode);,mode:GL_CCW(缺省值),GL_CW,void glCullFace(GLenum mode);,mode:GL_FRONT,GL_BACK(缺省值),GL_FRONT_AND_BACK,图元的属性(3/5)前向面与后向面void glFrontF,27,图元的属性(4/5),多边形填充方式,均匀填色方式,位图不透明方式,位图透明方式,象素图方式,void glEnable(GL_POLYGON_STIPPLE);,void glPolygonStipple(const Glubyte*mask);,mask:,位图,图元的属性(4/5)多边形填充方式void glEnable,28,图元的属性(5/5),标记多边形边界,多边形法向,void glEdgeFlag(GLboolean flag);,void glNormal3*(TYPE nx,TYPE ny,TYPE nz);,void glNormal3*v(const TYPE*v);,图元的属性(5/5)标记多边形边界void glEdgeFl,29,3、OpenGL的变换,OpenGL对图象的变换与照相机拍摄物体过程相似,分为四步:,支起三角架,把照相机放在场景中OpenGL的取景变换,把要拍摄场景固定在拍摄物体上 OpenGL的模型变换,选择照相机镜头或调节焦距 OpenGL的投影变换,确定照片的大小,可以放大照片的某一部分,OpenGL,的视见区变换,三维空间中的物体就可以表示为二维的平面物体,3、OpenGL的变换OpenGL对图象的变换与照相机拍摄物,30,几何变换,平移变换,放缩变换,旋转变换,viod glTranslatefd(TYPE deltax,TYPE deltay,TYPE deltaz);,void glScalefd(TYPE sx,TYPE sy,TYPE sz);,void glRotatefd(TYPE angle,TYPE x,TYPE y,TYPE z);,几何变换平移变换viod glTranslatefd,31,投影变换,确定一个视景体(Viewing Volume),作用有两个:,确定物体投影到屏幕的方式,即是透视投影还是正交投影。,确定从图象上裁剪掉哪些物体或物体的某些部分。,投影变换包括透视投影和正交投影,投影变换确定一个视景体(Viewing Volume),,32,透视投影,透视投影,33,正射投影,正射投影,34,4、OpenGL图形的描绘,对整个三维模型进行绘制,得到三维景象,包括:,颜色模式的指定,OpenGL提供了两种颜色模式:RGB模式和颜色索引模式;,光照处理,光照模型,明暗处理,材质,材质颜色,材质定义,4、OpenGL图形的描绘对整个三维模型进行绘制,得到三维景,35,纹理贴图,定义纹理,控制滤波,说明映射方式,绘制场景,给出顶点的纹理坐标和几何坐标,特殊效果的实现,融合:将两种颜色分量依据一定比例混合在一起,反走样:锯齿,雾化效果,纹理贴图,36,OpenGL是一个丰富的三维图形函数库;,OpenGL编写的程序结构类似于用其他语言编写的程序;,比如在C语言中调用OpenGL的函数;,五、OpenGL程序的基本结构,OpenGL是一个丰富的三维图形函数库;五、OpenGL程序,37,初始化:,设置OpenGL的状态开关,如颜色模式(RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等,这些状态一般都用函数glEnable(?),glDisable(?)来设置,?表示特定的状态。,初始化:,38,设置观察坐标系下的取景模式和取景框大小,,主要用到三个函数:,void glViewport(left,top,right,bottom);,设置屏幕上窗口大小,,参数描述屏幕窗口四个角的坐标;,void glOrtho(left,right,bottom,top,near,far);,设置投影方式,为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体;,void gluPerspective(fovy,aspect,zNear,zFar);,设置投影方式为透视投影,其,取景体积,是一个截头锥体,在这个体积内的物体投影到锥的顶点。,设置观察坐标系下的取景模式和取景框大小,主要用到三个函数:,39,使用OpenGL的库函数,构造几何物体对象的数学描述,,包括点线面的位置和拓扑关系,几何变换,光照处理等等。,使用OpenGL的库函数构造几何物体对象的数学描述,包括点线,40,一个简单的绘图程序,例程,#include,#include,#include,#include,void main(void),OpenAWindow();/创建一个窗口,InitOpenGL();/初始化OpenGL,glColor3f(1.0,1.0,1.0);/设置当前颜色,glBegin(GL_POLYGON);/开始绘图,glVertex2f(-0.5,-0.5);,glVertex2f(-0.5,0.5);,glVertex2f(0.5,0.5);,glVertex2f(0.5,-0.5);,glEnd();,glFlush();/强制输出,KeepTheWindowOnScreenForAWhile();/使窗口在屏幕上保留一会,一个简单的绘图程序例程#include windows.h,41,函数命名规范,void glVertex3fv(Glfloat*vertex);,前缀 后缀,前缀,gl,glu,aux-该函数属于哪个函数库,后缀,2,3,4-参数的维数,b,s,l,f,d,ub,us,ui-参数的数据类型,v-以数组方式传递参数,函数名中的单词首写字母大写,函数命名规范,42,创建第一个应用程序(1/8),初始化显示方式,例:将显示方式置为单缓存、直接颜色方式,void auxInitDisplayMode(GL_SINGLE|AUX_RGBA);,void auxInitDisplayMode(Glbitfield mask);,mask:GL_DOUBLE(GL_SINGLE)|,AUX_RGBA(AUX_INDEX)|,AUX_DEPTH|AUX_STENCIL|AUX_ACCUM,创建第一个应用程序(1/8)初始化显示方式void auxI,43,创建第一个应用程序(2/8),创建窗口,初始化窗口的位置与大小,创建并显示窗口,void auxInitPosition(Glint x,GLint y,GLsizei width,GLsizei height);,(x,y):窗口的原点,width,,,height,:窗口的宽和高,void auxInitWindow(GLbyte*title);,title,:窗口标题,创建第一个应用程序(2/8)创建窗口void auxInit,44,创建第一个应用程序(3/8),初始化帧缓存(颜色缓存),指定初始颜色,清帧缓存,void glClearColor(GLclampf r,GLclampf g,GLclampf b,GLclampf a);,缺省值:,(0.0,0.0,0.0,0.0),void glClear(GL_COLOR_BUFFER_BIT);,创建第一个应用程序(3/8)初始化帧缓存(颜色缓存)voi,45,创建第一个应用程序(4/8),初始化深度缓存,指定初始深度值,清深度缓存,void glClearDepth(GLclampd depth);,缺省值:,0.0,void glClear(GL_DEPTH_BUFFER_BIT);,创建第一个应用程序(4/8)初始化深度缓存void glCl,46,创建第一个应用程序(5/8),设置投影方式,置投影方式为平行投影,置投影方式为透视投影,void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far);,void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far);,创建第一个应用程序(5/8)设置投影方式void glOrt,47,创建第一个应用程序(6/8),指定图元的颜色,绘图,强制输出,void glColor*();,void glFlush(void);,创建第一个应用程序(6/8)指定图元的颜色void glCo,48,创建第一个应用程序(7/8),例程,#,include,#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);,创建第一个应用程序(7/8)例程,49,创建第一个应用程序(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();,创建第一个应用程序(8/8)glOrtho(-1.0,50,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!