Array ( )
Вход:




Главная | OpenGL | GLSL | AI | Сеть | Примеры | Библиотека

OpenGL: Шрифты - библиотека FTGL






Итак, в этом уроке я покажу вам, как выводить шрифты с помощью
библиотеки FTGL. Прежде всего вам понадобятся .lib, .dll файлы
и хидеры этой библиотеки и библиотеки freetype.
Взять их вы можете у меня:
FTGL.rar
Кроме того, нужны будут библиотеки и хидеры freetype:
freetype.rar

В архиве находятся необходимые .dll-ки, .lib-ы и хидеры. Также я положил туда
стандартный шрифт arial.ttf. Не забудьте указать Visual Studio пути, куда вы положите
файлы.

Итак, приступим. Для начала создадим совсем простой класс CFont.
Выделим для него два файла: font.h и font.cpp

Файл font.h - хидер класса CFont:

#ifndef __FONT_H
#define __FONT_H

#include "main.h"
#include <wchar.h>      // Чтобы использовать в программе русский язык, мы будем
                        // использовать юникод, который хранится в переменных типа wchar_t
// Хидеры FTGL:
#include <ftglFTFont.h>
#include <ftglFTGLBitmapFont.h>
#include <ftglFTGLOutlineFont.h>

class CFont{
public:
        // Конструктор класса - передаём ему имя .ttf-файла, размер и глубину шрифта.
    CFont(char *ttf, int FSize, int FDepth);
        // Деструктор класса
    ~CFont();
       
        // Создаваемый для нашей программы шрифт
    FTFont *Font;

        // Простая функция печати текста
    void Print(float x, float y, const wchar_t *text);
};

#endif


Вот и всё, осталось описать реализацию класса
в файле font.cpp:

#include "font.h"

// Конструктор класса.
// Передаваемые параметры: имя файла шрифта, размер и глубина шрифта.
CFont::CFont(char *ttf, int FSize, int FDepth)
{
        // Создаём новый битмапный шрифт
    this->Font = new FTGLBitmapFont(ttf);
        // Устанавливаем размер шрифта или выходим с ошибкой
    if(!Font->FaceSize(FSize)){
        MessageBox(NULL,"Can't set font FaceSize","Error",MB_OK);
        exit(1);
    }
        // Устанавливаем глубину
    Font->Depth(FDepth);
        // И кодировку - юникод
    Font->CharMap(ft_encoding_unicode);
}

// Функция печати текста.
// Первые 2 параметра - экранные координаты (те, что мы установили в 800 и 600),
// третий - текст для печати
void CFont::Print(float x, float y, const wchar_t *text)
{
        // Входим в новую матрицу и обнуляем её
    glPushMatrix();
    glLoadIdentity();
                // Выключаем текстуры
        glDisable(GL_TEXTURE_2D);
                // Перемещаемся на указанные координаты
            glTranslatef(x,y,-1);
            glRasterPos2f(-1,0.5);
            Font->Render(text); // И рендерим текст
        glEnable(GL_TEXTURE_2D);
    glPopMatrix();
}


Ну вот и все, простой класс шрифта готов. Осталось только миспользовать его
в файле main.cpp:

// Для начала после библиотек OpenGL включаем библиотеку FTGL:
#pragma comment(lib, "ftgl_dynamic_MT.lib")


// В секции инклудов, где сейчас у нас только main.h, добавляем
// хидеры нового класса и wchar_t:
#include "font.h"
#include <wchar.h>

// Следующей строкой обьявим наш класс шрифта:
CFont *Font;

//*****************************************************************
// В функции Init(), в самом её конце, добавим инициализацию шрифта:
void Init(HWND hWnd)
{
......
      Font = new CFont("arial.ttf",16,16);
}

// Функция RenderScene(), которая и будет выводить текст:
void RenderScene()
{
 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

// Не обращайте внимания на эту секцию кода. Она просто позволяет нам рисовать,
// передавая OpenGL экранные координаты. Подробнее этот режим мы рассмотрим
// в следующих уроках.
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho( 0,SCREEN_WIDTH,SCREEN_HEIGHT, 0,0, 1 );
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
//*************************************************************************

    glDisable(GL_DEPTH_TEST);
        glColor3f(1.0f,1.0f,1.0f);   // Устанавливаем цвет в белый. Это обязательно, т.к.
                         // FTGL необходим инициализированный цвет.
        Font->Print(200,200, L"Тест");  // Выводим текст
    glEnable(GL_DEPTH_TEST);


//*************************************************************************
    glMatrixMode( GL_PROJECTION );
    glPopMatrix();
    glMatrixMode( GL_MODELVIEW );
//*************************************************************************

    SwapBuffers(g_hDC);
}







Исходные коды к уроку




Комментарии:

Войдите, чтобы оставить комментарий:












Яндекс.Метрика
 Яндекс цитирования.