1. 程式人生 > >【OpenGL】SOIL(簡易的opengl影象庫)

【OpenGL】SOIL(簡易的opengl影象庫)

一、簡介

SOIL是簡易OpenGL影象庫(Simple OpenGL Image Library)的縮寫,它支援大多數流行的影象格式,並且使用簡單。可從官網下載其原始碼:http://www.lonesock.net/soil.html

二、配置

從他們的主頁可以下載得到一個壓縮檔案,包括lib資料夾projects資料夾和src資料夾。有三種方案配置SOIL庫。

  1. lib資料夾裡是一個libSOIL.a檔案,這是一個靜態庫檔案(static library file),src資料夾裡是一個SOIL.h檔案,我們只需要把它們放入工程資料夾中,然後在原始檔中包含它們就可以了。

什麼是靜態庫檔案呢,首先來說說庫,所謂庫,本質上就是一些可執行程式碼的二進位制形式,可以被作業系統載入記憶體執行。庫又可以進一步分為靜態連結庫和動態連結庫(dll),靜態庫會在程式編譯時被連結到目的碼中,而動態庫在程式執行的過程中才被載入。

      2. 如果libSOIL.a用不了,你可以自己使用projects資料夾裡帶的解決方案生成庫檔案,最好是選擇VC8裡的解決方案(VC9似乎有問題)。開啟工程檔案,回到VC8資料夾,你會發現多出了一些資料夾,在debug資料夾裡你可以看到我們需要的SOIL.lib檔案,之後的操作和1一樣。

       3. 第二步也可以在projects資料夾中開啟makefile資料夾,新建“obj”資料夾,開啟terminal --$ cmake .. --$ make -j,就可以在lib資料夾中更新libSOIL.a檔案,並在obj中生成一系列中間檔案.o,執行--$ install 將當前檔案中的libSOIL.a檔案複製到系統目錄下,詳見makefile.txt。

三、使用

#include <SOIL.h>

...

glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);

//新建兩個int值用於儲存width\height
int width, height;
/*函式首先需要輸入圖片檔案的路徑。然後需要兩個int指標作為第二個和第三個引數,SOIL會分別返回圖片的寬
度和高度到其中。後面我們在生成紋理的時候會用影象的寬度和高度。第四個引數指定圖片的通道(Channel)數
量,但是這裡我們只需留為0。最後一個引數告訴SOIL如何來載入圖片:我們只關注圖片的RGB值。結果會儲存為
一個很大的char/byte陣列。*/
unsigned char* image = SOIL_load_image(path.c_str(), &width, &height, 0, SOIL_LOAD_RGBA);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, image);
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
//生成了紋理和相應的多級漸遠紋理後,釋放影象的記憶體並解綁紋理物件
SOIL_free_image_data(image);
glBindTexture(GL_TEXTURE_2D, 0);