[程式] Freetype問題

看板GameDesign作者 (newJoey)時間10年前 (2014/01/12 22:31), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
我想要用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

01/12 23:05, , 1F
buffer每行的大小應該是bitmap.pitch 不知是不是這個
01/12 23:05, 1F

01/12 23:06, , 2F
另外每個字的對齊點是bitmap_left和bitmap_top
01/12 23:06, 2F

01/13 09:18, , 3F
完全不是,pitch的大小跟width一樣
01/13 09:18, 3F

01/13 09:20, , 4F
bitmap沒有left,bitmap_glyph有,不過也不準。
01/13 09:20, 4F

01/13 09:26, , 5F
不然就找 FTGL 或 pangocairo 來包吧
01/13 09:26, 5F
文章代碼(AID): #1IqgSpiC (GameDesign)