作者newJoey (newJoey)
看板GameDesign
标题[程式] Freetype问题
时间Sun Jan 12 22:31:12 2014
我想要用Freetype2.3.5在Opengl上显示中文字
填入材质时出现问题
我用Freetype抓出来的文字图档(FT_Bitmap)
直接用抓取bitmap.width与bitmap.rows当做bitmap大小
填入记忆体中
结果中文字左边会有一大片是"空白"
这是什麽原因?
我填入记忆体的方式有错误吗?
以下是我写的内容:
if( FT_Load_Char(m_FT_Face, ch, FT_LOAD_NO_BITMAP )) //读成向量字
return 0;
FT_Glyph glyph;
if(FT_Get_Glyph( m_FT_Face->glyph, &glyph ))
return 0;
//取得Bitmap资料
if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) //只是确保转型成功,若型态对的话不会做任何动作
FT_Glyph_To_Bitmap( &glyph, ft_render_mode_normal, 0, 1 );
FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph;
FT_Bitmap& bitmap=bitmap_glyph->bitmap;
int width = bitmap.width;
int height = bitmap.rows;
//填入材质
glGenTextures(1,&charTex.m_texID);
glBindTexture(GL_TEXTURE_2D,charTex.m_texID);
char* pBuf = new char[width * height * 4];
int k=0;
for( j=0; j < height ; j++)
{
for( i=0; i < width; i++)
{
unsigned char _vl=0;
_vl = bitmap.buffer[i + (bitmap.width)*j ];
pBuf[(k) ] = _vl ;
pBuf[(k)+1] = _vl ;
pBuf[(k)+2] = _vl ;
pBuf[(k)+3] = 0xff;
k+=4;
}
}
//设定材质
glTexImage2D( GL_TEXTURE_2D,0,GL_RGBA,width, height,0,GL_RGBA,GL_UNSIGNED_BYTE,pBuf);
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
delete[]pBuf;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.192.167.209
1F:→ azureblaze:buffer每行的大小应该是bitmap.pitch 不知是不是这个 01/12 23:05
2F:→ azureblaze:另外每个字的对齐点是bitmap_left和bitmap_top 01/12 23:06
3F:→ newJoey:完全不是,pitch的大小跟width一样 01/13 09:18
4F:→ newJoey:bitmap没有left,bitmap_glyph有,不过也不准。 01/13 09:20
5F:推 Bencrie:不然就找 FTGL 或 pangocairo 来包吧 01/13 09:26