使用FreeImage加载纹理
生活随笔
收集整理的這篇文章主要介紹了
使用FreeImage加载纹理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DirectX9中提供了函數D3DXCreateTexureFromFile函數,但是對用戶是透明的,不知道其實現,并且在實際當中一般都是用多線程來進行資源的處理,就像自己實現一下 考慮了兩種方法來適用后臺加載 1 使用Device CreateTexture后,進行后臺加載 2 將紋理文件讀進內存后,使用D3DXCreateTextureFromFileInMemory進行加載 這里先使用第一種方法 FreeImage是一個有名的開源圖像庫,支持的圖像類型很多,并且有良好的說明文檔,Ogre中也使用了該圖像庫 用設備創建紋理之后,就可以從后臺進行加載了,暫時只支持level0的讀取 bool LoadImage(const char* filename) { FREE_IMAGE_FORMAT fif=FIF_UNKNOWN; //圖像指針 FIBITMAP* dib(0); //圖像像素數據指針 BYTE* bits(0); unsigned int width(0),height(0); //獲取圖像類型 fif=FreeImage_GetFileType(filename,0); if(fif==FIF_UNKNOWN) fif=FreeImage_GetFIFFromFilename(filename); if(fif==FIF_UNKNOWN) return false; if(FreeImage_FIFSupportsReading(fif)) dib=FreeImage_Load(fif,filename); if(!dib) return false; bits=FreeImage_GetBits(dib); width=FreeImage_GetWidth(dib); height=FreeImage_GetHeight(dib); 位圖深度 //int depth=FreeImage_GetBPP(dib); 對應D3D中的pitch //int pitch=FreeImage_GetLine(dib); g_pDevice->CreateTexture(width,height,0,D3DUSAGE_AUTOGENMIPMAP,D3DFMT_X8R8G8B8,D3DPOOL_MANAGED,&g_texture,0); D3DLOCKED_RECT rect; //獲取Level0的整個矩形以便填充 g_texture->LockRect(0,&rect,0,0); //rect.pBits是void*類型的,這里進行轉化,方便尋址 BYTE* p=(BYTE*)rect.pBits; //為什么從height-1開始? //因為D3D的紋理坐標左上角是(0,0),一般圖像左下角是(0,0) //所以如果直接按像素對應的話,圖像就會上下顛倒 for(int i=height-1;i>=0;--i) { //獲取該行數據 BYTE* bitsi=FreeImage_GetScanLine(dib,i); for(int j=0;jUnlockRect(0); //用完了釋放 FreeImage_Unload(dib); return true; }
轉載于:https://www.cnblogs.com/mhpy/archive/2012/03/16/2400425.html
總結
以上是生活随笔為你收集整理的使用FreeImage加载纹理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone开发-输出口和操作(转)
- 下一篇: 手把手教你学习ROR-6.Rooter的