我正在使用freetype在iPhone設備中編寫文本,結果很少見。正如你在圖像中看到的那樣,相同的字符(如'b','n'或'u')不會被同等渲染。使用freetype和Opengl ES 2(IPhone設備)不能很好地呈現字體
紋理總是相同的。任何想法在哪裏是問題或發生了什麼?
http://craneossgd.files.wordpress.com/2011/10/image_freetype1.png
代碼:
FT_New_Face(getFTLibrary(), _filename, 0, &(_face))
FT_Select_Charmap(_face, FT_ENCODING_UNICODE);
FT_Set_Char_Size(_face, _pt<<6,_pt<<6, _dpi, _dpi);
for (i=0; i<255; i++)
{
if (!createGlyphTexture(i))
{
clean();
}
}
.....
createGlyphTexture(unsigned char ch){
....
FT_Load_Glyph(_face, FT_Get_Char_Index(_face,ch), FT_LOAD_DEFAULT)
FT_Get_Glyph(_face->glyph, &glyph)
....
// *** Transform glyph to bitmap
FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1);
// *** Get bitmap and glyph data
bitmap_glyph = (FT_BitmapGlyph)glyph;
bitmap = bitmap_glyph->bitmap;
// ***
width = pow2(bitmap.width);
height = pow2(bitmap.rows);
// *** Alloc memory for texture
expanded_data = (GLubyte *)malloc(sizeof(GLubyte)*2*width*height);
for (j=0; j<height;j++)
{
for (i=0; i<width; i++)
{
if ((i>=(CRuint)bitmap.width) || (j>=(CRuint)bitmap.rows)){
expanded_data[2*(i+j*width)] = 0;
expanded_data[2*(i+j*width)+1] = 0;
} else {
expanded_data[2*(i+j*width)] = bitmap.buffer[i+bitmap.width*j];
expanded_data[2*(i+j*width)+1] = bitmap.buffer[i+bitmap.width*j];
}
}
}
// *** Load texture into memory
glBindTexture(GL_TEXTURE_2D, _textures[ch]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_LUMINANCE_ALPHA, width, height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, expanded_data);
....
}
謝謝!
爲什麼您使用的FreeType? – hooleyhoop
我正在開發一款適用於iPhone和Android設備的2D遊戲引擎。我使用的是Freetype,因爲它是跨平臺的。 – cpps
顯示一些代碼。它看起來像freetype配置爲呈現單色位圖,當你想要灰度(FT_RENDER_MODE_MONO),但沒有源代碼,這是不可能說的。 iOS本機類型渲染基於freetype構建,但不需要您自己配置它 – hooleyhoop