#include <GL/glut.h>
void renderScene() {
//调用glClear将从窗口中清除最后一次所绘制的图形
glClear(GL_COLOR_BUFFER_BIT);
//设置当前绘图的颜色
glColor3f(0.98f, 0.625f, 0.12f);
//绘制矩形,第一对坐标表示左上角,第二对表示右下角
glRectf(-30.0f, 15.0f, 30.0f, -15.0f);
//刷新队列
//在内部,openGL的命令和语句常常等待在队列里
//直到openGL驱动程序同时处理几个“命令”
glFlush();
}
void setupRC() {
//设置了一种颜色,用于清除窗口
glClearColor(0.0f, 1.0f, 1.0f, 1.0f);
}
void changeSize(GLsizei w, GLsizei h) {
GLfloat a; //记录宽高比
if (h == 0) h = 1;
glViewport(0, 0, w, h);
//重置坐标系统
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//建立剪裁区域
a = (GLfloat)w / (GLfloat)h;
if (w <= h)
glOrtho(-100.0, 100.0, -100.0 / a, 100.0 / a, 1.0, -1.0);
else
glOrtho(-100.0*a, 100.0*a, -100.0, 100.0, 1.0, -1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main() {
//告诉GULT函数在创建的时候使用的是何种类型的显示模式
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //单缓冲,RGA颜色显示模式
glutCreateWindow("绘制矩形"); //实际创建窗口
//调用回调函数,刚行代码将将之前定义的renderScene函数设置成显示回调函数
//这意味着,当窗口需要被绘制的时候,GUIT将会调用这个函数
//例如,改变窗口大小、第一次显示或者窗口从被覆盖中恢复的时候
//都需要调用这个函数的
glutDisplayFunc(renderScene);
//每当窗口的大小改变的时候,就会调用这个函数的回调函数
glutReshapeFunc(changeSize);
//在这个程序中,将执行渲染之前应该完成的所有openGL初始化工作
setupRC();
glutMainLoop();
}
对于glViewpoint()函数以及 glOrtho()函数的使用和理解,参考http://blog.csdn.net/hutao1101175783/article/details/50917927;
效果图:

references:
openGL超级宝典;
http://blog.csdn.net/hutao1101175783/article/details/50917927