#include<GL/glut.h> //OpenGL實用工具包
#define drawLine(x1,y1,x2,y2) glBegin(GL_LINES); glVertex2f((x1),(y1));glVertex2f((x2),(y2));glEnd(); //巧用宏,減少代碼
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0); //指定清除顏色(黑色),即背景顏色
glShadeModel(GL_FLAT); //設置着色模式,採用恆定着色
}
void display(void) //繪製ZUFE(Zhejiang University of Finance & Economics)
{
glLineWidth(5.0f); //線段加粗5倍
glColor3f(0.0,0.0,1.0); //設置線段繪製顏色
drawLine(50.0,160.0,150.0,160.0); //Z上
drawLine(150.0,160.0,50.0,60.0); //Z中
drawLine(50.0,60.0,150.0,60.0); //Z下
glColor3f(0.0,1.0,1.0); //設置線段繪製顏色
drawLine(170.0,160.0,170.0,60.0); //U左
drawLine(170.0,60.0,270.0,60.0); //U中
drawLine(270.0,160.0,270.0,60.0); //U右
glColor3f(1.0,0.0,1.0); //設置線段繪製顏色
drawLine(290.0,160.0,390.0,160.0); //F橫1
drawLine(290.0,160.0,290.0,60.0); //F豎
drawLine(290.0,110.0,390.0,110.0); //F橫2
glColor3f(1.0,1.0,0.0); //設置線段繪製顏色
drawLine(410.0,160.0,510.0,160.0); //E橫1
drawLine(410.0,110.0,510.0,110.0); //E橫2
drawLine(410.0,60.0,510.0,60.0); //E橫3
drawLine(410.0,160.0,410.0,60.0); //E豎
glFlush(); //立刻開始處理保存在緩衝區中的OpenGL函數調用
}
void reshape(int w,int h)
{
glViewport(0,0,(GLsizei)w,(GLsizei)h); //爲了選擇一個更小的繪圖區域,在窗口中定義一個像素矩形,將圖像映射到這個矩形中
glMatrixMode(GL_PROJECTION); //指定哪一個矩陣是當前矩陣(GL_PROJECTION,對投影矩陣應用隨後的矩陣操作)
glLoadIdentity(); //將當前的用戶座標系的原點移到了屏幕中心:類似於一個復位操作
gluOrtho2D(0.0,(GLdouble)w,0.0,(GLdouble)h); //將當前的可視空間設置爲正投影空間,這個函數描述了一個平行修剪空間,意味着離觀察者較遠的對象看上去不會變小
}
int main(int argc,char** argv) //注意參數
{
glutInit(&argc,argv); //初始化GLUT並處理命令行參數
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //指定模式:單緩存OR雙緩存;RGBA模式OR顏色索引模式
glutInitWindowSize(560,200); //指定窗口大小(像素)
glutInitWindowPosition(100,100); //指定窗口左上角在屏幕上的位置
glutCreateWindow(argv[0]); //使用OpenGL場景創建一個窗口,參數爲窗口名稱
init(); //調用初始化函數
glutDisplayFunc(display); //註冊用於顯示圖形的回調函數,每當GLUT認爲需要重繪窗口時,都會執行該函數,故應將重繪場景所需調用的函數都放到顯示回調函數中。
glutReshapeFunc(reshape); //重繪回調函數
glutMainLoop(); //進入主循環並處理事件,此時創建的所有窗口都會顯示出來,被渲染到這些窗口中的內容也將顯示出來,程序開始處理事件,註冊的顯示回調函數被觸發
return 0;
}
運行效果圖: