资源简介
使用FreeType接受Unicode字符集渲染到纹理。。。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include FT_FREETYPE_H
#include
#include
#ifdef _WIN32
#pragma comment(lib “freetype2312MT_D.lib“)
#endif
#define MAX_NO_TEXTURES 1
#define CUBE_TEXTURE 0
GLuint texture_id[MAX_NO_TEXTURES];
struct xCharTexture
{
GLuint m_texID;
wchar_t m_chaID;
int m_Width;
int m_Height;
int m_adv_x;
int m_adv_y;
int m_delta_x;
int m_delta_y;
public:
xCharTexture()
{
m_texID = 0;
m_chaID = 0;
m_Width = 0;
m_Height = 0;
}
}g_TexID[65536];
class xFreeTypeLib
{
FT_Library m_FT2Lib;
FT_Face m_FT_Face;
int m_w;
int m_h;
public:
xFreeTypeLib()
{
if (FT_Init_FreeType( &m_FT2Lib) )
exit(0);
}
void load(const char* font_file int _w int _h)
{
//加载一个字体取默认的Face一般为Regualer
if (FT_New_Face( m_FT2Lib font_file 0 &m_FT_Face ))
{
getchar();
exit(0);
}
FT_Select_Charmap(m_FT_Face FT_ENCODING_UNICODE);
m_w = _w ; m_h = _h;
m_FT_Face->num_fixed_sizes;
//大小要乘64.这是规定。照做就可以了。
//FT_Set_Char_Size( m_FT_Face 0 m_w << 6 96 96);
FT_Set_Pixel_Sizes(m_FT_Facem_w m_h);
}
GLuint loadChar(wchar_t ch)
{
if(g_TexID[ch].m_texID)
return g_TexID[ch].m_texID;
if(FT_Load_Char(m_FT_Face chFT_LOAD_RENDER|FT_LOAD_FORCE_AUTOHINT|
(true ? FT_LOAD_TARGET_NORMAL : FT_LOAD_MONOCHROME | FT_LOAD_TARGET_MONO) ) )
{
return 0;
}
xCharTexture& charTex = g_TexID[ch];
//得到字模
FT_Glyph glyph;
if(FT_Get_Glyph( m_FT_Face->glyph &glyph ))
return 0;
//转化成位图
FT_Render_Glyph( m_FT_Face->glyph FT_RENDER_MODE_LCD );//FT_RENDER_MODE_NORMAL );
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;
m_FT_Face->size->metrics.y_ppem;
m_FT_Face->glyph->metrics.horiAdvance;
charTex.m_Width = width;
charTex.m_Height = height;
charTex.m_adv_x = m_FT_Face->glyph->advance.x / 64.0f;
charTex.m_adv_y = m_FT_Face->size->metrics.y_ppem; //m_FT_Face->glyph->metrics.horiBearingY / 64.0f;
charTex.m_delta_x = (float)bitmap_glyph->left;
charTex.m_delta_y = (float)bitmap_glyph->top - height;
glGenTextures(1&charTex.m_texID);
glBindTexture(GL_TEXTURE_2DcharTex.m_texID);
char* pBuf = new char[width * height * 4];
for(int j=0; j < height ; j++)
{
for(int i=0; i < width; i++)
{
unsigned char _vl = (i>=bitmap.width || j>=bitmap.rows) ? 0 : bitmap.buffer[i + bitmap.width*j];
pBuf[(4*i + (height - j - 1) * width * 4) ] = 0xff;
pBuf[(4*i + (height - j - 1) * width * 4)+1] = 0xff;
pBuf[(4*i + (height - j - 1) * width *
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2010-10-29 10:13 glut_rar_15123\
文件 889 2010-10-28 16:24 glut_rar_15123\FreeTypeTest.sln
文件 9728 2010-10-29 09:51 glut_rar_15123\FreeTypeTest.suo
文件 3833 2010-10-28 16:24 glut_rar_15123\FreeTypeTest.vcproj
文件 1425 2010-10-29 09:51 glut_rar_15123\FreeTypeTest.vcproj.20100524-1519.Administrator.user
文件 8388 2010-10-28 16:34 glut_rar_15123\freetype_test.cpp
相关资源
- Hadoop权威指南第四版_中文版本_pdf高清
- CSS参考手册 4.2.4 简体中文版
- 初中文言文翻译完整版
- DICOM 协议中文版 1-6 部分 完整版
- 同名文本文件合并器 可将两个文件夹
- 基于Deep Belief Nets 的中文名实体关系抽
- IR2110中文资料,介绍了IR2110的半桥驱
- 071中文题库已通过考试
- FUSB302B 中文资料
- GSM 03.40中文版
- 软件工程第四版杨卫东译第一章习题
- ImageJ用户手册中文版
- lcd12864最全中文资料
- MRIcron中文说明书
- 全中文、可视化易语言编写手机安卓
- LSSVM工具箱中文版-LS-SVM.doc
- 2010年圣诞节祝福网页源码,超漂亮中
- BPMN2新规范中文版
- ABC-SVM算法,详细中文注释
- directfb中文API
- ST7920c20_中文字库的液晶
- nRF24L01中文手册.pdf
- RS485使用手册与指南[中文版、文字版
- 5G安全报告(2020)-中文版.pdf
- 1553B总线协议中文版
- 安川指令说明中文版
- GH-Bladed 理论手册中文版
- ADBKeyBoard完美解决ADB输入中文
- ST188芯片手册中文资料
- endnote X9导入中文文献修复文件
评论
共有 条评论