OpenGL学习五——绘制几何体
1、基本图元
OpenGL中几何图元包括点、直线以及多边形,其中多边形特指简单凸多边形。它们都是用顶点集合来描述的,要指定定点可以使用函数glVertex*()。
绘制几何图元时,需要在glBegin和glEnd的之间指定定点数据和图元类型。图元类型主要有:
点:GL_POINTS
直线:GL_LINES\GL_LINE_STRIP\GL_LINE_LOOP
三角形:GL_TRIANGLES\GL_TRIANGLE_STRIP\GL_TRIANGLE_FAN
四边形:GL_QUADS\GL_QUAD_STRIP
多边形:GL_POLYGON
特别说明下三角形、四边形的几种绘图方式:
GL_TRIANGLES:按顶点顺序每三个点绘制一个三角形
GL_TRIANGLE_STRIP:按顶点顺序绘制一个三角形带,依次使用n、n+1、n+2(n>0)绘制每一个三角形,这里要求按一定顺序绘制,以保证三角形的方向相同,从而确保三角形带可组成表面的一部分。这个要求十分关键,否则画出来的图形与期望的有很大差别。
GL_TRIANGLE_FAN:按顶点顺序绘制一个三角形扇,绘制三角形时使用1、n+1、n+2三个顶点,其它与GL_TRIANGLE_STRIP相同。
GL_QUAD_STRIP:按顶点顺序绘制四边形带,绘制四边形时使用n、n+1、n+3、n+2(n>0)顶点,其他与GL_TRIANGLE_STRIP相同。
2、顶点数组
OpenGL提供了定点数组函数,让开发者只需使用几个数组即可指定大量与定点相关的数据,并且只需要使用几个函数便能存取这些数据。使用顶点数组来存取数据可提高应用程序的性能。使用顶点数组来渲染几何体包括三个步骤:
(1)enable顶点数组:用于存储顶点座标、面法线、RGBA颜色、辅助颜色、颜色索引、雾座标、纹理座标以及多边形边界边标记。主要函数:glEnableClientState/glDisableClientState。
(2)顶点数据存入顶点数组:对数组的存取是根据它们在内存单元地址(即指向内存单元的指针)进行的。在客户端/服务器模式下,数据存储在客户的地址空间中。主要函数:glVertexPointer/glColorPointer/glNormalPointer/glTexCoordPointer等。
(3)使用数据绘制几何体:OpenGL通过对指针解除引用来获得被启用的数组中的数据。在客户端/服务器模式下,数据被传递到服务器的地址空间中。主要函数:glDrawArrays(绘制一系列相邻的数组顶点元素)/glDrawElements(绘制由顶点索引数组决定的数组顶点数据),这两个函数详解见:http://blog.csdn.net/ocean2006/article/details/6892608
OpenGL中几何图元包括点、直线以及多边形,其中多边形特指简单凸多边形。它们都是用顶点集合来描述的,要指定定点可以使用函数glVertex*()。
绘制几何图元时,需要在glBegin和glEnd的之间指定定点数据和图元类型。图元类型主要有:
点:GL_POINTS
直线:GL_LINES\GL_LINE_STRIP\GL_LINE_LOOP
三角形:GL_TRIANGLES\GL_TRIANGLE_STRIP\GL_TRIANGLE_FAN
四边形:GL_QUADS\GL_QUAD_STRIP
多边形:GL_POLYGON
特别说明下三角形、四边形的几种绘图方式:
GL_TRIANGLES:按顶点顺序每三个点绘制一个三角形
GL_TRIANGLE_STRIP:按顶点顺序绘制一个三角形带,依次使用n、n+1、n+2(n>0)绘制每一个三角形,这里要求按一定顺序绘制,以保证三角形的方向相同,从而确保三角形带可组成表面的一部分。这个要求十分关键,否则画出来的图形与期望的有很大差别。
GL_TRIANGLE_FAN:按顶点顺序绘制一个三角形扇,绘制三角形时使用1、n+1、n+2三个顶点,其它与GL_TRIANGLE_STRIP相同。
GL_QUAD_STRIP:按顶点顺序绘制四边形带,绘制四边形时使用n、n+1、n+3、n+2(n>0)顶点,其他与GL_TRIANGLE_STRIP相同。
2、顶点数组
OpenGL提供了定点数组函数,让开发者只需使用几个数组即可指定大量与定点相关的数据,并且只需要使用几个函数便能存取这些数据。使用顶点数组来存取数据可提高应用程序的性能。使用顶点数组来渲染几何体包括三个步骤:
(1)enable顶点数组:用于存储顶点座标、面法线、RGBA颜色、辅助颜色、颜色索引、雾座标、纹理座标以及多边形边界边标记。主要函数:glEnableClientState/glDisableClientState。
(2)顶点数据存入顶点数组:对数组的存取是根据它们在内存单元地址(即指向内存单元的指针)进行的。在客户端/服务器模式下,数据存储在客户的地址空间中。主要函数:glVertexPointer/glColorPointer/glNormalPointer/glTexCoordPointer等。
(3)使用数据绘制几何体:OpenGL通过对指针解除引用来获得被启用的数组中的数据。在客户端/服务器模式下,数据被传递到服务器的地址空间中。主要函数:glDrawArrays(绘制一系列相邻的数组顶点元素)/glDrawElements(绘制由顶点索引数组决定的数组顶点数据),这两个函数详解见:http://blog.csdn.net/ocean2006/article/details/6892608
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.