// 从这里开始进行所有的绘制
int DrawGLScene(GLvoid)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存
glLoadIdentity();// 重置当前的模型观察矩阵
glColor3f(1.0, 0.0,0.0); //设置接下来所要画的东西的颜色
//绘制一个矩形,默认为填充模式
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
glBegin(GL_POLYGON);// 设置各个顶点,glBegin开始,glEnd结束
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(10);//画点,通过glPointSize设置一个点的宽度
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(1.0,0.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;
}
// 以下是关于缓存的一些函数
glClearDepth(1.0f);// 设置深度缓存
glEnable(GL_DEPTH_TEST);// 启用深度测试
glDepthFunc(GL_LEQUAL);// 所作深度测试的类型
下面附上奥运五环小程序及其运行结果:
</pre><pre name="code" class="cpp">
#include <GL/glut.h>
#include <GL/GLAUX.H>
GLuint OlympicRings;
void initialize(){
glClearColor(0.25, 0.0, 0.2, 10.5); //清屏,设置底部为白色
OlympicRings = glGenLists(1); //显示列表
glNewList(OlympicRings, GL_COMPILE);
glColor3f(1.0, 1.0, 0.0); //绘制黄色圆环
glTranslatef(-25.0, -15.0, 0.0); //坐标移动
glutSolidTorus(1, 20.0, 15, 60);
glColor3f(0.0, 1.0, 0.0); //绘制绿色圆环
glTranslatef(45.0, 0.0, 0.0); //坐标移动
glutSolidTorus(1, 20.0, 15, 60);
glColor3f(0.0, 0.0, 0.0); //绘制黑色圆环
glTranslatef(-20.0, 25.0, 0.0); //坐标移动
glutSolidTorus(1, 20, 15, 60);
glColor3f(0.0, 0.0, 1.0); //绘制蓝色环
glTranslatef(-45.0, 0.0, 0.0); //坐标移动
glutSolidTorus(1, 20, 15, 60);
glColor3f(1.0, 0.0, 0.0); //绘制红色环
glTranslatef(90, 0.0, 0.0); //坐标移动
glutSolidTorus(1, 20.0, 15, 60);
glEndList();
}
void display(){
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glCallList(OlympicRings);//调用显示列表
glFlush();
}
int main(){
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(800, 600);
glutInitWindowPosition(200, 50);
glutCreateWindow("奥运五环");
glutDisplayFunc(display);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-70.0f, 70.0f, -70.0f, 70.0f);
initialize();
glutMainLoop();
return 0;
}