在OpenGL纹理中使用PNG图像

时间:2016-07-28 17:43:12

标签: c opengl png textures

我使用的是OpenGL 1.4,我想在OpenGL纹理中使用PNG图像。这是我用来初始化纹理的代码(使用SDL 1.2和SDL图像):

GLuint texture;
SDL_Surface *surface;
surface = IMG_Load("image.png");
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,surface->w, surface->h, 0, GL_RGB, GL_UNSIGNED_BYTE, surface->pixels);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
SDL_FreeSurface(surface);

image.png是一个128x128大小的PNG图像,位于与可执行文件相同的文件夹中。这是我得到的截图:

problem

要比较,这是原始图像:

originalimage

我尝试使用位图图像完全相同的代码,它工作得很好。

为什么这样做?做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

这是问题所在。

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,surface->w,surface->h,0,GL_RGB,GL_UNSIGNED_BYTE,surface->pixels);

您的format参数不正确。

应该是

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,surface->w,surface->h,0,GL_RGBA,GL_UNSIGNED_BYTE,surface->pixels);

GL_RGBA将代表每个通道8位,这是我认为您在解决方案中需要的。

有关详细信息,请参阅https://www.opengl.org/sdk/docs/man/html/glTexImage2D.xhtml