【OpenGL】多边形的镂空

时间:2022-02-25 09:24:32

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


【OpenGL】多边形的镂空


  • 3. 按下Ctrl键,之后波动鼠标滚轮放大图像到最大,在图像标题栏“查看”项里勾选标尺和网格线,方便作图:


【OpenGL】多边形的镂空


  • 4. 之后就可以用画笔在上边做你想要镂空的图案了,做完之后另存为mask.bmp,并且保存类型里选择“单色位图”,忽略警告。


相关代码:


[cpp] view plain copy print?
  1. void myDisplay(void)      
  2. {         
  3.     //镂空效果  
  4.     glClear(GL_COLOR_BUFFER_BIT);  
  5.     static GLubyte Mask[128];   
  6.     FILE *fp;      
  7.    // fp = fopen("mask.bmp""rb");
  8.    //fopen现在显示不安全,所以一般使用fopen_s
  9.     fopen_s(&fp,"mask.bmp","rb");   
  10.    //出现问题的原因在于我把mask.bmp放在了源代码外面,实际应该和源代码放在同一个文件夹里  
  11.     if( !fp )        
  12.         exit(0);      
  13.     if( fseek(fp, -(int)sizeof(Mask), SEEK_END) )      
  14.         exit(0);   
  15.     if( !fread(Mask, sizeof(Mask), 1, fp) )       
  16.         exit(0);      
  17.     fclose(fp);       
  18.     glClear(GL_COLOR_BUFFER_BIT);     
  19.     glEnable(GL_POLYGON_STIPPLE);    
  20.     glPolygonStipple(Mask);     
  21.     glRectf(-0.7f, -0.7f, 0.7f, 0.7f);   // 绘制一个有镂空效果的正方形          
  22.     glFlush();  
  23. }  

效果:

【OpenGL】多边形的镂空