Инициализируем Ogre или "недо_HelloWorld" на С++

В этой статье не будет ничего интересного. Мы всего лишь создадим приложение "чёрный экран". Но сделаем єто без помощи "ExampleApplication.h". Он конечно существенно упрощает задачу, но нам то нужно разобраться что к чему ;)

Итак. Первым делом установите библиотеки. Добавте в вашу среду пути к библиотеке и пр. (нам понадобится OgreMain и OIS)

Создаём пустой проект и подключаем заголовочные файлы:

#include
#include
using namespace Ogre;   /// существенно упростит нам "письмо"

Не будем усложнять пример ООП. Просто начнём заполнять функцию main нашей программы.

Прежде всего необходимо создать главный объект ogre:

    Root *root = new Root("plugins.cfg");

Параметр - имя файла с настройками плагинов. Это необходимо, для того, чтобы библиотека могла инициализировать себя и понять какие плагины ей доступны.
Как вы уже слышали в мире 3D существует 2 противоборца: DirectX и OpenGL. Ogre умеет работать как с одним, так и с другим!
У меня Linux поєтому файл с настройками у меня имеет такой вид:

PluginFolder=.
Plugin=RenderSystem_GL

Кроме того необходимо скопировать плагин RenderSystem_GL в папку с бинарником.
У меня он был в таком каталоге: /usr/lib64/OGRE/RenderSystem_GL.so
Идём дальше.
Теперь проверим существует ли конфиг, если нет выведем на экран окно для настройки:

    if (!root->restoreConfig())
        root->showConfigDialog();

Если конфига нет будет выведено такое окно:

Это стандартное окошко. При желании можете сделать своё, ну или не делать его вообще...

Теперь сохраним конфигурацию:

    root->saveConfig();

При следующем запуске этого окна не будет (кроме того в Windows оно выглядит совсем по другому)...

Теперь приступим к созданию окна:

    root->initialise(true,"my window");  /// создать окно автоматически с указанным заголовком

Получим указатель на окно:

    RenderWindow *window = root->getAutoCreatedWindow();

Ну а теперь самая интересная часть! На сколько мне известно в Ogre нет системы отслеживания событий мыши и клавиатуры. Тоесть если вы сейчас запустите приложение, то выйти из него вам помогут только хитрости.
На помошь приходит библиотека  OIS.
Рассматривать подробно не буду. Позже напишу отдельную статью.
Вот код "отлова" Escape:

    OIS::InputManager* mInputManager;
    OIS::Keyboard* mKeyboard;
    OIS::ParamList pl;
    size_t windowHnd = 0;
    std::ostringstream windowHndStr;
    window->getCustomAttribute("WINDOW",&windowHnd);
    windowHndStr << windowHnd;
    pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
    mInputManager = OIS::InputManager::createInputSystem(pl);
    mKeyboard = static_cast<:keyboard>(mInputManager->createInputObject( OIS::OISKeyboard, false ));*>

Цикл ожидания событий:

bool keepRendering = true;

    while(keepRendering) {
        root->renderOneFrame();
        mKeyboard->capture();
        if (mKeyboard->isKeyDown(OIS::KC_ESCAPE)) {
            root->shutdown();
            keepRendering = false;
        }
    }

Если откомпилировать проект:

g++ main.cpp -o main -lOgreMain -lOIS

...и запустить его.. то вы увидите всего навсего чёрный экран. Окно будет закрыто при нажатии Escape.

Напоследок исходник целиком:

#include
#include
using namespace Ogre;

int main() {
    Root *root = new Root("plugins.cfg");

    if (!root->restoreConfig())
        root->showConfigDialog();

    root->saveConfig();
    root->initialise(true,"my window");
    RenderWindow *window = root->getAutoCreatedWindow();

    OIS::InputManager* mInputManager;
    OIS::Keyboard* mKeyboard;
    OIS::ParamList pl;
    size_t windowHnd = 0;
    std::ostringstream windowHndStr;
    window->getCustomAttribute("WINDOW",&windowHnd);
    windowHndStr << windowHnd;
    pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
    mInputManager = OIS::InputManager::createInputSystem(pl);
    mKeyboard = static_cast<:keyboard>(mInputManager->createInputObject( OIS::OISKeyboard, false ));*>

    bool keepRendering = true;

    while(keepRendering) {
        root->renderOneFrame();
        mKeyboard->capture();
        if (mKeyboard->isKeyDown(OIS::KC_ESCAPE)) {
            root->shutdown();
            keepRendering = false;
        }
    }
    return 0;
}

;)

Просмотров:   1417

Комментарии

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Введи эти символы. Ато роботы одолели!