gpt4 book ai didi

c++ - 为什么在 SDL 和 OpenGL 中使用 IMG_Load 加载到纹理的图像看起来偏蓝?

转载 作者:太空狗 更新时间:2023-10-29 21:47:10 26 4
gpt4 key购买 nike

我正在加载 PNG 纹理:

void Sprite::setTexture(string f) {
SDL_Surface *image = IMG_Load(f.c_str());
if (image == NULL) {
this->texture = -1;
return;
}
SDL_DisplayFormatAlpha(image);
unsigned object(0);
glGenTextures(1, &object);
glBindTexture(GL_TEXTURE_2D, object);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels);
SDL_FreeSurface(image);
this->texture = object;
}

唯一的问题是,而不是像这样(在 Photoshop 中看到):

Original box

它是这样显示的(在应用程序中看到):

怎么了?我试过用 GL_RGBA 玩一点,并尝试将其反转为 GL_BGRA 或将其更改为 GL_RGBA8、GL_RGBA16...但没有任何改变(实际上 GL_BGRA 没有显示任何内容)。我需要 alpha channel ,即使在这个小 PNG 中,边界的半径为 4px,因此图像角度是透明的。

我做错了什么? App box

最佳答案

看起来您的 channel 肯定是颠倒的。从这里很难看出您的 alpha 是否正常工作,但有些纹理是 ARGB,也许您应该试试看!

实际上,为了验证您的数据,您应该检查您的

SDL_Surface *image

看看什么是image->format->Rmask Gmask BmaskAmask,这样你就可以确定你的表面有什么格式。

关于c++ - 为什么在 SDL 和 OpenGL 中使用 IMG_Load 加载到纹理的图像看起来偏蓝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666196/

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