我使用的是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图像,位于与可执行文件相同的文件夹中。这是我得到的截图:
要比较,这是原始图像:
我尝试使用位图图像完全相同的代码,它工作得很好。
为什么这样做?做的正确方法是什么?
答案 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。