2012-11-02 110 views
2

在学习OpenGL时,我在寻找可以评估各种图像类型的图像阅读器,如".png", ".bmp", ".tga", ".dds", ...。我的计划是提取PARAMS像heightwidthtype图像文件,并与下面样的功能设置:OpenGL通用图像阅读器和GLFW(glfwReadImage,glfwLoadTexture2D)支持各种图像格式

glTexImage2D(GL_TEXTURE_2D, 0, <color format>, <width>, <height>, 
    0, <color orientation>, <data type>, <actual data>); 

我通过CImg librarystb_image.c去了。但是,我无法得到如widhthheight,type等参数。

这似乎是<GL/glfw.h>一个很好的框架。我有一个印象是,它只是用来加载使用以下功能".tga"格式:

int glfwLoadTexture2D(const char *name, int flags); 

它支持所有格式?

另外,我在附近看到下面的函数。如果有人能够介绍,那么这将是一个奖金。

int glfwReadImage(const char *name, GLFWimage *img, int flags); 
void glfwFreeImage(GLFWimage *img); 

其中:

typedef struct { 
    int Width, Height; 
    int Format; 
    int BytesPerPixel; 
    unsigned char *Data; 
} GLFWimage; 

如果GLFW不支持所有格式,那么有没有刚刚得到上述GLFWimage像PARAMS任何库,并允许我们单独设置它通过glTexImage2D

回答

1

DevIL对于广泛的图像格式选择有相当不错的支持,但不再处于积极的开发阶段;作者太忙了。

GLI也是一个不错的选择;它只是DDS,但这不像人们想象的那么大。正在载入JPG/PNG /等。对于原型开发(以及最终用户的容易定制)而言是方便的,但是DDS文件通常是更好的长期选择,因为它们本身支持游戏和交互式应用中常用的几个特征(BCn compressed texture formats,立方环境地图,卷纹理等)。

+0

GLFW呢,这个问题中提到的函数有用吗? – iammilind

+0

你是正确的,glfwReadImage()只加载TGA文件。再一次,只支持一种图像格式不是世界末日;离线图像格式转换工具是一毛钱一打。但是如果你只支持一种格式,我仍然推荐使用TGA的DDS。 – postgoodism

2

你应该看看DevIL - 这可能正是你想要的。

+0

GLFW,这个问题中提到的函数有用吗? – iammilind

+0

@iammilind:GLFW只有TGA图像文件的代码。所以它不是非常通用的。 – datenwolf