Don*_*uck 1 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);
Run Code Online (Sandbox Code Playgroud)
image.png 是一个 128x128 大小的 PNG 图像,与可执行文件位于同一文件夹中。这是我得到的截图:
为了比较,这是原始图像:
我用位图图像尝试了完全相同的代码,它工作得很好。
它为什么这样做?正确的做法是什么?
这是问题所在。
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,surface->w,surface->h,0,GL_RGB,GL_UNSIGNED_BYTE,surface->pixels);
Run Code Online (Sandbox Code Playgroud)
你的format参数不正确。它应该是:
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,surface->w,surface->h,0,GL_RGBA,GL_UNSIGNED_BYTE,surface->pixels);
Run Code Online (Sandbox Code Playgroud)
GL_RGBA(不代表GL_RGB每个通道 8 位,这是我认为您在解决方案中需要的。)
请参阅https://www.opengl.org/sdk/docs/man/html/glTexImage2D.xhtml了解更多信息。