方便查詢 GLSL內置變量詳解 - 台部落 (twblogs.net)
2021年7月17日 星期六
2021年3月18日 星期四
把 GLAD 編譯成 dll
因 LearnOpenGL 採用 GLAD 來抓取 OpenGL API,所以也研究了一下,GLAD 的好處是可以明確指定你開發程式所要支援的 OpenGL 版本,在初始化時可以檢查顯示卡是否能支援。
GLAD 可到 https://glad.dav1d.de 下載,但拿到的會是原始檔,因 GLAD 只是把 OpenGL API 的函數位址抓出來存放到程式可觸及的記憶體空間中,若採用把 glad.c 和你的專案一起編譯,則主程式(exe) 和各用到 OpenGL API 的 dll 都得把 glad.c 一起編譯,並各別呼叫 gladLoadGL() 做初始化,既浪費空問(因得各別保存 OpenGL API 的函數位址)又沒人性(因得各別 gladLoadGL() 初始化)。
我想最完美的做法是把 GLAD 編譯成 dll,這樣 GLAD 的 OpenGL API 函數位址就放在這個 dll 獨立空間中,而 gladLoadGL() 只要由主程式呼叫一次就可以了。
2016年9月26日 星期一
2014年6月11日 星期三
測試 MipmapCreate()
這次寫個程式來測試 Mipmap 建立函數 一文中的 MipmapCreate(),看看效果如何,而圖檔的讀取和儲存,採用 DevIL 這個知名的程式庫。
先看看 MipmapCreate() 建立的效果怎樣,此圖是將 Mipmap 各層的圖片疊加在一起:
看起來效果還不錯,這測試程式使用 vs2008 編寫,源碼下載:
https://www.dropbox.com/s/q3nlvb7qwkr4wg8/MipmapCreateTest.rar
http://pan.baidu.com/s/1i3BUiJ7
要編譯請先看一下內附的 ReadMe.txt 有關 DevIL 的說明。
以下列出程式碼:
先看看 MipmapCreate() 建立的效果怎樣,此圖是將 Mipmap 各層的圖片疊加在一起:
看起來效果還不錯,這測試程式使用 vs2008 編寫,源碼下載:
https://www.dropbox.com/s/q3nlvb7qwkr4wg8/MipmapCreateTest.rar
http://pan.baidu.com/s/1i3BUiJ7
要編譯請先看一下內附的 ReadMe.txt 有關 DevIL 的說明。
以下列出程式碼:
2014年6月9日 星期一
Mipmap 建立函數
可以用不限長寬的圖片來產生 Mipmap 所須各圖層的圖片。
MipmapCreate() 的第一個參數 Mipmap 用於回傳 Mipmap 所有圖層的陣列,格式為
{第 0 層圖片的指標, 第 1 層圖片的指標, ... 第 LevelNum-1 層圖片的指標}
第二個參數 WidthHeight 用於回傳各層圖片的長寬,格式為
{
第 0 層圖片的 Width, 第 0 層圖片的 Height,
...
第 LevelNum-1 層圖片的 Width, 第 LevelNum-1 層圖片的 Height
}
第三個參數 LevelNum 用於回傳建立的層數
MipmapCreate() 的第一個參數 Mipmap 用於回傳 Mipmap 所有圖層的陣列,格式為
{第 0 層圖片的指標, 第 1 層圖片的指標, ... 第 LevelNum-1 層圖片的指標}
第二個參數 WidthHeight 用於回傳各層圖片的長寬,格式為
{
第 0 層圖片的 Width, 第 0 層圖片的 Height,
...
第 LevelNum-1 層圖片的 Width, 第 LevelNum-1 層圖片的 Height
}
第三個參數 LevelNum 用於回傳建立的層數
2013年12月14日 星期六
OpenGL 呼叫擴增函數出現 Memory violation
一般 if(glewInit() != GLEW_NO_ERROR) 正確後就可以使用擴增函數(比如 glGenBuffers()),但若是將 glew.c 加入專案中,或是把 glew.c 編譯成靜態程式庫來使用,就得須把用到 OpenGL 的每個模組(exe 和 dll)都要呼叫一次 glewInit(),還有要記得在主程式(exe)已先做好 opengl context,才能讓 glewInit() 成功執行。
glewInit() 主要任務在從驅動程式中把擴增函數的位址抽出來,放好到函數指標供應用程式使用。
另外若是直接使用 glew.c 或靜態程式庫,還得在專案中加上前置識別字 GLEW_STATIC。
glewInit() 主要任務在從驅動程式中把擴增函數的位址抽出來,放好到函數指標供應用程式使用。
另外若是直接使用 glew.c 或靜態程式庫,還得在專案中加上前置識別字 GLEW_STATIC。
2013年5月16日 星期四
關於 OpenGL 和 D3D 的 major matrix
在許久以來的傳說...
OpenGL 採用如下的的矩陣運算,把它的矩陣稱作 colum matrices
而 D3D 採用如下的的矩陣運算,把它的矩陣稱作 row matrices
但那是一個錯誤,那只能說是 "數學" 上的格式,實際上在程式記億體上的儲存方式如下...
OpenGL 採用如下的的矩陣運算,把它的矩陣稱作 colum matrices
m11 m12 m13 m14 x m21 m22 m23 m24 y m31 m32 m33 m34 z m41 m42 m43 m44 1
而 D3D 採用如下的的矩陣運算,把它的矩陣稱作 row matrices
m11 m12 m13 m14 m21 m22 m23 m24 x y z 1 m31 m32 m33 m34 m41 m42 m43 m44
但那是一個錯誤,那只能說是 "數學" 上的格式,實際上在程式記億體上的儲存方式如下...
2012年12月5日 星期三
NeHe 的 OpenGL 教程
原文的文章在 http://nehe.gamedev.net/ ,右邊選單的 Legacy Tutorials
繁體翻譯版:
http://vision.csie.ncku.edu.tw/~ichenyeh/public/nehe/
簡體翻譯版;
http://www.owlei.com/DancingWind/
繁體翻譯版:
http://vision.csie.ncku.edu.tw/~ichenyeh/public/nehe/
簡體翻譯版;
http://www.owlei.com/DancingWind/
訂閱:
文章 (Atom)