多边形的绘制
(一)多边形的两面与其绘制方法
从三维的角度来看,一个多边形具有两个面。
每一个面都可以设置不同的绘制方式:
- 填充;
- 只绘制边缘轮廓线;
- 只绘制顶点;
其中“填充”是默认的方式。
可以为两个面分别设置不同的方式。
glPolygonMode的原型是:void glPolygonMode(GLenum face,GLenum mode);
用于控制多边形的显示方法。
face将确定显示模式将适用于物体的哪些部分,控制多边形的正面和背面的绘图模式:
参数 | 含义 |
---|---|
GL_FRONT | 显示模式将适用于物体的前向面(也就是物体能看到的面) |
GL_BACK | 显示模式将适用于物体的后向面(也就是物体上不能看到的面) |
GL_FRONT_AND_BACK | 显示模式将适用于物体的所有面 |
mode这个参数确定选中的物体的面以何种方式显示(显示模式):
参数 | 含义 |
---|---|
GL_POINT | 显示顶点,多边形用点显示 |
GL_LINE | 显示线段,多边形用轮廓显示 |
GL_FILL | 显示面,多边形采用填充形式 |
glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充方式
glPolygonMode(GL_BACK, GL_LINE); // 设置反面为边缘绘制方式
glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); // 设置两面均为顶点绘制方式
(二)反转
正面
按照约定,如果多边形的顶点以逆时针顺序出现在屏幕上,它便称为“正面”。
但也有一些表面比较特殊。例如“麦比乌斯带”(请自己 Google 一下),可以全部使用“正面”或全部使用“背面”来表示。
glFrontFace
glFrontFace
是opengl的初级命令,有两个基本作用,一是可以用来用在某些特殊场合(比如剔除面片),二是可以提高渲染效率。
函数原型:
void glFrontFace(GLenum mode);
作用是控制多边形的正面是如何决定的。在默认情况下,mode是GL_CCW。
mode的值为:
参数 | 含义 |
---|---|
GL_CCW | 表示窗口坐标上投影多边形的顶点顺序为逆时针方向的表面为正面。 |
GL_CW | 表示顶点顺序为顺时针方向的表面为正面。 |
顶点的方向又称为环绕。
实例
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充模式
glPolygonMode(GL_BACK, GL_LINE); // 设置反面为线形模式
glFrontFace(GL_CCW); // 设置逆时针方向为正面
glBegin(GL_POLYGON); // 按逆时针绘制一个正方形,在左下方
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, -0.5f);
glVertex2f(