前面记录了一下基础知识,接下来就写一下酷炫的效果。
当然我也是刚入门,只学了粒子效果和文字显示…
文字显示
主要是要回答几个问题:
- 文字是怎么表示的
- 文字怎么加载的
- 如何实现
关于怎么表示问题,可以看下图,我们可以加载一个字符字形,获取它的度量值,并生成一个纹理。
具体的流程如下:
- 初始化FT_Library,FT_face
- 初始化加载的画笔大小
- 对128个字符进行循环(循环过程包含Load字符,生成texture,设置texture的一些基础选项,保存加载的每一个字符数据)
- 最后要释放内存(重要!!!!)
具体代码代码:
// FreeType
FT_Library ft;
// All functions return a value different than 0 whenever an error occurred
if (FT_Init_FreeType(&ft))
std::cout << "ERROR::FREETYPE: Could not init FreeType Library" << std::endl;
// Load font as face
FT_Face face;
if (FT_New_Face(ft, "fonts/arial.ttf", 0, &face))
std::cout << "ERROR::FREETYPE: Failed to load font" << std::endl;
// Set size to load glyphs as
FT_Set_Pixel_Sizes(face, 0, 48);
// Disable byte-alignment restriction
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
// Load first 128 characters of ASCII set
for (GLubyte c = 0; c < 128; c++)
{
// Load character glyph
if (FT_Load_Char(face, c, FT_LOAD_RENDER))
{
std::cout << "ERROR::FREETYTPE: Failed to load Glyph" << std::endl;
continue;
}
// Generate texture
GLuint texture;
glGenTextures(1, &texture)