// 从这里开始进行所有的绘制
int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// 清除屏幕和深度缓存
glLoadIdentity();// 重置当前的模型观察矩阵
//设置图元颜色
glColor3f(1.0, 0.0,0.0);
//绘制一个矩形,默认为填充模式,但是可以通过glPlygonMode来设置为线框
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
glBegin(GL_POLYGON);
glVertex3f(0.25,0.25,0.4);
glVertex3f(0.75,0.25,0.4);
glVertex3f(0.75,0.75,0.4);
glVertex3f(0.25,0.75,0.4);
glEnd();
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
//画点,通过glPointSize设置一个点的宽度
glPointSize(10);
glBegin(GL_POINTS);
glVertex3f(0.25,0.25,0.0);
glVertex3f(0.75,0.25,0.0);
glVertex3f(0.75,0.75,0.0);
glVertex3f(0.25,0.75,0.0);
glEnd();
glPointSize(1);
//画 虚线 ,点线,通过glLineStipple设置虚线模型,然后enable GL_LINE_STIPPLE开关
glLineStipple(2, 0x5555);
glEnable(GL_LINE_STIPPLE);
glBegin(GL_LINES);
glVertex3f(0.25,0.85,0.6);
glVertex3f(0.75,0.85,0.6);
glEnd();
glDisable(GL_LINE_STIPPLE);
//画圆,通过glLineWidth设置直线的宽度
glColor3f(0.0,1.0,0.0);//颜色修改为绿色
glLineWidth(10);
glBegin(GL_LINE_LOOP);
#define PI 3.1415926f
#define POINTS 100
float angel = 0.0f;
for (int i =0 ; i<POINTS; i++)
{
angel = 2.0f * PI * i / POINTS;
glVertex3f(cos(angel),sin(angel),0.5f);
}
glEnd();
glLineWidth(1);
glFlush();
return TRUE;
// 一切 OK
}
值得注意的是 深度缓存,
glClearDepth(1.0f);// 设置深度缓存
glEnable(GL_DEPTH_TEST);// 启用深度测试
glDepthFunc(GL_LEQUAL);// 所作深度测试的类型
这几个是表示启用深度缓存测试,所有小于等于1.0的z值的顶点将会显示,而且如果有两个顶点都在同一个x,y位置,那么将会显示z值小的那个顶点。