【发布时间】:2014-07-17 08:58:58
【问题描述】:
在我初始化库并加载纹理后,我得到http://postimg.org/image/4tzkq4uhl。
但是当我将这一行添加到纹理代码中时:
std::vector<unsigned char> buffer(w * h, 0);
我收到http://postimg.org/image/kqycmumvt。
为什么当我添加该特定代码时会发生这种情况,为什么看起来字母被加倍了?我搜索了有关 FreeType 的示例和教程,我看到其中一些更改了缓冲区数组,但我不太明白,所以如果你能向我解释一下,我可能会处理得更好。
纹理加载:
Texture::Texture(FT_GlyphSlot slot) {
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
int w = slot->bitmap.width;
int h = slot->bitmap.rows;
// When I remove this line, the black rectangle below the letter reappears.
std::vector<unsigned char> buffer(w * h, 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, slot->bitmap.width, slot->bitmap.rows, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, slot->bitmap.buffer);
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
}
片段着色器:
#version 330
in vec2 uv;
in vec4 tColor;
uniform sampler2D tex;
out vec4 color;
void main () {
color = vec4(tColor.rgb, texture(tex, uv).a);
}
【问题讨论】:
-
您将纹理环绕设置为重复,您在问为什么纹理重复?
-
@BartekBanachewicz 即使我更改 GL_REPEAT 也会这样做,如果它应该重复,那么为什么它会这样重复?
-
等等...这行代码与您对纹理所做的操作完全无关。你在做别的事情。
-
@BartekBanachewicz 这就是它如此奇怪的原因。我只改变那条线,纹理也会改变。
标签: c++ opengl textures freetype