初見OpenGL

WTF

OpenGL 是一種應用程序編程接口(Application Programming Interface, API),它是一種可以對圖形硬件設備特性進行訪問的軟件庫。OpenGL 被設計爲一個現代化的、硬件無關的接口,因此我們可以在不考慮計算機操作系統或窗口系統的前提下,在多種不同的圖形硬件系統上,或者完全通過軟件的方式(如 果當前系統沒有圖形硬件)實現 OpenGL 的接口。OpenGL 自身並不包含任何執行窗口任務 或者處理用戶輸入的函數。
一個用來渲染圖像的 OpenGL 程序需要執行的主要操作如下所示。

  1. 從 OpenGL 的幾何圖元中設置數據,用於構建形狀。
  2. 使用不同的着色器(shader)對輸入的圖元數據執行計算操作,判斷它們的位置、顏色,以及其他渲染屬性。
  3. 將輸入圖元的數學描述轉換爲與屏幕位置對應的像素片元(fragment)。這一步也稱作光柵化(rasterization)。
  4. 最後,針對光柵化過程產生的每個片元,執行片元着色器(fragment shader),從而決定這個片元的最終顏色和位置。
  5. 如果有必要,還需要對每個片元執行一些額外的操作,例如判斷片元對應的對象是否可見,或者將片元的顏色與當前屏幕位置的顏色進行融合。

OpenGL 是使用客戶端 - 服務端的形式實現的,我們編寫的應用程序可以看做客戶端,而計算機圖形硬件廠商所提供的 OpenGL 實現可以看做服務端。

Begining

環境搭建 參考這篇
渲染流程如下圖

其中常用的是頂點着色器(決定位置)和片元着色器(決定片元的存在與顏色)

說說座標

對了這時候需要補充一下座標的概念, OpenGL是右手座標系,默認以屏幕的中心爲遠點(0,0,0), 往右爲x正方向,往上爲y正方向,垂直於屏幕向外爲z正方向,座標中每個點的範圍爲[-1 ,1]
伸出右手,手心面對自己,中指指向自己,則拇指指向x+,食指指向y+,中指指向z+。

有了座標的概念,就可以先搞個簡單的圖形了

    /// 頂點數據
    GLfloat vVerts[] = {
        -0.5f, 0.0f, 0.0f,  // 依次表示x,y,z的座標值
        0.5f, 0.0f, 0.0f,
        0.0f, 0.5f, 0.0f
    };

這是個簡單三角形,然而複雜的圖形也都是一個個座標拼出來的。具體的着色器如何渲染圖形,會放到另一篇文章來分析。
看到這裏,我們便可以畫一些簡單的圖形了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章