将PNG纹理加载到OpenGL

5

我正在制作一款游戏,所有的图形都使用品红色作为透明/神奇颜色。它们都是32位的,品红色只是为了方便起见。无论如何,我希望有人能够建议我应该使用哪个库来加载我的图像(我需要以GL_RGBA格式加载它们,包括内部和纹理特定的加载)。

5个回答

6
如果只需要支持PNG格式,使用libpng。DevIL被认为很容易使用,但它有点臃肿(不仅仅是加载图像),并且在内部实际上调用OpenGL函数,这可能会干扰您自己的OpenGL逻辑。
我个人更喜欢SDL_image,因为我在我的项目中已经使用了SDL。虽然不是立即显而易见的,但SDL_BlitSurface()函数可以将IMG_Load()返回的任何内容转换为必要的像素格式。

1
DevIL可以仅用于加载图像(此时没有OpenGL调用),也可以直接将图像加载到OpenGL纹理中(这必然会调用OpenGL函数)。 - Danvil

5

DevIL可以加载几乎所有文件格式,并直接创建OpenGL纹理。这是最简单的方法。

您还应该使用支持alpha通道的文件格式(PNG、TGA等)。在32位图像中使用“魔法颜色”已经过时了!


使用DevIL和OpenGL一起进行图像加载非常容易,几乎所有的魔数都是相同的(按设计)。我有一些代码(不保证它是最好的;-))在这里执行此操作(loadShaderTexture函数):http://nwshader.svn.sourceforge.net/viewvc/nwshader/nwshader/init.cpp?revision=18&view=markup - ssube

1

除了其他提到的SDL和DevIL,还有两个选项需要考虑:

  • 直接使用libpng。如果代码大小很重要,这可能对代码大小的影响最小,因为您不会得到其他未使用格式的膨胀,也没有DLL等。
  • 使用操作系统纹理加载。如果您更喜欢使用操作系统功能而不是外部库,则可以使用此方法来减少依赖关系。 Windows XP及更高版本中的GDI+具有内置的纹理加载功能,例如PNG和JPEG等几种格式,我不确定其他操作系统是否具有类似的功能。将GDI+连接到OpenGL非常简单,然后操作系统将负责纹理加载!

请查看GLTexture :: LoadFromFile()从这里的第510行:http://construct2.svn.sourceforge.net/viewvc/construct2/source/common/cr/glrenderer/glrenderer_windows.cpp?revision=102&view=markup 它可能比您需要的要复杂一些 - 它使用预乘纹理,并具有将纹理复制到具有透明间距的二次幂表面的代码。 - AshleysBrain
为什么要费心去加载图片,当有许多库可以为你完成这项工作。 - Danvil

1

0

另一个选择是OpenCV。

它不仅可以加载纹理,还有很多其他功能,很可能你也会发现它的其他特性很有用。


OpenCV是否提供函数以准备好喂入OpenGL纹理的格式提供图像数据? - thecoshman

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