1.凸多边形的定义是多边形的内角均小于180°。
2.
多边形的镂空
多边形可以设置镂空效果,使用glEnable(GL_POLYGON_STIPPLE)开启镂空模式,之后使用glPolygonStipple
设置镂空基本图案。
void glPolygonStipple (const GLubyte *mask);
mask是一个指向32*32*8bit的矩形空间,这个矩形空间中前8位表示图案最下方从左到右的8位像素的显示方式,1不镂空,0镂空显示背景色。
可以用一幅大小为32*32像素的图案来定义多边形镂空的基本样式单元。
制作方式为:
- 1. 打开Windows自带的画图程序,新建一个空白图像
- 2. 按下Ctrl+E,打开属性页,设置宽度和高度都为32
-
3. 按下Ctrl键,之后波动鼠标滚轮放大图像到最大,在图像标题栏“查看”项里勾选标尺和网格线,方便作图:
- 4. 之后就可以用画笔在上边做你想要镂空的图案了,做完之后另存为mask.bmp,并且保存类型里选择“单色位图”,忽略警告。
相关代码:
[cpp] view plain copy print?
- void myDisplay(void)
- {
-
- glClear(GL_COLOR_BUFFER_BIT);
- static GLubyte Mask[128];
- FILE *fp;
- // fp = fopen("mask.bmp", "rb");
- //fopen现在显示不安全,所以一般使用fopen_s
- fopen_s(&fp,"mask.bmp","rb");
- //出现问题的原因在于我把mask.bmp放在了源代码外面,实际应该和源代码放在同一个文件夹里
- if( !fp )
- exit(0);
- if( fseek(fp, -(int)sizeof(Mask), SEEK_END) )
- exit(0);
- if( !fread(Mask, sizeof(Mask), 1, fp) )
- exit(0);
- fclose(fp);
- glClear(GL_COLOR_BUFFER_BIT);
- glEnable(GL_POLYGON_STIPPLE);
- glPolygonStipple(Mask);
- glRectf(-0.7f, -0.7f, 0.7f, 0.7f);
- glFlush();
- }
效果: