1. 程式人生 > >OpenGL學習筆記(三)

OpenGL學習筆記(三)

OpenGL繪製

清除視窗

在計算機中,儲存圖片的記憶體通常被計算機所繪製的前一幅影象所填充,因此在繪製新場景之前,一般需要把它清除為某種背景顏色。

     void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha);

設定當前清除顏色,用於清除RGBA模式下的顏色緩衝區。其中red,green,bluealpha值範圍限定在[0,1],預設的清除顏色是(0,0,0,0),也就是黑色。

    void glClear(GLbitfield mask);

用當前的緩衝區清除值清除指定的緩衝區。mask引數值表如下所示(

若要清除多個緩衝區則運用位運算or)

    緩衝區名稱

    顏色緩衝區           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個特定的點,並且都將被繪製。

這裡有與glBeginglEnd有關的一個重要概念:我們可以在它們之間列出多個圖形,只要它們是相同型別的圖元。即使用一個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中,所有幾何物體最終都描述成一組有序的頂點)。當然,在繪製圖元時也可以控制它們的細節,如點的寬度、直線的寬度等。