作者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
→ azureblaze:buffer每行的大小應該是bitmap.pitch 不知是不是這個 01/12 23:05
→ azureblaze:另外每個字的對齊點是bitmap_left和bitmap_top 01/12 23:06
→ newJoey:完全不是,pitch的大小跟width一樣 01/13 09:18
→ newJoey:bitmap沒有left,bitmap_glyph有,不過也不準。 01/13 09:20
推 Bencrie:不然就找 FTGL 或 pangocairo 來包吧 01/13 09:26