`
落花虽有意
  • 浏览: 183106 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

关于多边形及与其他图形的共同属性

阅读更多

在 OpenGL 里面,一个多边形至少有 3 个顶点,所有边不能相交,并且只能直接绘制出凸多边形,也就是说可以间接的画出凹多边形,对于任意一个凹多边形我们都可以把它看作为多个凸多边形拼凑起来并且隐藏掉凹多边形内部的所有边构成,实际上,用 OpenGL 绘制凹多边形就是这个思想,本身也提供了隐藏边的函数,这里就不多说了。

 

绘制形状(这里的形状指 三角形,四边形,多边形等)与前面说过的绘制 点 和 直线 还是有很大不同的。因为形状具有两面性,即前面和后面,我们可以自己指定前面和后面,同时也可以单独指定前面和后面的有些性质。下面具体介绍。

 

(一)前面 和 后面:

默认情况下,如果绘制多边形的顶点的排列顺序是逆时针的,则该多边形是前面的,即展现在我们眼前的是前面,和我们平时看物体一样;如果顶点的排列顺序是顺时针的,则该多边就是后面的,即展现在我们眼前的是背面。

当然我们是可以改变这种默认性质的。这里就要用到一个函数:glFrontFace()   ,该函数有一个参数,且只能是 GL_CW 或 GL_CCW 中的一个。GL_CW 表示按顺时针顺序定义的多边形是前面的,即与默认情况相反;GL_CCW 表示按逆时针顺序定义的多边形是前面的,即与默认情况相同。

 

(二)填充模式:

一个多边形可以进行填充也可以不填充,这都是可以设置的,利用到函数 glPolygonMode() ,该函数有两个参数,第一个参数表示将要设置填充模式的面,即前面或后面或前面和后面同时指定,分别用常量 GL_FRONT , GL_BACK  GL_FRONT_AND_BACK 表示; 第二个参数指定绘制模式,可以是 GL_POINT , GL_LINE , GL_FILL ,GL_POINT 表示只在多边形的顶点画点,GL_LINE 表示只画多边形的边,即外轮廓,GL_FILL 表示要填充多边形。

当我们选择 GL_FILL 时,我们还可以自定义填充模式,就像我们前面自定义直线的线型一样。填充模式是一个 32 * 32 的位图,其中的每一位代表屏幕上的一个点,0 表示不显示,1 表示显示。在表示位图时,以一个字节为单位,以GLubyte 为数据类型,从左下角开始自左向右自下而上地表示。

就像前面我们要使直线的线型起作用一样,这里也要先使自定义填充模式能够使用,如下:

glEnable(GL_POLYGON_STIPPLE);

 

要恢复正常填充模式则如下:

glDisable(GL_POLYGON_STIPPLE);

 

设置填充模式如下:

glPolygonStipple(GLubyte 型数组的自定义填充模式);

 上面说的这些不只是对多边形,对三角形,四边形也是如此,而且设置的参数和函数也都完全一样,因为对于它们我们也看作是两面的。

 

下面是个画多边形的例子的主要代码:

	GLubyte polygonFillPattern[] = 
	{
		0x00 , 0x00, 0x00 , 0x00 , // 其他略写了	
	};

	glPolygonMode(GL_FRONT_AND_BACK , GL_FILL);
	glPolygonStipple(polygonFillPattern);
	glEnable(GL_POLYGON_STIPPLE);

	glBegin(GL_POLYGON);
	glVertex2f(-0.8f , 0.8f);
	glVertex2f(-0.8f , -0.8f);
	glVertex2f(0.8f , -0.8f);
	glVertex2f(0.8f , 0.8f);
	glEnd();

	glDisable(GL_POLYGON_STIPPLE);

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics