OPENGL填充区属性之——————
OPENGL填充图案函数
首先,还是配置好环境。
默认时,凸多边形使用当前颜色设定显示成一个实心颜色区域。为了用OPENGL的图案填充一个多变形,我们可以使用32*32位的掩模。填充图案使用OPENGL数据类型GLubyte以无符号字节进行描述,如同在glBtmap函数中一样。
建立掩模后,将其用做填充图案,可用glPloygonStipple()函数来填充,然后激活子程序,最后再关闭图案填充。代码如下:
#include<windows.h>
#include<GL/gl.h>
#include<GL/glu.h>
#include<GL/glut.h>
voiddisplay(void)
{
GLubytefly[]={//第二个矩形点画模式的mask值
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x80,0x01,0xC0,0x06,0xC0,0x03,0x60,
0x04,0x60,0x06,0x20,0x04,0x30,0x0C,0x20,
0x04,0x18,0x18,0x20,0x04,0x0C,0x30,0x20,
0x04,0x06,0x60,0x20,0x44,0x03,0xC0,0x22,
0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,
0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,
0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,
0x66,0x01,0x80,0x66,0x33,0x01,0x80,0xCC,
0x19,0x81,0x81,0x98,0x0C,0xC1,0x83,0x30,
0x07,0xe1,0x87,0xe0,0x03,0x3f,0xfc,0xc0,
0x03,0x31,0x8c,0xc0,0x03,0x33,0xcc,0xc0,
0x06,0x64,0x26,0x60,0x0c,0xcc,0x33,0x30,
0x18,0xcc,0x33,0x18,0x10,0xc4,0x23,0x08,
0x10,0x63,0xC6,0x08,0x10,0x30,0x0c,0x08,
0x10,0x18,0x18,0x08,0x10,0x00,0x00,0x08
};
GLubytehalftone[]={//第三个矩形点画模式的mask值
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55
};
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glRectf(25.0,25.0,125.0,125.0);
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(fly);
glRectf(125.0,25.0,225.0,125.0);
glPolygonStipple(halftone);
glRectf(225.0,25.0,325.0,125.0);
glDisable(GL_POLYGON_STIPPLE);
glFlush();
}
voidmyinit(void)
{
glClearColor(0.0,0.0,0.0,1.0);
glMatrixMode(GL_PROJECTION);//Setprojectionparameters.
gluOrtho2D(0.0,400.0,0.0,150.0);
//glShadeModel(GL_FLAT);
}
intmain(intargc,char**argv)
{
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
glutInit(&argc,argv);
//glutInitPosition
glutInitWindowPosition(0,0);
glutInitWindowSize(350,150);
glutCreateWindow("AnExampleOpenGLProgram");
//glutInitWindow(argv[0]);
myinit();
glutDisplayFunc(display);
glutMainLoop();
}
执行结果为: