看板 GameDesign 關於我們 聯絡資訊
我想要用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