Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PNG纹理加载到OpenGL_Opengl_Png_32 Bit_Textures - Fatal编程技术网

将PNG纹理加载到OpenGL

将PNG纹理加载到OpenGL,opengl,png,32-bit,textures,Opengl,Png,32 Bit,Textures,我正在制作一个游戏,我所有的图形都使用洋红色作为透明/神奇的颜色。 它们都是32位的,洋红只是为了方便。 无论如何,如果有人能告诉我应该使用什么库来加载我的图像,我将不胜感激(我需要以GL_RGBA格式加载它们,包括内部和特定纹理)。可以加载几乎所有文件格式,并且可以直接创建OpenGL纹理。这是最简单的方法 您还应该使用支持alpha通道的文件格式(PNG、TGA等)。在32位图像中使用“神奇颜色”真是过时了 如果只需要PNG支持,请使用libpng。DevIL应该很简单,但它有点臃肿(不仅仅

我正在制作一个游戏,我所有的图形都使用洋红色作为透明/神奇的颜色。 它们都是32位的,洋红只是为了方便。 无论如何,如果有人能告诉我应该使用什么库来加载我的图像,我将不胜感激(我需要以GL_RGBA格式加载它们,包括内部和特定纹理)。

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


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

如果只需要PNG支持,请使用libpng。DevIL应该很简单,但它有点臃肿(不仅仅是加载图像),并且在内部实际调用OpenGL函数,这可能会弄乱您自己的OpenGL逻辑


我个人更喜欢SDL_图像,因为我在我的项目中使用SDL。虽然不是很明显,SDL_BlitSurface()函数可以将IMG_Load()返回的任何内容转换为必要的像素格式。

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

  • 直接使用libpng。这可能会对代码大小产生最小的影响,如果这很重要的话,因为您不会对未使用的其他格式产生膨胀,也不会得到DLL,等等
  • 使用操作系统纹理加载。如果您更喜欢使用操作系统功能而不是外部库,那么这是减少依赖性的一个好方法。Windows XP及更高版本中的GDI+内置了一些纹理加载格式,如PNG和JPEG,我不确定,但其他OSs可能也有类似的功能。将GDI+连接到OpenGL非常简单,然后操作系统将负责您的纹理加载
      这里有一个将png加载到openGL的非常简单的单文件示例:


      另一个选项是OpenCV


      它不仅可以加载纹理,还可以使用它的其他功能。

      将DevIL和OpenGL一起用于图像加载非常简单,几乎所有的魔法数字都是相同的(按设计)。我有一些代码(不保证这是最好的;-)(loadShaderTexture函数):请参阅GLTexture::LoadFromFile()从这里的第510行开始:它可能比你需要的要复杂一点-它使用预乘纹理,并且有代码将纹理复制到两个具有透明水槽的曲面的幂次方。既然有库可以为你加载图像,为什么还要为如何加载图像而烦恼呢。DevIL只能用于加载图像(没有OpenGL调用)或者直接将图像加载到OpenGL纹理中(这必然会调用OpenGL函数)。OpenCV是否提供了以可输入到OpenGL纹理的格式提供图像数据的函数?