一般约定为顶点以逆时针顺序出现在屏幕上的面正面,另一个面即成为反面。生活中常见的物体表面,通常都可以用这样的正面反面合理的被表现出来(请找一个比较透明的矿泉水瓶子,在正对你的一面沿逆时针画一个圆,并标明画的方向,然后将背面转为正面,画一个类似的圆,体会一下正面反面。你会发现正对你的方向,瓶的外侧是正面,而背对你的方向,瓶的内侧才是正面。正对你的内侧和背对你的外侧则是反面。这样一来,同样属于瓶的外侧这个表面,但某些地方算是正面,某些地方却算是反面了)。但也有一些表面比较特殊。例如麦比乌斯带(请自己Google一下),可以全部使用正面或全部使用背面来表示。可以通过glFrontFace函数来交换正面反面的概念。
glFrontFace(GL_CCW);  // 
设置CCW方向为正面CCWCounterClockWise,逆时针
glFrontFace(GL_CW);   // 
设置CW方向为正面CWClockWise,顺时针下面是一个示例程序,请用它替换第一课中的myDisplay函数,并将glFrontFace(GL_CCW)修改为glFrontFace(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(0.0f, 0.0f);
        glVertex2f(-0.5f, 0.0f);
    glEnd();
    glBegin(GL_POLYGON);              // 
按顺时针绘制一个正方形,在右上方
        glVertex2f(0.0f, 0.0f);
        glVertex2f(0.0f, 0.5f);
        glVertex2f(0.5f, 0.5f);
        glVertex2f(0.5f, 0.0f);
    glEnd();
    glFlush();
}


Picture
 


Comments




Leave a Reply