【OpenGL】 第一篇 OpenGL概覽

 

------------------------------------------------------------------------------------------------------------------------編程

從如今開始,認真學習OpenGL的相關知識,把讀過的每一章都作記錄,但願能堅持到最後。緩存

------------------------------------------------------------------------------------------------------------------------網絡

我從你們所熟知的」OpenGL紅寶書「,即OpenGL編程指南第八版開始入手,該書已經結合了OpenGL4.3的新特性。架構

由於是看的是中文翻譯版本,我打算和英文原版一塊兒看,有時候確實是必須的,由於看英文更接近本質。app

------------------------------------------------------------------------------------------------------------------------編程語言

堅持每一篇都寫個例子,印象會更加深入。好了,不說廢話,開始了。ide

------------------------------------------------------------------------------------------------------------------------函數

【OpenGL背景】工具

OpenGL發展到如今,已經超過了20年的時間。做爲一個成熟而久負盛名的跨平臺的計算機圖形應用程序接口規範,學習

它已經被普遍應用於遊戲,影視,軍事,航空航天,地理,醫學,機械設計,以及各種科學數據可視化的領域。

另外,隨着網絡以及移動平臺的崛起,WebGL以及OpenGL ES的標準也逐漸深刻人心,這二者同OpenGL有着千絲萬縷的聯繫。

 

OpenGL幾乎支持全部現有的主流操做系統平臺,包括Windows、Mac OS X以及各類UNIX平臺。同時也能夠用於幾乎全部

主流的編程語言包括C/C++、Java、C#、VB、Python、Perl等。能夠說OpenGL無處不在。而目前流行的遊戲引擎cocos2d-x

底層的渲染便是採用了OpenGL技術,要理解以及修改引擎架構,就不可避免的要接觸OpenGL,這也是我學習的一個方向。

------------------------------------------------------------------------------------------------------------------------

【什麼是OpenGL】

OpenGLOpen Graphics Library,開放圖形庫。

OpenGL是圖形硬件的一種軟件接口(The OpenGL graphics system is a software interface to graphics hardware.),

便可以對圖形硬件設備特性進行訪問的軟件庫,方便咱們開發交互式的三維計算機圖形應用程序。

OpenGL被設計爲與硬件無關的接口,所以它是跨平臺的。那麼咱們就能夠在不考慮操做系統的前提下,實現咱們的OpenGL接口。

 

OpenGL自身並不包含任何執行窗口任務或者處理用戶輸入的函數,不過不要緊,咱們將會用到一個第三方跨平臺的庫

GLUT(OpenGL Utility Toolkit)來幫助咱們處理這些窗口事件,關於它的內容接下來會介紹。

另外,OpenGL也沒有提供任何用於表達三維物體模型(models of three-dimensional objects),

或者讀取圖像文件(例如JPEG文件)的操做。

取而代之,咱們須要經過一系列的幾何圖元(包括點、線、三角形以及Patch)來建立三維空間的物體。

 

OpenGL是採用客戶端-服務端的形式實現的,咱們本身所編寫的應用程序能夠當作客戶端,而計算機圖形硬件廠商所

提供的OpenGL實現能夠看作是服務端。(OpenGL is implemented as a client-server system,with the application

you write being considered the client, and the OpenGL implementation provided by the manufacturer

of your computer graphics hardware being the server.

 

OpenGL 是基於光柵化的系統(rasterization-based system),用於生成圖像。但還有其餘方法例如光線追蹤

(ray tracing),但有可能也須要用到OpenGL來顯示圖像。

------------------------------------------------------------------------------------------------------------------------ 

【OpenGL程序渲染圖像主要的操做】

一、爲構建形狀(Shape)指明(Specify)來自OpenGL的幾何圖元的數據。

二、使用不一樣的着色器(Shapes)對輸入的圖元數據執行計算操做,由此來判斷它們的位置、顏色、以及其餘渲染屬性。

三、將輸入圖元的數學描述轉換爲在屏幕位置上相對應的片斷(fragments)。這個過程稱之爲光柵化(Rasterization)。

四、最後,爲每一個通過光柵化階段的片斷執行片斷着色器(fragment shader),該操做決定了片斷的最終顏色以及位置。

五、有時可能須要對每一個片斷(per-fragment)執行一些額外的操做。

例如判斷片斷產生的對象是否可見,或者將片斷的顏色和當前屏幕位置的顏色相融合。

 ------------------------------------------------------------------------------------------------------------------------

 【理解經常使用的圖形學名詞】

渲染(Rendering):表示計算機從模型建立最終圖像的過程。

 

模型(Model):或者又稱爲對象,是經過幾何圖元(geometric primitives)例如點(points)、線(lines)

和三角形(triangles)來構建的。而這些幾何圖元是經過頂點(vertices)來指明的。

 

着色器(Shaders):它是圖形硬件設備所執行的一類特殊函數。

理解着色器的最好方法是把它看作專門爲圖形處理單元(GPU)編譯的一種小型程序。

OpenGL在其內部包含了全部的編譯器工具,能夠直接從着色器代碼建立GPU執行所需代碼。

在OpenGL中,會用到四種不一樣的着色階段(shader stages)。最經常使用的包括頂點着色器(vertex shaders)和

片斷着色器(fragment shaders)。前者用於處理頂點數據(vertex data),後者用於處理光柵化後的片斷數據。

 

像素(pixel):指的是顯示器上最小的可視單元。在計算機系統中存儲於幀緩存中。

 

幀緩存(framebuffer):由圖形硬件設備管理的一塊獨立內存區域,能夠直接映射到最終的顯示設備上。

 ------------------------------------------------------------------------------------------------------------------------

【關於GLUT以及GLEW】 

你可能會常常在OpenGL程序代碼中看到以glut開頭的函數,他們來自第三方庫OpenGL Utility Toolkit,就是咱們所說的GLUT。

這是一個很是流行的跨平臺工具庫(cross-platform),能夠用來顯示窗口、管理用戶輸入,以及執行其餘操做。

另外Freeglut是原始OpenGL庫的一個新變種。

 

你也可能會看到相似glewInit()這樣的函數,它來源於OpenGL Extension Wrangler,也就是GLEW

官網關於它的介紹以下:

The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source C/C++ extension loading library.

GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform.

正如上文所說的,GLEW是一個跨平臺的C++擴展庫,基於OpenGL圖形接口。GLEW能自動識別你的平臺所支持的所有OpenGL高級擴展涵數。

 ------------------------------------------------------------------------------------------------------------------------

看了又寫了這麼多字,想必都有點迷糊了。

接下來就應該寫寫Hello OpenGL了。

 

 

2015.06.29

廣州

相關文章
相關標籤/搜索