-
在嵌入式系统编程中使用C/C++实现镂空多边形技术
资源介绍
(3)剔除多边形表面
在三维空间中,一个多边形虽然有两个面,但我们无法看见背面的那些多边形,而一些多边形虽然是正面
的,但被其他多边形所遮挡。如果将无法看见的多边形和可见的多边形同等对待,无疑会降低我们处理图
形的效率。在这种时候,可以将不必要的面剔除。
首先,使用 glEnable(GL_CULL_FACE);来启动剔除功能(使用 glDisable(GL_CULL_FACE)可以关闭之)
然后,使用 glCullFace 来进行剔除。
glCullFace 的参数可以是 GL_FRONT,GL_BACK 或者 GL_FRONT_AND_BACK,分别表示剔除正面、剔
除反面、剔除正反两面的多边形。
注意:剔除功能只影响多边形,而对点和直线无影响。例如,使用 glCullFace(GL_FRONT_AND_BACK)
后,所有的多边形都将被剔除,所以看见的就只有点和直线。
(4)镂空多边形
直线可以被画成虚线,而多边形则可以进行镂空。
首先,使用 glEnable(GL_POLYGON_STIPPLE);来启动镂空模式(使用 glDisable(GL_POLYGON_STIPPLE)
可以关闭之)。
然后,使用 glPolygonStipple 来设置镂空的样式。
void glPolygonStipple(const GLubyte *mask);
其中的参数 mask 指向一个长度为 128 字节的空间,它表示了一个 32*32 的矩形应该如何镂空。其中:第一
个字节表示了最左下方的从左到右(也可以是从右到左,这个可以修改)8 个像素是否镂空(1 表示不镂空,
显示该像素;0 表示镂空,显示其后面的颜色),最后一个字节表示了最右上方的 8 个像素是否镂空。
但是,如果我们直接定义这个 mask 数组,像这样:
static GLubyte Mask[128] =
{
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, // 化
- 上一篇: Java 线程总结
- 下一篇: 设置颜色表-c/c++嵌入式系统编程