多边形
1,多边形的两面和绘制
这是一个三维的概念,一个多边形有正面和反面,我们可以设置正面和反面的绘制方式
glPolygonMode(GL_FRONT,GL_POINT) 正面,只绘制顶点
GL_BACK 反面 GL_FRONT_AND_BACK正面和反面
GL_FILL填充的绘制方式 GL_LINE绘制边缘的线
2,反转
多边形有正面和反面,比如默认逆时针绘制的为正面,在一张透明纸上逆时针画一个矩形,那么面对我们的画的这个面就是正面,反过来的那个面就是反面,我们可以改变正面和反面的概念,把顺时针的变成正面。
glFrontFace(GL_CCW) 逆时针正面,CCW即counterclockwise
glFrontFace(GL_CW) 顺时针正面,CW即clockwise
3,剔除多边形表面
glEnable(GL_CULL_FACE) 开启剔除 glDisable(GL_CULL_FACE)关闭剔除
glCullFace(GL_FRONT) 剔除正面 GL_BACK反面 GL_FRONT_AND_BACK 正面和反面
4,镂空多边形
glEnable(GL_POLYGON_STIPPLE) 开启镂空
glPolygonStipple(Mask) Mask是一个128指向128字节的空间,表示32*32的矩形该如何镂空,顺序是从左下开始,1表示不镂空,0表示镂空。
void myDisplay(void)
{
GLuByte* Mask[128] = {
0x00,0x11,0x00,0x11,
//一共128个值
0x00,0x11,0x00,0x11,
};
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(Mask);
glRectf(-0.5f,-0.5f,0.5f,0.5f);
glFlush();
}
Mask也可以用画图工具,编辑一个32*32的图片,然后保存为单色位图Mask.bmp,然后读出里面的数据再使用就可以了
#include <stdio.h>
File* fb = fopen("Mask.bmp","rb");
if (!fb)
exit(0);
if (fseek(fb,-(int)sizeof(Mask),SEEK_END))
exit(0);
if (!fread(Mask,sizeof(Mask),1,fb))
exit(0);
学习过程中还了解到了一个新的东西 “莫比乌斯带” 只有一个面,感觉很神奇,有兴趣自己去百度看看,过山车就用到这个原理来节省了空间,个人理解。