#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