计算机图形学第六章OpenGL基本图元的绘制.ppt
《计算机图形学第六章OpenGL基本图元的绘制.ppt》由会员分享,可在线阅读,更多相关《计算机图形学第六章OpenGL基本图元的绘制.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Lecture 6OpenGL基本图元的绘制基本图元的绘制 概述概述图元的种类:点、线段、多边形、矩形OpenGL中所有的实体最终都可采用一系列有序的顶点描述。二维图形是三维图形的特殊情况(z分量为0),在三维顶点绘制指令中,如果用户设定二维坐标(x,y),OpenGL就会自动令z=0 OpenGL提供的描述点、线、多边形的绘制机制。必须通过glBegin()和glEnd()函数配对来完成.OpenGL的程序结构(的程序结构(6_1)auxInitDisplayMode(AUX_SINGLE|AUX_RGBA)设置设置窗口显示模式为窗口显示模式为RGBA方式,即彩色方式,并且图形缓方式,即彩色
2、方式,并且图形缓存为单缓存(存为单缓存(SINGLE BUFFER)。)。auxInitPosition(0,0,500,500)定义窗口的初始位置,前定义窗口的初始位置,前两个参数两个参数(0,0)为窗口的左上角点的屏幕坐标,后两个参为窗口的左上角点的屏幕坐标,后两个参数数(500,500)为窗口的宽度和高度。为窗口的宽度和高度。auxInitWindow(AUX_SAMPLE)是窗口初始化,字符是窗口初始化,字符参数是窗口名称。参数是窗口名称。OpenGL的程序结构(的程序结构(6_1)auxReshapeFunc()和和auxMainLoop(),参数都是一个,参数都是一个函数指针,指向
3、的都是回调函数(回调函数定义用函数指针,指向的都是回调函数(回调函数定义用CALLBACK说明)。说明)。auxReshapeFunc()是窗口形状重定函数,参数指针指是窗口形状重定函数,参数指针指向函数向函数myReshape(),它的两个参数就是窗口的,它的两个参数就是窗口的新宽度和新高度。然后用新宽度和新高度。然后用glViewport(0,0,w,h)重定视口,重定视口,并且在新视口内重新定义投影矩阵。并且在新视口内重新定义投影矩阵。AUX库显示坐标范围库显示坐标范围(6_2)设定视区的函数,即指定一个显示窗口的范围(程序设定视区的函数,即指定一个显示窗口的范围(程序6_2)void
4、CALLBACK Reshape(GLsizei width,GLsizei height)glViewport(0,0,width,height);auxReshapeFunc(myReshape);窗口形状重定函数,参数指针指向函数窗口形状重定函数,参数指针指向函数myReshape(),它的两个参数就是窗口的新宽度和新高度。它的两个参数就是窗口的新宽度和新高度。auxInitPosition(0,0,500,500);初始化显示窗口的大小初始化显示窗口的大小AUX库显示坐标范围库显示坐标范围如果使用如果使用auxReshapeFunc(myReshape);设定了窗口设定了窗口形状重定函
5、数。则显示窗口的坐标范围为形状重定函数。则显示窗口的坐标范围为11。其绘。其绘图像的过程是把图像的过程是把11范围的坐标点映射到屏幕坐标。范围的坐标点映射到屏幕坐标。如果未使用如果未使用auxReshapeFunc(myReshape);设定窗口设定窗口形状重定函数。则显示窗口的坐标范围为实际窗口的尺形状重定函数。则显示窗口的坐标范围为实际窗口的尺寸。寸。OpenGL的状态机制的状态机制OpenGL的绘图方式是由一系列的状态决定的。如果设的绘图方式是由一系列的状态决定的。如果设置了一种状态或模式而不改变它,置了一种状态或模式而不改变它,OpenGL在绘图的过在绘图的过程中将一直保持这种状态或模
6、式。程中将一直保持这种状态或模式。例如:例如:Void myinit(void)glClearColor(0.0,0.0,0.0,0.0);OpenGL的状态机制的状态机制其中函数其中函数glClearColor(0.0,0.0,0.0,0.0)将视口背景将视口背景色清为黑色,如果不改变这种状态,视口背景色将一直色清为黑色,如果不改变这种状态,视口背景色将一直保持黑色。其他状态有:保持黑色。其他状态有:模型变换模型变换线及多边形的填充图案线及多边形的填充图案多边形绘制模式多边形绘制模式光源的位置及特性光源的位置及特性被绘制物体的材质等被绘制物体的材质等基于基于MFC的的OpenGL编程编程(6
7、_3)OpenGL辅助函数库提供了一些窗口和事件管理函数,辅助函数库提供了一些窗口和事件管理函数,但提供的功能有限。而但提供的功能有限。而MFC却提供了大量对窗口和事件却提供了大量对窗口和事件管理和控制的函数。管理和控制的函数。图形操作描述图形操作描述像素格式像素格式图形操作描述图形操作描述每一个每一个Windows程序都必须设置设备描述表程序都必须设置设备描述表DC(Device Contexts),),DC包含了窗口上显示图形的包含了窗口上显示图形的诸多信息,例如:指定绘图模式、画笔和刷子的颜色。诸多信息,例如:指定绘图模式、画笔和刷子的颜色。OpenGL的的Windows程序也必须使用程
8、序也必须使用DC。OpenGL还必须处理专用的绘图描述表还必须处理专用的绘图描述表RC(Rendering Contexts),一个一个OpenGL应用程序必须创建一个绘图描应用程序必须创建一个绘图描述表,然后启动它,最后在所定义的窗口内按常规方式述表,然后启动它,最后在所定义的窗口内按常规方式调用调用OpenGL函数绘图。函数绘图。图形操作描述图形操作描述首先得到设备描述表首先得到设备描述表DC(设备上下文):(设备上下文):m_pDC=new CClientDC(this);创建绘图描述表创建绘图描述表/Create rendering contenthrc=wglCreateContex
9、t(m_pDC-GetSafeHdc();图形操作描述图形操作描述绘图:绘图:设置一个线程的当前绘图描述表设置一个线程的当前绘图描述表wglMakeCurrent(m_pDC-GetSafeHdc(),hrc);DrawScene();wglGetCurrentDC()得到当前设备描述表得到当前设备描述表SwapBuffers(wglGetCurrentDC();释放绘图描述表所使用的设备描述表释放绘图描述表所使用的设备描述表wglMakeCurrent(m_pDC-GetSafeHdc(),NULL);像素格式像素格式在创建一个绘图描述表之前,首先必须设置设备描述表在创建一个绘图描述表之前,
10、首先必须设置设备描述表的像素格式,像素格式含有设备绘图界面的属性:的像素格式,像素格式含有设备绘图界面的属性:颜色模式(颜色模式(RGBA模式模式/颜色索引模式)颜色索引模式)单单/双缓冲区双缓冲区颜色、深度、累加和模板缓冲区所用的位数颜色、深度、累加和模板缓冲区所用的位数像素格式像素格式PIXELFORMATDESCRIPTOR pfd=sizeof(PIXELFORMATDESCRIPTOR),/该结构所占空间该结构所占空间1,/版本号,当前为版本号,当前为1PFD_DRAW_TO_WINDOW|/支持支持windows的屏幕绘图的屏幕绘图 PFD_SUPPORT_OPENGL|/支持支持
11、OpenGL PFD_DOUBLEBUFFER,/支持双缓存支持双缓存PFD_TYPE_RGBA,/支持支持RGBA 颜色模式颜色模式24,/24位颜色深度位颜色深度0,0,0,0,0,0,/红绿蓝颜色分量和偏移量所占位数相同红绿蓝颜色分量和偏移量所占位数相同0,/无无alpha分量分量0,/无无alpha偏移量偏移量0,/无累加缓冲区无累加缓冲区0,0,0,0,/忽略累加缓冲区的个分量忽略累加缓冲区的个分量32,/32位的深度缓冲区位的深度缓冲区0,/无模板缓冲区无模板缓冲区0,/无辅助缓冲区无辅助缓冲区PFD_MAIN_PLANE,/WIN98、NT下只能是下只能是PFD_MAIN_PLA
12、NE0,/保留,当前为保留,当前为00,0,0 /忽略覆盖层的屏蔽忽略覆盖层的屏蔽;像素格式像素格式设定像素格式后,进行如下的操作:设定像素格式后,进行如下的操作:int pixelformat;m_pDC=new CClientDC(this);使用设备描述表选择一个像素格式使用设备描述表选择一个像素格式pixelformat=ChoosePixelFormat(m_pDC-GetSafeHdc(),&pfd)实际设置当前设备描述表的像素格式实际设置当前设备描述表的像素格式SetPixelFormat(m_pDC-GetSafeHdc(),pixelformat,&pfd)使用设备描述表创建
13、绘图描述表使用设备描述表创建绘图描述表hrc=wglCreateContext(m_pDC-GetSafeHdc();定义顶点序列定义顶点序列void glBegin(GLenum mode)功能:描述一个几何图元顶点序列的开始。功能:描述一个几何图元顶点序列的开始。参数说明:参数说明:mode:指出图元的类型。:指出图元的类型。void glEnd(void)功能:标记顶点序列的结束。功能:标记顶点序列的结束。函数函数glVertex()可定义一个点可定义一个点。定义顶点序列定义顶点序列例如:绘制一个多边形边界(例如:绘制一个多边形边界(POLYGON):):glBegin(GL_POLYG
14、ON)glVertex2f(0.0,0.0);/Vertex 0givedex2f(0.0,3.0);/Vertex 1glVedex2f(3.0,3.0);/Vertex 2alVenex2f(4.0,1.5):/Vertex 3givedex2f(3.0,0.0);/Vertex 4glVertex2f(0.0,0.0);/Vertex 0glEnd();几何图元类型和说明几何图元类型和说明 几何图元类型和说明几何图元类型和说明 几何图元类型几何图元类型(6_4)几何图元类型几何图元类型 GL_POINTSGL_LINESGL_LINE_STRIPGL_LINE_LOOPGL_POLYGO
15、NGL_QUADSGL_QUAD_STRIPGL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FAN几何图元类型点点GL_POINTS:N个顶点个顶点V0,V1,Vn-1构成构成 离散的顶点序离散的顶点序列。列。在在OpenGL中一个点是当作一个中一个点是当作一个n维(维(n=2,3,4)向量)向量来处理的。来处理的。glVertex2f(2.0,1.0)指定一个顶点的坐标()指定一个顶点的坐标(2.0,1.0),),则在实际计算中则在实际计算中OpnGL是处理点(是处理点(2.0,1.0,0.0)glVertex2,3,4sifd(V)(TYPE coords
16、)参数说明:参数说明:coords:用一个数组或用齐次坐标:用一个数组或用齐次坐标(x,y,z,w)赋顶点坐标赋顶点坐标 画点的例程画点的例程glBegin(GL_POINTS);glVertex3f(0.0,0.0,0.0)glVertex3f(50.0,50.0,50.0)glEND();glBegin的参数的参数GL_POINTS告诉告诉OpenGL,下面的顶点应,下面的顶点应被解释并绘制为点,它们将转换为两个具体的点,并被被解释并绘制为点,它们将转换为两个具体的点,并被绘制出来,其颜色为缺省值点的属性。绘制出来,其颜色为缺省值点的属性。点的大小点的大小 OpenGL提提供供了了可可以以
17、控控制制点点的的大大小小的的函函数数。点点大大小小的的默默认认值值是是一一个个像像素素。可可以以用用函函数数glPointsize()修修改改这这个个值值,以设定点的大小:以设定点的大小:void glPointsize(GLfloat size)直线直线GL_LINES:N个顶点个顶点V0,V1,Vn-1每每2个一组画线段,即个一组画线段,即V0-V1,V2-V3,共计画,共计画N/2条线。条线。若若N为奇数,则第为奇数,则第N个点个点Vn-1每忽略。每忽略。直线的绘制直线的绘制 下下面面的的代代码码在在两两个个点点(0,0,0)和和(50,50,50)之之间间画一根直线。画一根直线。glB
18、egin(GL_LINES);glVertex3f(0.0,0.0,0.0)glVertex3f(50.0,50.0,50.0)glEND();注意:在注意:在OpenGL中,参数中,参数GL_LINES对每两个指定的顶对每两个指定的顶点画一根直线。如果点画一根直线。如果GL_LINES指定奇数个顶点,那么指定奇数个顶点,那么最后一个顶点将会被忽略。最后一个顶点将会被忽略。折线折线GL_LINE_STRIP:画一折线:画一折线:V0-V1,V1-V2,V2-V3,Vn-2-Vn-1,共计,共计N-1条线段。条线段。注意:注意:(1)最后一点与第一点之间不连线,即不形成回路。但)最后一点与第一点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 第六 OpenGL 基本 绘制
限制150内