OpenGL学习笔记--字体库freetype2、FTGL
来源:互联网 发布:极品网络女神sally 编辑:程序博客网 时间:2024/06/05 16:08
freetype2
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。
FTGL
FTGL即FreeType Graphics Library,它相当于在freetype的基础上又封装了一道接口,更加方便使用。
下载编译
分别到各自官网上下载即可,如果是ubuntu下可直接使用apt-cache search搜索相关的安装包,进行安装,windows下下载源代码后使用VC打开对应工程编译即可,没有提供VC工程的,一般也会提供cmake文件去生成。
注意的是因为FTGL是依赖于freetype的,所以需要先编译好freetype2,并在VC目录中添加头文件和库文件路径
FTGL使用基本流程图
代码示例
#include <gl/glut.h>#include <freetype2/ft2build.h>#include <freetype2/freetype/freetype.h>#include <FTGL/ftgl.h>#include <locale.h>#ifdef WIN32#pragma comment(lib, "glew32.lib")#pragma comment(lib, "freeglut.lib")#pragma comment(lib, "freetype2410.lib")#pragma comment(lib, "ftgl_static.lib")#endifstruct DrawInfo{ int left; int right; int top; int bottom; GLuint color;};#define R(color) (((color) >> 24) & 0xFF)#define G(color) (((color) >> 16) & 0xFF)#define B(color) (((color) >> 8) & 0xFF)FTGLPixmapFont* pFont = NULL;void initFont(const char* fname, unsigned int h){ if (!pFont){ pFont = new FTGLPixmapFont(fname); pFont->FaceSize(h); pFont->CharMap(FT_ENCODING_UNICODE); }}void releaseFont(){ if (pFont){ delete pFont; pFont = NULL; }}void drawStr(const char* str, DrawInfo* di){ glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT), 0.0, -1.0, 1.0); const char* mbs = str; int len_mbs = strlen(mbs); // linux下使用locale -a可以查看支持的本地化字符集,windows下使用chcp命令查看活动代码页#ifdef WIN32 setlocale(LC_ALL,".936");#else setlocale(LC_ALL,"ch_ZN.utf8");#endif int len_wcs = mbstowcs(NULL, mbs, 0); wchar_t* wcs = new wchar_t[len_wcs + 1]; mbstowcs(wcs, mbs, strlen(mbs)+1); //windows也可使用MultiByteToWideChar这个API来进行多字节与宽字节的转化 int r = R(di->color); int g = G(di->color); int b = B(di->color); glColor3ub(R(di->color), G(di->color), B(di->color)); glRasterPos2i(di->left, di->bottom); pFont->Render(wcs); glColor3ub(255,255,255); delete[] wcs;}void reshape(int w, int h){ glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, w, h, 0.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}void display(){ glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); DrawInfo di; di.left = 200; di.bottom = 200; di.color = 0xFFFF00FF; drawStr("FTGL使用范例", &di); glutSwapBuffers();}int main(int argc, char* argv[]){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowPosition(0, 0); glutInitWindowSize(640, 480); int mainwnd = glutCreateWindow("glut window"); glutReshapeFunc(reshape); glutDisplayFunc(display); // ttf文件可以到网上下载,windows下也可在C盘直接搜索*.ttf initFont("D:/simfang.ttf", 36); glutMainLoop(); releaseFont(); return 0;}
效果图:
阅读全文
1 0
- OpenGL学习笔记--字体库freetype2、FTGL
- FTGL在OpenGL下显示中文
- Android学习笔记(19)---调用自己想要的字体库
- freetype2
- FreeType2
- freetype2
- freetype2
- OPENGL学习笔记1
- OpenGL学习笔记
- OpenGL 学习笔记
- OpenGL学习笔记
- OpenGL 学习笔记(1)
- OpenGL学习笔记(一)
- OpenGL学习笔记(二)
- OpenGL学习笔记
- Opengl学习笔记1
- OpenGL学习笔记:混合
- OpenGL学习笔记:纹理
- rman备份脚本(收集学习)
- JDK环境安装
- MP4 moov编码完成时写入头部
- Android 6.0以上系统的 RecyclerView 在HorizontalScrollView或者Scrollview中显示不全问题
- 资源记录
- OpenGL学习笔记--字体库freetype2、FTGL
- SpreadJS 在 Angular2 中支持哪些事件?
- mysql设置数据库注意事项
- mysql workbench 存储过程
- BZOJ1833[count 数字计数]
- 颜色识别
- Linux上查看造成IO高负载的进程
- Algorithms exercise 8.8
- Android开发-备忘录模式在Android的应用和模拟实验