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);

具体什么作用还不是很清楚,有待进一步研究。

  • 1
  • 2
  • 下一页

相关内容