Modern OpenGL 環境搭建

2021-07-09 01:49:48 字數 2125 閱讀 9283

為了建立乙個很酷炫的圖形,我們首要做的是建立乙個opengl上下文和乙個繪製視窗。但是,opengl本身並不負責這部分的工作,別忘了它只是乙個專注於圖形開發的規格說明或者是乙個由顯示卡開發商實現的程式庫。這就意味著我們需要自己建立乙個視窗、定義乙個上下文而且還要處理輸入。

幸運的是,有一些庫已經提供了我們需要完成的上述功能,而且其中恰好有一些庫是針對opengl的。這些庫接管了所有與特定作業系統相關的工作,為我們提供了乙個純粹的繪製視窗和opengl上下文。通過使用這些庫,我們可以專心於圖形程式設計而幾乎不用考慮其他。這樣的庫有:glutsdlsfmlglfw。在這個教程中,作者使用的是glfw

就本人了解到的內容來看,國內使用glfw的還是比較少的,至少不像glut那麼多。那麼這個教程的作者為什麼要選擇這個庫呢?通過調研我發現了如下的解釋:

首先glut太老,已經「死掉了」——最後乙個版本好像還是90年代的。其次,現在出現的freeglut雖然完全相容glut,但是好像bug太多,穩定性不太好。好像還可以使用qt做類似的功能,但是太龐大,所以選擇glfw可能是乙個非常好的選擇。glfw是開源的,另乙個比肩的開源專案是sdl。

但是,僅有glfw是不夠的。glfw提供了opengl和作業系統之間的橋梁,但是並沒有提供opengl規格和真正底層實現的橋梁,換句話說,如何讓我們使用的opengl的函式呼叫鏈結到真正的函式體。要知道,像前面所說,這些規格的具體實現是取決於具體的顯示卡裝置廠商的。所以必然存在不同版本的opengl實現庫。那麼,如何讓我們呼叫的opengl函式在執行時找到我們平台上具體的(函式庫的)函式體呢?這就要求開發者來檢索他們可能用到的函式體並將它們儲存到函式指標方便後面的使用。這種檢索是也是依賴具體作業系統的,在windows中大概是下面這個樣子:

// define the function

's prototype

typedef void (*gl_genbuffers) (glsizei, gluint*);

// find the function

and assign it to a function pointer

gl_genbuffers glgenbuffers = (gl_genbuffers)wglgetprocaddress("glgenbuffers");

// function can now be called as normal

gluint buffer;

glgenbuffers(1, &buffer);

正如你看到的,這些**看上去是複雜的,而且我們可能需要對每乙個可能用到的函式都進行這樣的操作,這是一項重複性很高但是並沒有什麼意義的工作。

還是幸運的是,像glfw一樣,我們也能夠找到幫助我們完成上述過程的函式庫。這裡要用到的是glew,它是應用最廣也是最新的提供此功能的函式庫。

glfw是乙個用c語言開發的,自由,開源,專門為opengl繪製提供必要環境的函式庫。它提供介面幫助我們建立乙個opengl上下文,定義繪製視窗的引數並且處理使用者的輸入,這些正是我們需要的。它很容易和現有的專案進行整合。它支援windows,mac os x,和 類unix系統。glfw使用 zlib/libpng協議。

glew是 opengl extension wrangler的簡稱,它提供了我們前面講到的重複性的函式索引的功能。

原教程利用兩次來配置glfw並且讓它執行起來。確保它能夠在我們搭建的環境中幫我們建立乙個opengl上下文並且建立乙個可以用於繪製的視窗。之所以用兩次的量,是因為原教程採用了從原始碼編譯到配置的整個過程的所有步驟逐一講解的方式講述,我直接採用的是用官網上已經預編譯好的庫的方式進行的配置。下面說我的方法,如果想要從原始碼編譯、配置,請參照原文。

對於glew,原教程採用的是直接使用編譯好的配置檔案的方式來進行配置。我在下面也會說明之。

當然這種配置方法只是針對某個工程的,如果新建了工程,還是要完成以上的三步才能夠正常使用glfw。另外也有將標頭檔案、庫檔案複製到相應的visual studio 標頭檔案和庫檔案目錄下。我本人不太喜歡這種方式。

以上我們完成了在visual studio 2012開發和執行opengl所需的兩各函式庫的配置。下面我們需要檢驗一下上面的配置是否成功,這是開展後續學習的基礎。

github pages Jekyll環境搭建

通過jekyll可以搭建 簡單理解成網頁生成規則,就是通過配置能自動幫你生成靜態網頁的東西。如何配置,請看 首先要更新ruby,系統倉庫裡最新的是1.9.3,而jekyll要求 2.0 最終版本資訊 ruby v ruby 2.3.3p222 2016 11 21 revision 56859 x8...

iOS WebDriverAgent 環境搭建

webdriveragent是facebook 在去年的 seleniumconf 大會上推出了一款新的ios移動測試框架。當時的推文申明,還只支援模擬器,不過在今年4月更新的版本中,官方宣稱支援真機測試了,大家可以檢視官方github 的介紹 下面摘錄一段官方對於webdriveragent的介紹...

pytorch tensorflow環境搭建

整個環境搭建鏈結 anaconda cuda 步驟一 安裝anaconda 作用是建立虛擬環境,避免各個環境受版本不同的影響 步驟二 cuda安裝 顯示卡廠商nvidia運算平台 sudo bash cuda 9.0.176 384.81 linux run此處是很長的說明 do you accep...