gpt4 book ai didi

c++ - sdl表面到opengl纹理

转载 作者:行者123 更新时间:2023-11-30 04:26:49 25 4
gpt4 key购买 nike

如何使用 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);
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_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, tex);

        //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);

问题是它只适用于 .bmp 文件,而且它们会变成蓝色,这是怎么回事?此外,当我尝试加载 .png 时,它显示得非常奇怪。

最佳答案

错误的颜色可能是由错误的 channel 顺序引起的。我用于加载 .bmp 的代码使用 GL_BGR 而不是 GL_RGB,因此我认为这将解决您的 bmp 问题。

您的 png 图像的问题更可能是由于 png 是每像素 32 位引起的。对您来说最好的解决方案可能是检查 SDL 表面的格式字段以确定要传递给 glTexImage2D 的适当标志/值。

关于c++ - sdl表面到opengl纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11281787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com