2009-07-15 62 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)上运行良好。