在 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);
分享到:
相关推荐
多边形填充 计算机图形学 TC 程序代码 多边形填充 计算机图形学 TC 程序代码
逐次多边形裁剪算法算法的思想发窗口四条边界单一逐次对多边形进行裁剪,每次用窗口的一条边界(包括延长线)对要裁剪的多边形进行裁剪,裁剪时,顺序地测试多边形各顶点,保留边界内侧的顶点,删除外侧的顶点,同时,...
关于计算机图形学多边形填充的实验报告内容
使用VC++6.0编写的计算机图形学实验课,希望对大家有用!
实验三计算机图形学多边形填充算法
五年级数学上册五生活中的多边形—多边形的面积5.4组合图形的面积同步练习青岛版六三制.pdf
#include , line(left,top,right,top); line(left,bottom,right,bottom); line(left,top,left,bottom); line(right,top,right,bottom); //绘制边框和裁剪图形
MFC 编的计算机图形学中的多边形着色问题
使用C#实现计算机图形学中的多边形裁剪算法,界面友好,功能完善
这是计算机图形学课程中的一个练习题,鼠标点击绘制多边形,绘制完成后用算法对多边形进行填充。这是我自己实现的源代码。
计算机图形学中多边形的实现,在屏幕上通过点击鼠标实现多边形。。。
本程序采用Java语言,单击画多边形的边,双击围成多边形,三击开始填充。并且可以修改多边形边的颜色,填充色。
计算机图形学种子填充算法!多边形填充!能运行的源文件压缩包!
第部分计算机图形学多边形属性字符处理优秀文档.ppt
计算机图形学之多边形裁剪算法,本程序中包括直线画法,直线裁剪,多边形画法和多边形裁剪过程,可以实现。
在MFC中实现求多边形面积的一个简单例子
计算机图形学课件:第6讲-多边形填充.ppt
计算机图形学作业,利用VC应用软件进行直线,圆形和多边形扫描的绘制。
Android自定义View——多边形网格属性图
计算机图形学课件,第四章 多边形填充.ppt