首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Png图像加载不恰当。使用stbi_load() opengl

Png图像加载不恰当。使用stbi_load() opengl
EN

Stack Overflow用户
提问于 2022-01-29 12:51:26
回答 1查看 510关注 0票数 -1

所以我有个问题:我用stbi_load()加载图像,然后用glTexImage2D()创建纹理。当我加载.jpg图像时,一切正常工作,但是当我加载.png时,绘制的图像是黑色的,应该是透明的。这是图片:pictureOfWronglyDrawnPng

下面是我使用的代码:

首先,我设置了纹理参数:

代码语言:javascript
运行
复制
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

然后我加载图片:

代码语言:javascript
运行
复制
m_data = stbi_load(pathToTexture, &m_height, &m_width, &m_nrChannels, RGBA ? STBI_rgb : STBI_rgb_alpha);

最后,我创建了纹理和mipMap:

代码语言:javascript
运行
复制
        glTexImage2D(GL_TEXTURE_2D, 0, RGBA ? GL_RGB : GL_RGBA, m_height, m_width, 0, RGBA ? GL_RGB : GL_RGBA, GL_UNSIGNED_BYTE, m_data);
    glGenerateMipmap(GL_TEXTURE_2D);

RGBA是我在创建纹理类时设置的bool

这里还有我的片段着色器:

代码语言:javascript
运行
复制
#version 330 core

out vec4 OutFrag;

uniform vec3 color;
uniform sampler2D tex;

in vec2 TexPos;

void main()
{
    OutFrag = vec4(color, 1.0)  * texture(tex, TexPos);
}

有谁知道,为什么纹理绘制不正确?

EN

回答 1

Stack Overflow用户

发布于 2022-01-29 14:54:34

正如艾伦在一条评论中提到的那样,RGBA ? GL_RGB : GL_RGBA看起来并不安静。如果设置了RGBA bool,您不想启用RGBA吗?如果是这样的话,这应该是RGBA ? GL_RGBA : GL_RGB而不是RGBA ? GL_RGB : GL_RGBA

如果设置了RGBA标志,这将计算为GL_RGBA,否则将计算为GL_RGB。您当前的代码所做的恰恰相反。当然,这种反向行为可能是故意的,尽管从标志名RGBA判断似乎不太可能。

此外,您可能希望启用混合以及。

尝试添加这两行

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70905575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档