我使用freetype在IPhone设备上写文本,结果很少见。正如您在图像中看到的,相同的字符(如'b','n‘或'u')呈现不一样。
纹理始终是相同的。你知道问题出在哪里吗,或者是怎么回事?
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);
....
}
谢谢!!
发布于 2011-10-02 16:02:27
在freetype引用中:http://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html
FT_LOAD_TARGET_LIGHT.用于非单色模式的较轻的提示算法。许多生成的字形更加模糊,但更像它的原始形状。有点像Mac上的渲染。作为一个特殊的例外,这个目标意味着FT_LOAD_FORCE_AUTOHINT。
FT_RENDER_MODE_LIGHT.This等同于FT_RENDER_MODE_NORMAL。它只被定义为一个单独的值,因为呈现模式也被间接用于定义提示算法选择器。详情请参见FT_LOAD_TARGET_XXX。
它使用下一个配置来工作:
FT_Load_Glyph(_face, FT_Get_Char_Index(_face,ch), FT_LOAD_TARGET_LIGHT)
...
FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1);
https://stackoverflow.com/questions/7621227
复制相似问题