欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    OpenGL3基本图形绘制.ppt

    • 资源ID:6513264       资源大小:274.50KB        全文页数:53页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    OpenGL3基本图形绘制.ppt

    1,第 3 章,OpenGL基本图形绘制,3.1 OpenGL的数据类型,3.1 OpenGL的数据类型,所有的数据类型都以GL开头,表示是OpenGL。紧跟在后面的大多是它们相应的C数据类型。一些开始有个u表示是无符号的数据类型,如:ubyte表示是无符号的字节。也给出了更多的描述名字的方法,如:size表示一个值的长度。GLsizei表示是一个GL变量,且参数的大小是一个整型。Clamp是用于颜色的。这种数据类型以f和d结尾表示实型或双精度型数据类型。GLboolean变量用于标示True和False;GLenum用于枚举型变量;GLbitfield 用于包含二进制位的区域的变量。,3.2 函数命名的语法,OpenGL函数都遵循一个命名约定,即采用以下格式:函数glColor3f(1.0,0,0),gl表示这个函数来自库gl.h,color表示该函数用于颜色设定,3f表示这个函数采用了三个浮点数参数。GLfloat color=1.0,0,0;glColor3fv(color);,函数格式示例:定义点函数,3.2 函数命名的语法,3.3 OpenGL是一种状态机,OpenGL的工作方式是一种状态机制,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们之前一直有效。状态变量可以通过glEnable()、glDisable()这两个函数来设置成有效或无效状态。另外可以用下列四个函数来获取某个状态变量的值:glGetBooleanv()、glGetDoublev()、glGetFloatv()和glGetIntegerv()。,3.4 OpenGL变换,OpenGL就是实现将物体的各个顶点通过各种变换矩阵的作用映射到屏幕的过程。下图是顶点变换过程。注意:在模型视图变换过程中,顶点的法向量也自动地进行变换。,3.4 OpenGL变换,视点变换(视图变换)模型变换投影变换视口变换裁剪变换,OpenGL的变换过程,OpenGL的坐标变换过程类似于用照相机拍摄照片的过程。使用照相机与坐标变换的步骤比较如下:。分为以下四步:支起三角架,把照相机放在场景中(视图变换)。将要拍的场景置于所要求的位置上(模型变换)。选择照相机镜头或调节焦距(投影变换)。确定照片的大小,可以放大照片的某一部分(视口变换)。其中(1)、(2)顺序可看成照相馆中的照相过程;而在室外摄影时,由于先有景物,再选择照相机的位置与方向,因此照相顺序可看成(2)、(1)。,模型-视图变换,模型-视图变换过程就是一个将顶点坐标从世界坐标变换到视觉坐标的过程。这里很重要的是对两个坐标系的认识。世界坐标系也称为全局坐标系。它是一个右手坐标系,可以认为该坐标系是固定不变的,在初始态下,其x轴为沿屏幕水平向右,y轴为沿屏幕垂直向上,z轴则为垂直屏幕面向外指向用户。视觉坐标系(即观察坐标系)也称为局部坐标系。它是一个左手坐标系,该坐标系是可以活动的。在初始态下,其原点及x、y轴分别与世界坐标系的原点及x、y轴重合,而z轴则正好相反,即为垂直屏幕面向内。默认:视点在原点,视线沿Z轴负方向。,坐标系,右手坐标系,缺省的观察坐标系,视点变换,View变换可以改变视点的位置和方向,要在Model变换之前调用。设置任意观察坐标点。,void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,Gldouble centerx,GLdouble centery,GLdouble centerz,Gldouble upx,GLdouble upy,GLdouble upz);(eyex,eyey,eyez)为视点位置(centerx,centery,centerz)为观察参考点的位置(upx,upy,upz)为向上向量的方向,模型变换,平移变换放缩变换旋转变换,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);,(x,y,z),o,逆时针为旋转正向,投影变换,就是要确定一个视景体,其作用有两个:确定物体投影到屏幕的方式,即是透视投影还是正交投影。确定从图象上裁剪掉哪些物体或物体的某些部分。投影变换包括透视投影和正交投影(平行投影),透视投影,其视景体是一个截头锥体,再这个体积内的物体投影到锥的顶点,有glFrustum命令定义这个截头锥体,这个取景体积可以是不对称的void glFrustum(Gldouble left,Gldouble right,Gldouble bottom,Gldouble top,Gldouble near,Gldouble far);,透视投影的示意图,透视投影:“近大远小”,类似与人眼的视觉机制,透视投影,void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble near,GLdouble far);,w,坐标原点,h,aspect=w/h,near,far,fovy,正交投影,其视景体是一个各面均为矩形的六面体,用glOrtho命令创建正交平行的取景体积void glOrtho(Gldouble left,Gldouble right,Gldouble bottom,Gldouble top,Gldouble near,Gldouble far);,正交投影的示意图,正交投影,对于二维图形向二维屏幕的投影,则应使用实用库中的如下函数:void gluOrtho2D(Gldouble left,Gldouble right,Gldouble bottom,Gldouble top);前面提到过,用二维顶点命令绘制的二维物体的z坐标均为零,而gluOrtho2D()命令假定场景中的 z 坐标介于-1.0和 1.0 之间。,视口变换,void glViewport(GLint x,GLint y,GLint width,GLint height);(x,y):视区左下角位置width,height:视区的宽和高,三维图形的变换流程,视图变换,模型变换,投影变换,窗口至视区的变换,OpenGL中的多种变换(几何变换、投影变换等)是由矩阵的乘积实现的。OpenGL提供了一系列矩阵操作函数。(1)确定当前矩阵栈,void glMatrixMode(Glenum mode);参数取值:GL_MODELVIEW:模型视图矩阵GL_PROJECTION:投影矩阵GL_TEXTURE:纹理矩阵默认的选定矩阵为模型-视图变换。,矩阵栈及其操作(1/8),矩阵栈及其操作(2/8),清矩阵栈栈顶,void glLoadIdentity(void);将栈顶矩阵替换为单位矩阵取消之前变换的作用,glLoadIdentity(),矩阵栈及其操作(3/8),压栈,void glPushMatrix(void);复制栈顶矩阵并压入栈记住位置,坐标系1,坐标系2,坐标系1,坐标系2,坐标系3,矩阵栈及其操作(4/8),出栈,void glPopMatrix(void);弹出栈顶矩阵回到记住的位置,坐标系1,坐标系2,坐标系3,坐标系1,坐标系2,矩阵栈及其操作(5/8),设置栈顶矩阵,void glLoadMatrix(const TYPE*matrix);将栈顶矩阵替换为matrix实现任意变换,glLoadMatrix(M2),矩阵栈及其操作(6/8),矩阵相乘,void glMultiMatrixfd(const TYPE*matrix);以矩阵matrix右乘栈顶矩阵并替换栈顶矩阵实现任意变换,M1*M2,glMultiMatrix(M2),矩阵栈及其操作(7/8),基本几何变换的作用平移变换放缩变换,矩阵栈及其操作(8/8),旋转变换,变换的顺序:glMatrixMode(GL_MODELVIEW);glLoadIdentity();glMultMatrixf(N);/*apply transformation N*/glMultMatrixf(M);/*apply transformation M*/glMultMatrixf(L);/*apply transformation L*/glBegin(GL_POINTS);glVertex3f(v);/*draw transformed vertex v*/glEnd();在这个过程中,在GL_MODELVIEW状态下,相继引入了I(单位阵),N,M,L矩阵。变换后的顶点为NMLv(顶点取列向量)。因此,顶点的变换为N(M(Lv),即是先作变换L,然后是变换M,最后才是N。这里,顶点v 的实际变换顺序正好与指定的顺序相反。,在调用投影变换命令前必须先在程序中加入下述语句:glMatrixMode(GL_PROJECTION);glLoadIdentity();这两条命令一方面指定接下来的变换命令只影响投影矩阵,同时也将当前投影矩阵设置为单位阵。,矩阵ModelView矩阵:描述了物体的旋转、平移、缩放等变换Projection矩阵:描述了从三维空间到二维屏幕的变换,OpenGL中的ModelView变换机制,OpenGL中的ModelView变换机制,ModelView矩阵保存着视点变换和模型变换矩阵的累积乘积,每一次的视点变换或模型变换矩阵与当前的ModelView矩阵相乘就生成一个新的ModelView矩阵。ModelView矩阵堆栈至少包含32个44的矩阵,初始状态,最顶层的矩阵为单位阵。用户可以通过函数glGetIntegerv()得到系统所允许的最大矩阵数目:glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH);,OpenGL中的ModelView变换机制,Projection矩阵保存着描述视景体的投影变换矩阵。一般情况下,Projection矩阵不需要复合,因此在进行投影前需要调用函数glLoadIdentity()。用户可以通过函数glGetIntegerv()得到系统所允许的最大矩阵数目:glGetIntegerv(GL_MAX_PROJECTION_STACK_DEPTH);,矩阵堆栈用于保存和恢复矩阵的状态,OpenGL提供了函数glPushMatrix()和glPopMatrix()进行堆栈操作。优势:可以保存指定的矩阵状态,并在需要时进行恢复,从而避免通过逆变换进行状态恢复时带来的大量的矩阵运算,提高了绘图的效率。,OpenGL中的ModelView变换机制,OpenGL中的ModelView变换机制,ModelView变换:Model变换、View变换Model变换可以改变物体的位置和尺寸,相当于几何变换。View变换改变相机的位置和观察方向,相当于坐标变换。由于两者的等价性,OpenGL中Model变换和View变换用同一个矩阵表示:ModelView矩阵。,3.5 OpenGL基本图形的绘制,OpenGL提供了描述点、线、多边形的绘制机制。它们通过glBegin()函数和glEnd()函数配对来完成。void glBegin(Glenum mode);mode取值见下表。glEnd()函数标志着形状的结束,该函数没有参数。,OpenGL基本图形的绘制,点的绘制,点的绘制 glBegin(GL_POINTS);glVertex3f(0.0f,0.0f,0.0f);glVertex3f(10.0f,0.0f,0.0f);glEnd();点的属性(大小)void glPointSize(GLfloat size);,(a)GL_LINES画线模式(b)GL_LINE_STRIP画线模式(c)GL_LINE_LOOP画线模式,直线的绘制,直线的绘制模式GL_LINESGL_LINE_STRIPGL_LINE_LOOP,直线的绘制,直线的属性线宽 void glLineWidth(GLfloat width)线型 glEnable(GL_LINE_STIPPLE);glLineStipple(GLint factor,GLushort pattern);,直线的绘制,pattern是一个16位值,每一位代表线段的一部分是开还是关。默认情况下,每一位对应一个象素,但factor参数充当倍数可以增加模式的宽度。在应用模式时,pattern是逆向使用的,即模式的最低有效位最先作用于指点线段。,多边形面的绘制,三角形面的绘制GL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FAN四边形面的绘制GL_QUADSGL_QUADS_STRIP多边形面的绘制(GL_POLYGON),多边形面的绘制,多边形面的绘制规则所有多边形都必须是平面的。多边形的边缘决不能相交,而且多边形必须是凸的。解决:对于非凸多边形,可以把它分割成几个凸多边形(通常是三角形),再将它绘制出来。,多边形面的绘制,问题:轮廓图形状态会看到组成大表面的所有小三角形。处理OpenGL提供了一个特殊标记来处理这些边缘,称为边缘标记。glEdgeFlag(True)glEdgeFlag(False),47,多边形面的属性,多边形面的正反属性(绕法)对于三维多边形,OpenGL认为多边形是由正面和反面组成。在绘制时,需要控制反转多边形面和剔除不绘制的面。缺省时,在屏幕上以逆时针方向出现顶点的多边形称为正面,反之为背面。设置正反面的函数 void glFrontFace(Glenum mode);mode的取值GL_CW(顺时针方向为正面)、GL_CCW(逆时针方向为正面,缺省值),多边形面的属性,多边形面的颜色glShadeModel(GL_FLAT)用指定多边形最后一个顶点时的当前颜色作为填充多边形的纯色,唯一例外是GL_POLYGON图元,它采用的是第一个顶点的颜色。glShadeModel(GL_SMOOTH)从各个顶点给三角形投上光滑的阴影,为各个顶点指定的颜色之间进行插值。,多边形面的属性,多边形面的显示模式 glPolygonMode(GLenum face,GLenum mode);参数face用于指定多边形的哪一个面受到模式改变的影响(GL_FRONT,GL_BACK或GL_FRONT_AND_BACK)。参数mode用于指定新的绘图模式。GL_FILL是默认值,生成填充的多边形;GL_LINE生成多边形的轮廓;而GL_POINT只画出顶点。,50,利用函数glCullFace(),选择剔除正面或背面多边形,在这之前需利用glEnable()激活剔除处理。void glCullFace(GLenum mode);mode的取值分别为:GL_FRONT:剔除正面 GL_BACK:剔除背面(缺省值)GL_FRONT_AND_BACK:剔除全部利用下面函数激活或去激活多边形剔除:glEnable(GL_CULL_FACE);glDisable(GL_CULL_FACE);,剔除多边形的面,多边形面的属性,多边形面的填充 多边形面既可以用纯色填充,也可以用3232的模板位图来填充。void glPolygonStipple(const GLubyte*mask);glEnable(GL_POLYGON_STIPPLE);,52,多边形面的属性,多边形面的法向量法向量是垂直于面的方向上点的向量,它确定了几何对象在空间中的方向。在OpenGL中,可以为每个顶点指定法向量。void glNormal3bsidf(TYPE nx,TYPE ny,TYPE nz);void glNormal3bsidfv(const TYPE*v);,53,

    注意事项

    本文(OpenGL3基本图形绘制.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开