C++ sdl曲面到opengl纹理
如何使用SDL将.png图像转换为OpenGL曲面?我现在所拥有的:C++ sdl曲面到opengl纹理,c++,opengl,load,sdl,textures,C++,Opengl,Load,Sdl,Textures,如何使用SDL将.png图像转换为OpenGL曲面?我现在所拥有的: typedef GLuint texture; texture load_texture(std::string fname){ SDL_Surface *tex_surf = IMG_Load(fname.c_str()); if(!tex_surf){ return 0; } texture ret; glGenTextures(1, &ret);
typedef GLuint texture;
texture load_texture(std::string fname){
SDL_Surface *tex_surf = IMG_Load(fname.c_str());
if(!tex_surf){
return 0;
}
texture ret;
glGenTextures(1, &ret);
glBindTexture(GL_TEXTURE_2D, ret);
glTexImage2D(GL_TEXTURE_2D, 0, 3, tex_surf->w, tex_surf->h, 0, GL_RGB, GL_UNSIGNED_BYTE, tex_surf->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
SDL_FreeSurface(tex_surf);
return ret;
}
我的代码用来画这个东西:
glEnable(GL_纹理_2D);
glBindTexture(GL_TEXTURE_2D,tex)
问题是,它只适用于.bmp文件,并且它们会变成蓝色,那么有什么不对呢?
此外,当我尝试加载.png时,它显示得非常奇怪。错误的颜色可能是由于频道顺序错误造成的。我手头的加载代码。bmp使用GL_BGR而不是GL_RGB,因此我认为这将解决您使用bmp的问题
png图像的问题很可能是由每像素32位的png引起的。对于您来说,最好的解决方案可能是检查SDL曲面的format字段,以确定要传递给glTexImage2D的适当标志/值。好的,BGR可以工作,但我不知道如何做第二件事。我从互联网上得到了上面的代码…@dirkwillem你的PNG图片可能包含alpha频道信息。尝试使用
GL\u RGBA
。
//Use blurry texture mapping (replace GL_LINEAR with GL_NEAREST for blocky)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glColor4f( 1.0, 1.0, 1.0, 1.0 ); //Don't use special coloring
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(128.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(128.0f, 128.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(0.0f, 128.0f, 0.0f);
glEnd();
glDisable(GL_TEXTURE_2D);