irrlicht中的紋理管理還是比較簡單的,功能也比較少,主要是面向應用的,現在來看一下irrlicht是如何管理紋理的。
hresult d3dxcreatetexturefromfile(
lpdirect3ddevice9 pdevice,
lpctstr psrcfile,
lpdirect3dtexture9 * pptexture
);hresult d3dxcreatetexturefromfileex(...);
這樣很方便,一步到位就能載入和建立紋理lpdirecet3dtexture9.
但是我們看到在irrlicht中不是這麼做的,它將紋理和等資源檔案是分開的,不是簡單的利用d3d api來建立。
irrlicht中dx紋理類是 class cd3d9texture : public itexture ,這個類只要維護了lpdirecet3dtexture9這個指標,這樣
乙個cd3d9texture 就代表著乙個紋理資源,它以紋理對應的檔名來標記唯一性的。
再說一下,所有的irrlicht所支援的資源比如jpg,bmp,....都是在cimage類中維護的,cimage中有當前的資料,當然了
每個不同型別的都有各自的loader,比如jpg的載入由class cimageloaderjpg : public iimageloader來完成的,的寫入操作
就是writer來完成 class cimagewriterjpg : public iimagewriter完成, 其中讀取和寫入都是通過cimage類完成。
有了的資料cimage,我們就能很輕鬆的初始化cd3d9texture了,通過鎖的操作來複製資料。
最後來看一下,紋理資源的管理,之前說了irrlicht中紋理的管理是很簡單的,主要管理是在 cnullvideodriver 中完成的,就是維護了乙個
itexture* 的vector,當通過gettexture(const char* name)來得到紋理時,檢視name的紋理是否在vector,在就返回,不在就載入name的並建立
cd3dtexture並插入vector中。還是很基本的,對於大型的遊戲包含很多的資料的話這個管理是不行的,稍後看一下ogre對紋理是何如管理的,嘎嘎!!!
不過對於小型的遊戲,這個足夠了,簡單效率就高!就寫到這吧,很少寫東東,真難,以後逼著自己學習寫東西了,加油~
CUDA 紋理的使用
紋理繫結有兩種,乙個是繫結到線性記憶體就是用cudamalloc cudamemcpy 開闢的記憶體空間,另一種是繫結到cudamallocarray,cudamemcpytoarray開闢到的二維陣列或者三維陣列。先說比較簡單的就是繫結到cudamalloc開闢到的記憶體空間。首先是紋理宣告 關於...
渲染世界的OPENGL 16 紋理高階 紋理陣列
著色器可以一次性訪問幾個紋理物件,我們可以進一步使用稱為紋理陣列的特性。在紋理陣列上,我們可以將整個陣列的紋理影象繫結到乙個紋理物件上,然後在著色器當中對他們進行檢索,這樣就大大增加著色器可用紋理資料的數量。1 載入2d紋理陣列 紋理陣列新增了兩個新的紋理物件作為大多數紋理管理函式的有效引數 gl ...
對法線紋理和置換紋理的一點改進
displacement 設想深度圖在三角形所在切線空間內。對於點法線不垂直於三角形所在面的情況,比如三角形三個頂點的法線不同,或是視線穿過了當前三角形,而下乙個三角形的法線方向與這乙個三角形的法線方向不同的情況,這個設想就是不成立的。displacement的視線可能穿過texture,即u v超...