所以我有个问题:我用stbi_load()
加载图像,然后用glTexImage2D()
创建纹理。当我加载.jpg
图像时,一切正常工作,但是当我加载.png
时,绘制的图像是黑色的,应该是透明的。这是图片:pictureOfWronglyDrawnPng
下面是我使用的代码:
首先,我设置了纹理参数:
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);
然后我加载图片:
m_data = stbi_load(pathToTexture, &m_height, &m_width, &m_nrChannels, RGBA ? STBI_rgb : STBI_rgb_alpha);
最后,我创建了纹理和mipMap:
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
这里还有我的片段着色器:
#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);
}
有谁知道,为什么纹理绘制不正确?
发布于 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);
https://stackoverflow.com/questions/70905575
复制相似问题