我正在尝试开发一个简单的2D游戏引擎,我需要能够绘制文本,所以我决定使用着名的freetype库.我目前的目标是渲染0到255之间的每个字符,并将相应的信息存储在字形对象,字符的顶部和左侧位置,宽度和高度以及OpenGL纹理中.(将来我希望删除每个字形有1个纹理,但在开始处理之前我需要正确显示我的字符).首先,我将所有字符都弄乱,但后来我查看了这个问题并想通过我必须将位图缓冲区复制到一个具有OpenGL所需纹理大小的新缓冲区(即宽度和高度的2的幂).从那以后,每个角色看起来都很棒,所以我尝试了不同的字体大小,看看是否一切正常,猜测是什么......它不是,小字体(即<30)每个宽度较小的字符( 'l','我',';',':')出现乱码.
http://img17.imageshack.us/img17/2963/helloworld.png
所有扭曲的字符的宽度都是1,它是2,因为这是2的第一个幂,这里是渲染每个字符的代码.
bool Font::Render(int PixelSize)
{
if( FT_Set_Pixel_Sizes( mFace, 0, PixelSize ) != 0)
return false;
for(int i = 0; i < 256; ++i)
{
FT_UInt GlyphIndex;
GlyphIndex = FT_Get_Char_Index( mFace, i );
if( FT_Load_Glyph( mFace, GlyphIndex, FT_LOAD_RENDER ) != 0)
return false;
int BitmapWidth = mFace->glyph->bitmap.width;
int BitmapHeight = mFace->glyph->bitmap.rows;
int TextureWidth = NextP2(BitmapWidth);
int TextureHeight= NextP2(BitmapHeight);
printf("Glyph is %c, BW: %i, BH: %i, TW: %i, TH: %i\n", i, BitmapWidth, BitmapHeight, TextureWidth, TextureHeight);
mGlyphs[i].SetAdvance(mFace->glyph->advance.x >> …Run Code Online (Sandbox Code Playgroud)