2009-07-15 63 views
8

我已經嘗試了從SDL到DevIL的所有內容,並且由於各種原因它們都失敗了。

SDL段錯誤由於各種原因,和DevIL有一些奇怪的問題,甚至在我包括IL/ilut.h和鏈接一切,幷包括其他頭,它沒有定義我需要加載圖像到功能opengl紋理(關於USE_OPEN_GL的東西沒有被定義)。我要求任何其他lib在那裏加載位圖或PNG的格式,我可以很容易地轉換爲opengl,或魔鬼問題的解決方案。

感謝用於OpenGL的C++跨平臺圖像加載器

回答

0

你不需要ILUT做你想做什麼。您可以簡單地使用ilGetData()和glTexImage2d()

0

加載位圖(.bmp)和netpbm圖像(.pbm,pgm,.pnm)非常簡單,因爲它們存儲未壓縮的圖像。要加載PNG,請使用libpng。要加載JPEG,請使用libjpeg。對於其他圖像類型,請使用適當的庫。把'lib'打到圖像名稱的開始部分會給你一個這樣的庫,例如, libtiga,libtga等。

加載並解壓縮原始圖像數據後,將其加載到OpenGL紋理中只需調用glTexImage2D()以及正確的參數以及一些其他GL狀態更改(例如如何做mipmapping)。

3

LodePNG是一個高度緊湊的PNG裝載機沒有依賴關係。

評論你與DevIL的經驗 - 它對我和其他人來說是完美無瑕的。爲什麼不嘗試再次解決構建問題? - 不應該太難)

2

土壤是我以前用過的一個體面的輕量級的。它實際上專門用於加載OpenGL紋理。

http://lonesock.net/soil.html

+0

我認爲這應該是正確的答案。 這是一個輕量級的庫,它具有令人難以置信的簡單C API,它主要基於stb_image.c(這是絕對的斯巴達輕量級圖像加載代碼),但它更乾淨。 – bigD 2015-06-09 04:38:05

4

正如亞當指出,我也建議使用的libpng和libjpeg的。如果你用C或C++寫的你是不是指定的,但如果在C++,那麼我建議看看在這兩個庫中的兩個方便的瘦包裝:pngxxjpegxx

3

您也可以嘗試FreeImage library。它支持加載不同的圖像類型,功能類似於DevIL,可以爲你開箱即用。

關於你的問題與DevIL,你不必建立ilu或ilut庫來使Devil功能。我建議你自己管理OpenGL紋理對象,包括上傳圖像數據到OpenGL端。

15

libpng和libjpeg都可以用來構建&使用 - 難怪有兩種包裝庫都有。

Sean Barrett的stb_image是一個非常簡單,最小化的無廢話加載程序,用於jpg/png(以及其他一些東西),而不依賴於單個C文件。C,如果你只是想加載一些圖像文件,它增加了絕對最小的開銷到您的程序,是直接使用:

http://nothings.org/stb_image.c

+3

感謝這個鏈接,這是偉大的 – joeld 2010-08-12 22:32:02

0

年輕,但還沒有足夠大的SFML可能是你正在尋找的人。我已經將它用於許多項目,並且它們在我所有的平臺(Win7和Ubuntu)上運行良好。