Ogre 3D. Серия обучающих статей. Выпуск 1

В топике прозвучала просьба написать какие-нибудь статьи про Ogre 3D.
В первой статье я расскажу о установке Ogre и создании простейшего приложения использующего Ogre.

Установка


Самый простой вариант, это скачать sdk с ogre3d.org, но sdk есть только последняя стабильная версия, а все новые вкусности есть только в trunk.
Опишу в кратце сборку и установку из исходников.
Понадобится:
Исходники огра из svn.ogre3d.org/svnroot/ogre/trunk
Зависимости: качаем отсюда Microsoft Visual C++ Dependencies Package (как Вы поняли, я буду описывать работу под VC++)
Cmake (возможно вы использовали для других проектов): http://cmake.org/
DirectX SDK (если вы хотите использовать в качестве рендера DirectX 3D, для OpenGL не требуется): http://msdn.microsoft.com/directx
Распаковываем архив с зависимостями в папку, куда сделали checkout исходников (в моем случае D:/TestGameEngine/ogre_trunk/) и собираем зависимости (проект для студии лежит в \ogre_trunk\Dependencies\src\ выберете проект для своей версии студии)

Теперь можно приступить к сборке самого огра.
Запустим Cmake, в верхнем поле укажем папку с исходниками, а в нижней куда сложить файлы проекта и результаты конфигурации, после чего нажимаем configure и указываем компилятор, которым будем собирать.
Возможно лог будет пестрить ошибками о не найденных зависимостях, тогда укажем в параметра Ogre→OGRE_DEPENDENCIES_DIR папку /ogre_trunk/Dependencies, после чего Cmake пропишет пути к lib и include файлам разных библиотек. Как видите, есть некоторые зависимости, которые не обязательны, но нужны для какой либо фичи в движке. Например можете указать путь к doxygen, для генерации документации, хотя ее можно посмотреть здесь

Я немного поменял опции сборки (например мне не нужен OpenGL рендер и проекты для сборки примеров)
Если вы поменяли опции то нажимаем Configure, и если не нашлось ошибок, то нажимаем Generate.

Теперь открываем сгенерированный проект в студии, у меня это \ogre_build\OGRE.sln
Можно собрать какой-либо отдельный компонент или сразу собрать ALL_BUILD. Проект Package собирать не нужно, это сборка установщика.

Когда устанавливаем SDK пути инклудов и lib файлов прописываются в студии автоматически, при сборке из исходников это надо сделать руками.
Прописываем в настройках студии пути инклудов:
\ogre_trunk\OgreMain\include
\ogre_build\include
\ogre_trunk\Dependencies\include

Файлы библиотек:
\ogre_build\lib\[Release|Debug](надо указать оба путя, но я использую только Release версию, поэтому указал только ее)


Так-же в последствии не забудем указать OgreMain.lib в опциях линкера у проекта.
На этом сборку огра можно считать законченной.

Создание простейшего приложения


