跨平台的C++ OpenGL图像加载器

8
我已经尝试了从SDL到DevIL的所有东西,但它们都因各种原因失败了。

SDL由于各种原因而崩溃,而DevIL出现了一些奇怪的问题,即使我包括IL/ilut.h并链接所有内容,并包括其他头文件,它也没有定义我需要加载图像到OpenGL纹理中的函数(关于USE_OPEN_GL未被定义的问题)。 我想知道是否有其他库可以将位图或png加载到我可以轻松转换为OpenGL的格式中,或者解决Devil的问题。

谢谢
9个回答

17

libpng和libjpeg在构建和使用方面可能会相当令人生畏,难怪有各种包装库。

如果您只想加载一些图像文件,并且不希望增加太多程序开销,可以考虑使用Sean Barrett的stb_image.c,这是一个非常简单、最小化的适用于jpg/png(以及其他一些格式)的图像加载器,而且不需要任何依赖库,只有一个C文件。它很容易使用:

http://nothings.org/stb_image.c


4

如Adam所建议的那样,我也建议使用libpng和libjpeg。您没有说明您是用C还是C++编写,但如果是C ++,那么我建议看一下这两个库的两个方便的薄包装器:pngxxjpegxx


3

LodePNG是一个高度紧凑的PNG加载器,没有任何依赖。

请分享您使用DevIL的经验-它对我和许多其他人来说都运行得很完美。为什么不再尝试解决您的构建问题呢?这应该不太难。


3
你也可以尝试使用FreeImage库。它支持加载不同类型的图像,并且在功能上类似于DevIL,可能适合你的需求。
至于你在使用DevIL时遇到的问题,你不需要构建ilu或ilut库来使DevIL正常工作。我建议你自己管理OpenGL纹理对象,包括将图像数据上传到OpenGL端。

2

我认为这应该是正确的答案。这是一个轻量级库,具有非常简单的C API,主要基于stb_image.c(这是绝对的斯巴达轻量级图像加载代码),但更加清晰。 - ds-bos-msk

0

年轻但足够优秀的SFML可能是你正在寻找的。我已经在许多项目中使用它,所有这些项目都在我的平台(Win7和Ubuntu)上运行良好。


0
你不需要使用ILUT来实现你想要的功能。你可以简单地使用ilGetData()和glTexImage2d()。

0

加载位图(.bmp)和netpbm图像(.pbm, .pgm, .pnm)非常简单,因为它们未被压缩。要加载PNG,请使用libpng。要加载JPEG,请使用libjpeg。对于其他图像类型,请使用适当的库。很有可能将“lib”加到图像名称前面会给你这样的库,例如libtiff、libtga等。

一旦您加载并解压了原始图像数据,将其加载到OpenGL纹理中只需要调用glTexImage2D()并使用正确的参数,以及一些其他的GL状态更改(例如如何进行mipmapping)。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接