OpenGL开发 空间绘图:几何图元和缓冲区
GL_POINTS //选择点作为图元
void glPointSize(GLfloat size); //函数接受1个参数,它用于指定被绘点的近似直径。但是,点的大小设置还是存在限制。
GLfloat sizes[2] //存储受支持的点大小范围
GLfloat step; //存储受支持的点大小增量
//获得受支持的点大小范围以及增量大小
glGetFloatv(GL_POINT_SIZE_RANGE,sizes);
glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);
这里,sizes数组将包含两个元素,分别表示glPointSize的最小有效值和最大有效值。另外,变量step表示点大小范围之内最小允许步进值。指定一个位于范围之外的值并不会产生错误,如果指定的值比最大有效值大,系统会取最大有效值;如果指定的值比最小有效值小,系统会取最小有效值。
glEnable/glDisable所启用或禁止的任何特性或功能,以及glSet所设置的任何数值设置,都可以用glGet函数的众多变形之一进行查询。
————————————————————————————
GL_LINES //选择直线作为图元
每两个指定的顶点用于绘制一条直线,如果为GL_LINES 指定奇数个顶点,最后一个顶点会被忽略。
GL_LINE_STRIP //选择线带作为图元
绘制一条经过所有这些顶点的连续的线。
GL_LINE_LOOP //选择线环作为图元
这种图元与GL_LINE_STRIP 非常相似,只是最后一个顶点和第一个顶点之间也会绘制一条直线。
void glLineWidth(GLfloat width); //函数接受1个参数,它用于指定被绘直线的近似宽度。但是,直线宽度的大小设置也存在限制。
GLfloat sizes[2] //存储受支持的直线宽度范围
GLfloat step; //存储受支持的直线宽度点大小增量
//获得受支持的直线宽度范围以及增量
glGetFloatv(GL_LINE_WIDTH_RANGE,sizes);
glGetFloatv(GL_LINE_WIDTH_GRANULARITY,&step);
这里,sizes数组将包含两个元素,分别表示glLineWidth的最小有效值和最大有效值。另外,变量step表示直线宽度范围之内最小允许步进值。指定一个位于范围之外的值并不会产生错误,如果指定的值比最大有效值大,系统会取最大有效值;如果指定的值比最小有效值小,系统会取最小有效值。
除了修改直线的宽度以外,我们还可以用点线或虚线模式来创建直线,这称为点画(stippling)。为了实现直线点画,首先必须利用下面这行代码启用点画功能:
glEnable(GL_LINE_STIPPLE);
然后,可以用glLineStipple函数创建这种模式:
void glLineStipple(GLint factor, GLushort pattern);
NOTE:glEnable函数所启用的任何特性或功能都可以用一个对应的glDisable调用来取消。
pattern参数是一个16位的值,它指定了一个模式,供绘直线所用。他的每个位都表示线段的一部分或者处于打开状态,或者处于关闭状态。在默认情况下,每个位对应一个像素,但factor参数可以作为乘法因子增加模式的宽度。
————————————————————————————
GL_TRIANGLES //三角形图元
顶点的指定次序以及方向的组合称为环绕(winding)。
在默认情况下,OpenGL认为逆时针方向环绕的一面是多边形的正面。如果想要改变OpenGL的这个默认行为,可以调用下面这个函数:
glFrontFace(GL_CW);
GL_CW参数告诉OpenGL顺时针环绕的多边形将被认为是正面的。为了把多边形的正面重新恢复为逆时针环绕,可以在这个函数中使用GL_CCW参数。
GL_TRIANGLE_STRIP //三角形带图元
可以绘制一串相连的三角形,从而节省大量的时间。
使用三角形带而不是分别指定每个三角形具有两个优点:
首先,用前三个顶点指定第一个三角形之后,对于接下来的每个三角形,只需要再指定一个顶点。需要绘制大量的三角形时,采用这种方法可以节省大量的程序代码和数据存储空间。第二个优点是运算性能的提供和带宽的节省。更少的顶点意味着数据从内存传输到图形卡的速度更快,并且顶点变换的次数也可以更少一些。
GL_TRIANGLE_FAN //三角形扇图元
创建一组围绕一个中心点的相连三角形。
用前三个顶点组成第一个三角形之后,后续的每个顶点(Vi)和原点(V0)以及前驱的那个顶点(Vi-1)形成了接下来的那个三角形。
————————————————————————————
glShadeModel(GL_FLAT);
告诉OpenGL用当前的颜色(也就是这个多边形的最后一个顶点的颜色)填充这个多边形。
glShadeMode(GL_SMOOTH);
告诉OpenGL根据每一个顶点的颜色对多边形就行渐变着色,对相邻的顶点的颜色进行匀和。
启动深度测试:
glEnable(GL_DEPTH_TEST);
启用或禁用背面消除:
glEnable(GL_CULL_FACE);
glDisable(GL_CULL_FACE);
多边形模式:
glPolygonMode(GL_BACK,GL_LINE);
glPolygonMode(GL_BACK,GL_FILL);
具体什么作用还不是很清楚,有待进一步研究。