Теперь создадим простой проект на Ogre.
Создадим Win32 Console Application.
Добавляем в код #include «Ogre.h»
и в код функции main добавляем
  1. Ogre::Root* mRoot = new Ogre::Root(); //создаем главный объект огра
  2. mRoot->showConfigDialog(); //Показываем диалог конфигурации огра, выбор настроек.
  3. Ogre::RenderWindow* mWindow = mRoot->initialise(true); //создаем окно рендеринга, параметр true говорит, о том, что нужно создать это окно, иначе его нужно создать вручную
  4. Ogre::SceneManager* mSceneMgr = mRoot->createSceneManager(Ogre::ST_GENERIC); //создаем сцену со стандартным менеджером сцены.
  5. while (1)
  6. {
  7.   MSG msg;
  8.   while (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
  9.   {
  10.     TranslateMessage(&msg);
  11.     DispatchMessage(&msg);
  12.   }
  13.   if (!mRoot->_fireFrameStarted())
  14.     break;
  15.   mRoot->_updateAllRenderTargets();
  16.   if (!mRoot->_fireFrameEnded())
  17.     break;
  18.   if (mWindow->isClosed())
  19.     break;
  20. }
  21.   window->destroy();
  22.   root->shutdown();

Скопируем в папку с exe файлом файлы OgreMain.dll, и файл рендер системы, например RenderSystem_Direct3D9.dll
так-же создадим plugins.cfg, в котором укажем
PluginFolder=.
Plugin=RenderSystem_Direct3D9

это укажет огру, какие дополнительные плагины загрузить во время инициализации

После запуска видим простейшее приложение на огре, которое показывает пустое окно.
На всякий случай выложу исходники и скомпилированный пример:
Исходник
Скомпилированные бинарники (сама программ+OgreMain.dll+RenderSystem_Direct3D9.dll)

В следующей статье расскажу о создание простейший сцены в огре.
+35
2 марта 2010, 21:43
48
Pr0Ger 8,6 G+

комментарии (10)

+2
NeonMercury #
Вы только не подумайте, спасибо за статью, плюс вам за это =)
Но есть одно пожелание: наверное, всё таки лучше реже, но больше (ведь тогда можно будет долго экспериментировать с большим материалом, а когда это надоест, вот и новая статья)
Надеюсь вашего энтузиазма хватит надолго
+1
nayjest #
Спасибо! Для начала неплохо, пишите еще.
Напротив «Создание простейшего приложения» галочка поставлена, теперь ждем более серьезных уроков :)
+3
Ockonal #
О, вы также согласились приложить усилия для этого. Я благодарен, но, в свою очередь, хотел написать что-то более интересное. Статьей о том, как скомпилировать Ogre и сделать первое приложение уйма, а действительно полезных мало. Надеюсь, вы же не хотите переписывать стандартные туториалы? Я хочу написать серию статьей по разработке игрового движка, включая: рендер + физика + скриптовая система + редактор уровней.
Но в любом случае + вам за старания.
+14
moadib #
Хм. Сразу извиняюсь за большой комментарий.

Зачем писать лишний код и ограничивать себя виндовсом?
MSG msg;
while (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
 TranslateMessage(&msg);
 DispatchMessage(&msg);
}


заменить на
Ogre::WindowEventUtilities::messagePump();


if (!mRoot->_fireFrameStarted())
  break;
mRoot->_updateAllRenderTargets();
if (!mRoot->_fireFrameEnded())
  break;

заменить на
if (!mRoot->renderOneFrame())
  break;


Выкинуть
window->destroy();

во-первых, опечатка, во-вторых, не нужна абсолютно.

Опять опечатка, да еще и memory leak
root->shutdown();

поправить на
delete mRoot;


А вообще, лучше использовать startRendering и framelistener. Я же правильно понял, что всё это Вы нагородили для того, чтобы обработать закрытие окна?

0
devolonter #
Может вынести в отдельный блог? Автору спасибо! Жду продолжения
0
kornerr #
В статье сказано, что вкусности все в хранилище, а код самый что ни на есть бесвкусный.
К тому же, думаю, место таким статьям здесь: www.ogre3d.ru/wik/pmwiki.php
Намного полезней был бы простой перевод оригинальных статей: www.ogre3d.org/wiki/index.php/Basic_Tutorial_1
В них описано всё максимально подробно для всех платформ.
Самым полезным было бы обновить 7-ю статью OGRE + CEGUI, т.к. она для CEGUI-0.6.x, для последней CEGUI-0.7.x не подходит: www.ogre3d.org/wiki/index.php/Basic_Tutorial_7
+1
jerom #
Автору поставил +, а вот топику -, жду чего-нибудь более существенного, с мясом.
0
gcc #
Как уже верно отметили, главный цикл и завершение программы реализованы неоптимально, присоединяюсь к этой поправке. Ещё можно было бы описать функцию mRoot->restoreConfig(), да и вообще про конфиг-файл упомянуть. Скрины бы тоже не помешали.
Тем не менее, плюсую за стремление развивать тему :)
+1
skeeet #
Рекомендую всем интересующимся официальную книгу по Ogre3D. Несмотря на 2006 год издания она все еще актуальна.
0
afunix #
Все хорошо, конечно, но первую статью в серии стоит начать с того, что такое Ogre 3D и набора его фич

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.