OpenGL學習筆記(三)
OpenGL繪製
清除視窗
在計算機中,儲存圖片的記憶體通常被計算機所繪製的前一幅影象所填充,因此在繪製新場景之前,一般需要把它清除為某種背景顏色。
void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha);
設定當前清除顏色,用於清除RGBA模式下的顏色緩衝區。其中red,green,blue和alpha值範圍限定在[0,1],預設的清除顏色是(0,0,0,0),也就是黑色。
void glClear(GLbitfield mask);
用當前的緩衝區清除值清除指定的緩衝區。mask引數值表如下所示(
緩衝區名稱
顏色緩衝區 GL_COLOR_BUFFER_BIT
深度緩衝區 GL_DEPTH_BUFFER_BIT
累積緩衝區 GL_ACCUM_BUFFER_BIT
模板緩衝區 GL_STENCIL_BUFFER_BIT
下面用紅色清除視窗:
glClearColor(1.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一行程式碼把清除顏色設定為紅色,第二行程式碼把整個視窗清除為當前清除顏色。
強制繪圖
void glFlush(void);
強制以前發出的OpenGL命令開始執行,因此保證它們能夠在有限的時間內完成。
畫點
點:可以用一組稱為頂點的浮點數表示。
glBegin(GL_POINTS); //選擇點作為圖元
glVertex3f(0.0f,0.0f,0.0f); //指定一個點
glVertex3f(50.0f,50.0f,50.0f); //指定另外一個點
glEnd(); //完成繪點
glBegin的引數GL_POINTS告訴OpenGL接下來的頂點將被用來畫點。這裡列出了2個頂點,它們將被解釋為2個特定的點,並且都將被繪製。
這裡有與glBegin和glEnd有關的一個重要概念:我們可以在它們之間列出多個圖形,只要它們是相同型別的圖元。即使用一個glBegin/glEnd序列可以隨自己所願包含許多個圖元。
1. void glBegin(GLenum mode);
標誌著一個頂點資料列表的開始,它描述了一個幾何圖元。mode引數指定了圖元的型別,它可以下列值之一:
值含義
GL_POINTS 單個的點
GL_LINES 一對頂點被解釋為一條直線
GL_LINE_STRIP 一系列的連線直線
GL_LINE_LOOP 和上面相同,但第一個頂點和最後一個頂點彼此相連
GL_TRIANGLES 3個頂點被解釋為一個三角形
GL_TRIANGLE_STRIP 三角形的連線串
GL_TRIANGLE_FAN 連線成扇形的三角形系列
GL_QUADS 4個頂點被解釋為一個四邊形
GL_QUAD_STRIP 四邊形的連線串
GL_POLYGON 簡單的凸多邊形的邊界
2. void glEnd(void);
標誌著一個頂點資料列表的結束
畫直線
直線:在OpenGL中,直線這個術語表示一段線段,而還是數學意義上的在兩端無限延伸的直線。
glBegin(GL_LINES);
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(50.0f,50.0f,50.0f);
glEnd();
上面程式碼在點(0,0,0)和(50,50,50)之間畫了一條直線。注意,如果指定了奇數個頂點,則最後一個頂點會被忽略。
畫多邊形
多邊形:由線段構成的單閉合環,其中線段是由它們的端點位置的頂點指定的。一般而言,多邊形可能非常複雜。因此,OpenGL對基本多邊形的構成進行了限制。首先,OpenGL多邊形的各條邊不能相交。其次,OpenGL多邊形必須是凸多邊形,也就是不存在內陷的部分。準確地說,在多邊形的內部任意取兩個點,如果連線這兩點的線段都在這個多邊形的內部,那麼這個多邊形就是凸多邊形。
glBegin(GL_ TRIANGLES); //三角形也是多邊形之一
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,50.0f,0.0f);
glVertex3f(50.0f,0.0f,0.0f);
glEnd();
上面程式碼繪製了一個三角形,如果指定了繪圖顏色的話,則該三角形將用該顏色進行填充。
由上可見,如果想要繪製圖元時,先在glBegin中設定好想要的圖元型別,然後將圖形頂點按順序排列即可(在OpenGL中,所有幾何物體最終都描述成一組有序的頂點)。當然,在繪製圖元時也可以控制它們的細節,如點的寬度、直線的寬度等。