我正在使用OpenGL 3.3上下文,而GLFW3则用于窗口化。我也在用C. 我正在使用STB_truetype将字符栅格化为动态分配的无符号字符。
我从STB_truetype获取数据:
unsigned char ttf_buffer[1<<25];
stbtt_fontinfo font;
fread(ttf_buffer, 1, 1<<25, fopen("Script Thing.ttf", "rb"));
stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0));
int w,h, xoff, yoff;
int c = 'C', s = 60;
unsigned char *bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, &xoff,&yoff);
为了确保我拥有正确的数据,我将其打印到控制台:
for(int i = 0; i < h; i++)
{
for(int x = 0; x < w; x++)
{
printf("%c", bitmap[x+i*w]>>5 ? '1' : ' ');
}
printf("\n");
}
然后我创建2D OpenGL纹理:
glGenTextures(1,&Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RED, w,h,
0, GL_RED, GL_UNSIGNED_BYTE, NewTemp );
我用'A'字符测试了它,我得到了:
11111
1111111
111111111
1111111111
11111111111
111111 11111
111111 11111
111111 1111
111111 1111
11111 1111
111111 1111
111111111111 11111
1111111111111111111111
111111111111111111111
111111111111111111111
111111111 1111111111
11111 111111
1111 11111111
11111 11111111
1111 11111111
1111 111 111
1111 111 1111
1111 1111 111
111 1111 111
111 111 111
1111 111 1111
1111 11111111
1111 1111111
1 111
我渲染纹理OpenGL上下文:
你可以看到它是正确的。
然而,当我尝试C字符时:
11
1111111111
1111111111111
111111111111111
11111111111111111
1111111 111111
111111 11111
111111 1111
11111 1111
11111 11
1111
11111
1111
1111
1111
1111
1111
1111
1111
111
111
1111
1111
111
1111
1111 11
111111 11111
11111111111111111
111111111111
11
与其他字符相同,例如'X':
1111 1111
11111 11111
11111 111111
111111 111111
11111 1111111
11111 1111111
11111 1111111
1111 1111111
11111111111
1111111111
11111111
1111111
111111
111111
1111111
11111111
111111111
11111 1111
11111 1111
11111 1111
1111 1111
1111 1111
1111 111
111 1111
111 111
111 1111
11 11111
1111 11111
11 1
知道我可能做错了什么吗? 感谢。
编辑: 通过添加glPixelStorei(GL_UNPACK_ALIGNMENT,1)修复它; 就在glTexImage2D之前。 再次感谢 doron