Оверлеи в Ogre3D

Оверлеи в Ogre3D

Теперь я начну писать статьи по свободному render-движку Ogre3D. Сегодня мы разберёмся с оверлеями и рендером текста. Для начала разберёмся, что нам нужно будет сделать:

Загрузить в ресурсы нужный шрифт

Создать оверлей

Создать текстовую область на оверлее

Отрисовать оверлей

Для начала нужно подключить нужные хедеры:

#include <OgreFontManager. h>

#include "OgreFont. h"

#include <OgreTextAreaOverlayElement. h>

Объявляем все нужные переменные:

// Font

FontPtr font;

// Overlay

Ogre::OverlayManager *mOverlayManager;

OverlayElement* mStats;

Ogre::OverlayContainer* panel;

TextAreaOverlayElement* textArea;

Ogre::Overlay* overlay;

Используем объект типа FontPtr для загрузки шрифта: font = Ogre::FontManager::getSingleton().getByName("Pneumatics"); font->setParameter("type","truetype"); font->setParameter("size","28"); font->load();

Здесь нужно разобраться подробней. В имя шрифта я взял “Pneumatics”, но нам нужно где-то инициализировать его. Для этого в Ogre есть fontdef-файлы. Найти пример такого можно в папке media/fonts. Перейдите туда. Для начала, скопируйте в эту папку нужный вам шрифт (у нас в примере это pneumati. ttf). Далее нужно определить его в fontdef-файле. Можете редактировать sample. fonted и дописать в него:

Pneumatics

{ type truetype source pneumati. ttf size 16 resolution 96

}

В вашем случае, выделенные части могут быть иными. Теперь наш шрифт удачно загрузится. Если вы не понимаете некоторых параметров конфига — читайте документацию Ogre, там всё отлично расписано.

Теперь переходим к основной части — работа с оверлеями. Суть работы всего такая: у нас есть оверлей, их можно использовать несколько. Оверлей может хранить контейнеры, а они, в свою очередь, элементы. Первое, что нужно создать — панель.

Panel = static_cast<OverlayContainer*>( mOverlayManager->createOverlayElement("Panel", "PanelStats") ); panel->setMetricsMode(Ogre::GMM_PIXELS); panel->setPosition(10, 10); panel->setDimensions(300, 120); setPosition указывает на глобальные координаты, относительно верхнего левого угла. Т. е. наша панель будет отступать слева вверху на 10 пикселей. setDimensions задаёт размеры нашей панели.

TextArea = static_cast<TextAreaOverlayElement*>( mOverlayManager->createOverlayElement("TextArea", "TextAreaName") ); textArea->setMetricsMode(Ogre::GMM_PIXELS); textArea->setPosition(0, 0); textArea->setDimensions(300, 120); textArea->setCharHeight(28); textArea->setFontName("Pneumatics"); overlay = mOverlayManager->create("OverlayStats"); overlay->add2D(panel); panel->addChild(textArea); overlay->show();

Всё достаточно просто, мы создаем оверлей с именем “OverlayStats”, привязываем к нему наш контейнер-панель, а к панели привязываем textArea элемент (оверлей-элемент). Именно он будет содержать текст. В самом конце осталось теперь только отобразить оверлей.

Теперь в глобальном цикле приложения вам нужно делать что-то такое: textArea->setCaption( "Some string…" );

В итоге мы увидим текст Some string….


Карта сайта


Информационный сайт Webavtocat.ru