Готовый перевод Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 1: An introduction to the most basic Ogre constructs: SceneManager, SceneNode, and Entity objects.
КРАТКОЕ СОДЕРЖАНИЕ
В этом туториале мы познакомим вас с базовыми понятиями в Ogre: Менеджер сцены (SceneManager), Ноды (SceneNode) и Объекты (Entity).
Мы не затронем большое количество кода, вместо этого мы сконцентрируемся на основных принципах Ogre для тех кто начинаает его изучать.
По мере изучения руководства вы будете понемногу добавлять код в ваше приложение и наглядно видеть результаты.
Ничто не заменит реального программирования для лучшего усвоения этого материала! Боритесь с желанием просто читать.
ДЛЯ НАЧАЛА
ПЕРВОНАЧАЛЬНЫЙ КОД
Для этого руководства мы будем использовать готовое приложение.
Не обращайте внимания на весь код, нас будет интересовать только тот, который мы будем добавлять в метод createScene.
В следующих статьях мы дадим более глубокое объяснение принципам работы Ogre, но сейчас мы начнем с самого основного.
Прочитайте "Setting up an Application" (Создание вашего первого приложения) чтобы создать самое первое приложение в вашей IDE.
Создайте проект. Назовите его "Tutorial".
Добавьте каркасное приложение к нему:
В этом руководстве мы будем работать только с методом createScene() из файла TurtorialApplication.cpp
TutorialApplication.cpp должен содержать следующий код (заголовочные комментарии удалены, чтобы не создавать путаницы)
Итак скомпилируйте и запустите программу, чтобы убедится что все настроено корректно.
Для движения используйте клавиши WASD для перемещения и мышь чтобы осмотреться.
Нажав кнопку ESC вы закроете приложение.
УСТРАНЕНИЕ НЕПОЛАДОК
Если у вас возникли проблемы при компиляции, еще раз прочитайте "Setting Up An Application" для того чтобы убедится что вы корректно настроили вашу IDE и взгляните в файл Ogre.log, там могут содержатся дополнительные сведения.
Также вы можете поискать решение вашей проблемы на форумах посвященных Ogre.
Вполне вероятно ваша проблема уже возникала у других.
Если по вашей проблеме нет информации, прочитайте правила форума и не стесняйтесь спрашивать.
Выложите Ogre.log, возникающие исключения и отладочную информацию.
В следующих статьях не будет секции "Решение проблем", поэтому обратите особое внимание на следующие абзацы.
Проблемы с функцией Message Box
Если вы используете Visual Studio с включенной в проекте поддержкой юникода, может возникнуть такая ошибка:
Проблема в том что функция MessageBox в нашем случае ожидает строку в юникоде, а мы отправляем ее в ANSI.
Чтобы поправить это, измените следующую строку:
Или вы можете исправить это, сменив текстовый формат в вашем компиляторе с юникода на ANSI.
В таком случае не будет поддержки других языков.
Причина в том что функция MessageBox ссылается на MessageBoxA (ANSI) или MessageBoxW (Widechar/Unicode), в зависимости от конфигурации вашего проекта. Мы исправим эту ошибку явно указав использовать ANSI формат функции.
ОТСУТСТВИЕ КОНФИГУРАЦИОННЫХ ФАЙЛОВ ИЛИ БИБЛИОТЕК (DLL)
Если ваше приложение собралось но при запуске ругается на отсутствие библиотек или конфигурационных файлов (*.cfg), тогда вы вероятно забыли их скопировать из каталога OgreSDK.
В Visual Studio и CodeBlocks, собранные бинарники обычно помещаются в каталоги [ProjectFolder]\bin\release и [ProjectFolder]\bin\debug для режима Release и Debug соответственно.
Вы должны скопировать все *.dll и *.cfg файлы из папки OgreSDK в эти каталоги.
То есть копируйте файлы из [OgreSDK]\bin\release в [ProjectFolder]\bin\release и из [OgreSDK]\bin\debug в [ProjectFolder]\bin\debug.
Также отредактируйте resources.cfg и укажите в нем корректные пути.
В следующей секции разберем это более детально.
ПРОБЛЕМЫ С ПЛАГИНАМИ ИЛИ РЕСУРСАМИ
Убедитесь что plugins.cfg и resources.cfg находятся в том же каталоге что и собранные бинарники.
Plugins.cfg указывает огру доступные библиотеки для рендеринга (Direct3D9, OpenGL).
Resources.cfg используется ExampleApplication и указывает пути на текстуры, меши и скрипты.
Оба этих файла текстовые, отредактируйте их и убедитесь что указанные в них пути ведут куда надо.
В противном случае окно с настройками Ogre не найдет библиотек для рендера или возникнет ошибка на экране или в Ogre.log, что выглядит примерно так:
В таком случае откройте файл resources.cfg и измените пути которые указывают на каталоги в папке Media поставляемую с оргом.
Заметим, что переменные окружения вроде $(SomeVariable) в путях невозможно использовать.
НЕВОЗМОЖНО ЗАПУСТИТЬ ПРИЛОЖЕНИЕ В Visual Studio или CodeBlocks
Если вы используете Visual Studio или Visual C++ для разработки, и у вас возникли проблемы с запуском приложения из IDE, проблема скорее всего в настройках дебаггера.
Если вы запустили приложение из среды разработки (нажав кнопку Run, или Start debugging) и получили сообщение о отсутствующих конфигурационных файлах (*.cfg), значит рабочий каталог не установлен.
Решение этой проблемы зависит от того, какую версию Visual C++ вы используете, поэтому четкого рецепта здесь нет, но основные шаги должны быть теми же самыми.
Правый клик по вашему проекту в "solution explorer", (не по самому пункту "solution") и выбираем "properties".
Где то в свойствах конфигурации должна быть опция "Debugging".
Там выбираем поле "Working directory"
Там указываем расположение исполняемых файлов вашего проекта.
Если вы не представляете, что писать в эту директорию, попробуйте скопировать поле "Command", которое также должно быть в меню options дебагера.
Для примера, в Visual C++ 2003, поле "Command" должно содержать что то вроде "..\..\bin\$(ConfigurationName)\$(TargetFileName)".
Для поля "Working Directory" мы копируем поле "Command" удалив $(TargetFileName).
Таким образом в "Working Directory" будет "..\..\bin\$(ConfigurationName)".
Содержимое этого поля зависит от того какую версию Visual C++ вы используете, а также от того чем вы собираете ваше приложение, так что перед этим обязательно проверьте что содержится в поле "Command".
Проверьте что вы изменили "Working Directory" для обоих конфигураций, как Release, так и Debug.
В Visual C++ 2005 нужные поля вероятно будут располагаться немного по дргугому.
Для начала попробуйте указать в этом поле каталог "..\..\bin\$(ConfigurationName)", если приложение все еще не запускается - поэкспериментируйте или попробуйте спросить совета на форумах посвященных огру.
Если вы используете Code::Blocks, тогда вам необходимо сделать то же самое, правый клик по вашему проекту, выбираем "Properties...", переходим на вкладку "Build targets", и изменяем содержимое поля "Execution working dir:" указывая в нем тот же каталог в который помещаются исполняемые файлы (см. поле Output filename).
Причина по которой мы делаем это - Ogre ожидает что некоторые файлы будут находится в том же каталоге что и исполняемые, и без настройки рабочего каталога (working directory) на каталог в котором находятся эти файлы приложение не запустится.
Итак вы запустили ваше приложение, теперь удалим весь код внутри функции createScene() оставив саму функцию.
Мы будем писать код внутри этой функции и давать объяснение каждой строке нашего кода.
КАК OGRE РАБОТАЕТ
Довольно объемный раздел. Мы начнем со SceneManager и пройдем до Entities и SceneNodes
Эти три класса основные строительные блоки Ogre.
ОСНОВЫ SCENEMANAGER
Все что вы видите в окне вашего приложения, управляется SceneManager (примерно так).
Когда вы добавляете объект к сцене, SceneManager берет на себя управление его позиционированием.
Когда вы создаете объект Camera чтобы видеть сцену (в следующих туториалах мы рассмотрим это), то за ними опять же следит SceneManager.
Когда вы создаете объекты Plane, Billboards, Lights и все остальное, то SceneManager также берет на себя управление их положением и позиционированием.
Есть несколько типов SceneManager.
Есть SceneManager предназначенный для отрисовки ландшафта (Terrain), есть для отрисовки BSP Maps и так далее.
Вы можете увидеть несколько типов SceneManager перечисленных здесь.
По мере прохождения туториала мы рассмотрим это более подробно.
ОСНОВЫ ENTITY
Entity (сущность) это один из типов объектов которые вы можете добавить к сцене.
Entity представляет собой 3D объекты.
Робот будет объектом класса Entity, рыба, ландшафт по которому перемещаются ваши персонажи - все это Entity (разве что ландшафт представляет собой очень большой Entity)
Источники света, источники частиц, камеры объектами Entity не являются.
Следует упомянуть одну вещь об Ogre, он разделяет сами объекты и их расположение и ориентацию.
Это означает то что к сцене объект Entity напрямую добавить невозможно.
Вместо этого, мы можем добавить Entity к объекту SceneNode, которая уже будет содержать информацию о его положении.
ОСНОВНЫЕ ПОНЯТИЯ SCENENODE
Как уже упоминалось выше, SceneNode содержит информацию о положении и ориентации объектов которые к ней присоединены.
Когда вы создаете объект Entity, он не будет отрендерен пока вы не прикрепите его к SceneNode.
SceneNode сам по себе не отображается на экране.
Только в том случае если вы создадите SceneNode и прикрепите к нему Entity (или другой объект) вы имеете шанс реально что то увидеть.
К SceneNode можно присоединить любое количество объектов.
Давайте предположим что у вас есть персонаж который ходит по кругу, и вы хотите чтобы он освещал окружающее пространство.
Мы можем сделать это следующим образом: Создадим объект SceneNode, потом создадим Entity которое будет представлять собой нашего персонажа и прикрепим его к SceneNode.
Затем мы создадим источник света (Light) и прикрепим его к той же SceneNode что и персонажа.
SceneNode также может быть прикреплена к другим SceneNodes что позволяет создавать иерархию нод.
В следуюещей статье мы расскажем больше об использовании SceneNode.
Один важный момент касающийся SceneNodes, это то что позиция SceneNode всегда относительна к ее предку, и каждый SceneManager содержит корневую ноду к которой прикрепляются дочерние SceneNode.
ВАШЕ ПЕРВОЕ ПРИЛОЖЕНИЕ НА OGRE
Вернемся к коду который мы создали ранее.
Найдем метод TutorialApplication::createScene.
Как мы упоминали ранее, в этом туторе мы будем изменять только код содержащийся в этой функции.
Первое что мы сделаем, это установим уровень освещенности самой сцены (ambient light) чтобы видеть результаты нашего труда.
Для этого вызываем функцию setAmbientLight и указываем нужный нам цвет.
Конструктор ColorValue принимает три параметра (RGB) для красного, зеленого и голубого составляющего цвета, в промежутке от 0 до 1.
Добавим этот кусок кода к createScene:
Следующее что мы сделаем, это создадим Entity (сущность).
Вызываем метод createEntity объекта SceneManager.
У вас наверняка возникли некоторые вопросы.
Первый откуда взялся mSceneMgr, и что за параметры мы передаем в функцию.
Переменная mSceneMgr является ссылкой на текущий объект класса SceneManager.
Первый параметр функции createEntity это название объекта который мы созадем.
Все экземпляры Entity должны иметь уникальное название.
При попытке создать два объекта с одинаковым именем, возникнет ошибка.
Параметр "ogrehead.mesh" указывает меш (проще говоря сохраненную 3d модель) которая будет использована при создании объекта).
В нашем случае "ogrehead.mesh" поставляется вместе с Ogre SDK.
Загрузка ресурсов будет описана в следующих статьях.
Сейчас мы используем для загрузки ресурсов класс BaseApplication.
Итак объект Entity мы создали, теперь нам необходимо создать объект SceneNode к которой мы прикрепим наш Entity.
Каждый SceneManager имеет корневую SceneNode, мы создадим дочернюю к нему SceneNode.
Это длинное выражение сперва вызывает функцию getRootSceneNode текущего объекта SceneManager.
Затем он вызывает функцию createChildSceneNode корневой SceneNode.
Параметр передаваемый функции createChildSceneNode это имя SceneNode которую мы создаем.
Как и Entity, два экземпляра SceneNode не могут иметь одинаковые имена.
И наконец мы присоединяем Entity к SceneNode для того чтобы указать голове огра место где оно будет рендерится.
Все готово, скомпилируйте и запустите ваше приложение.
Вы должны увидеть голову огра на вашем экране.
КООРДИНАТЫ И ВЕКТОРА
Перед тем как мы пойдем дальше, нужно объяснить систему оконных координат и классы Ogre Vector.
Ogre (подобно многим графическим движкам) использует координатные оси X и Z для горизонтальных плоскостей, и Y для вертикальной координаты.
Как вы сейчас видите на мониторе, ось X проходит слева направо, с правой стороны положительная часть оси.
Ось Y проходит снизу вверх, сверху положительная часть оси.
Ось Z берет свое начало глубоко в недрах монитора и проходит сквозь вашу переносицу )
Голова огра сейчас обращена прямо к нам по направлению оси Z.
Это складывается из свойств меша и направления и позиции камеры.
Камеры рассматривается позже в этом руководстве, но сейчас стоит понимать, что голова огра находится в начале координат (0,0,0) и мы видим ее спереди разными способами.
Ориентация головы была задана когда она создавалась в пакете 3D моделирования.
Ogre не может предполагать как ориентирована ваша модель.
Каждый меш который мы загружаем может быть ориентирован по разному.
Информацию о расположении и ориентация Ogre хранит в классах Vector.
Векторы определены в трех классах для 2 (Vector2), 3 (Vector3) и 4 (Vector4) измерений, из них чаще всего используется Vector3.
Если вы незнакомы с векторами, стоит освежить их в памяти прежде делать что нибудь серьезное.
Вся эта векторная математика будет довольно серьезным подспорьем, когда вы перейдете к более сложным приложениям.
ДОБАВЛЯЕМ ЕЩЕ ОДИН ОБЪЕКТ
Поняв как работает система координат, вернемся к нашему коду.
Ни в одной из тех трех строк что мы написали, нигде не указано точное расположение головы огра.
Большинство функций в Ogre используют для этого значения по умолчанию.
Для примера функция SceneNode::createChildSceneNode имеет три параметра: название SceneNode, ее позиция и дефолтовую ориентацию.
Позиция, как вы уже убедились, имеет координаты (0,0,0).
Давайте создадим еще один объект SceneNode, но сейчас укажем ее начальное расположение.
Это должно быть уже знакомо. Мы сделали то же самое что и в прошлый раз, кроме двух вещей.
Первая - мы назвали SceneNode и Entity немного по другому.
Вторая - мы указали начальное положение смещенное на 100 единиц по оси X относительно корневой SceneNode (напомню что координаты SceneNode заданы относительно их предков).
Скомпилируйте и запустите программу. Сейчас на сцене две головы огра расположенные бок о бок.
Можно сдвинутся немного назад используя клавишу 's', или стрелку вниз чтобы их увидеть.
РАССМОТРИМ ENTITY ПОДРОБНЕЕ
Класс Entity довольно обширный, и мы не сможем затронуть все аспекты в рамках статьи, но расскажем достаточно для начала.
В классе Entity есть несколько функций которые можно использовать прямо сейчас.
Первая - Entity::setVisible и Entity::isVisible.
Мы можем скрыть или включить отображение головы на экране просто вызвав эту функцию.
Если необходимо скрыть голову, но позже отобразить ее, тогда имеет смысл воспользоваться этой функцией, вместо того чтобы удалять и создавать ее заново.
Обратите внимание, что во все это не нужно "впутывать" Entities.
В память загружается только одна копия любого объекта или текстуры, поэтому уменьшая количество Entity вы не сэкономите много памяти.
Единственное на чем вы сэкономите в таком случае, это отсутствие затрат на создание и удаление объекта Entity, а они относительно малы.
Функция getName возвращает название объекта Entity, функция getParentSceneNode возвращает SceneNode к которой присоединен объект Entity.
РАССМОТРИМ SCENENODES ПОДРОБНЕЕ
Класс SceneNode позволяет довольно много, но мы рассмотрим наиболее используемые.
Для того чтобы получить или указать текущее расположение SceneNode есть функции getPosition и setPosition (они возвращают координаты относительно родительской SceneNode).
Метод translate позволяет передвинуть объект относительно его текущей позиции.
Кроме позиционирования SceneNode позволяет вращать и масштабировать объект.
Для масштабирования применяется функция scale.
Для вращения относительно каждой из координатных осей используются функции pitch, yaw и roll.
Чтобы вернуть дефолтовую ориентацию объекта служит функция resetOrientation.
Вы также можете использовать функции setOrientation, getOrientation и rotate для более гибкого вращения.
Тему квантерионов (Quaternions) мы возможно поднимем в более поздних статьях.
Вы уже имели дело с функцией attachObject.
Эти связанные функции также будут довольно полезны, если вы ищете способ управлять объектами которые присоединены к SceneNode: numAttachedObjects, getAttachedObject (есть несколько версий этой функции), detachObject (тоже несколько версий), detachAllObjects.
Также существует целый набор функций для работы с предком и потомками SceneNode.
Поскольку все позиционирование и перемещение выполнятся относительно предка SceneNode, мы можем заставить две SceneNode двигаться вместе.
Итак у нас получился такой код:
Если мы изменим 6 линию с этой: на эту:
Таким образом мы укажем что headNode2 является потомком headNode.
При перемещении headNode, headNode2 также будет перемещатся, но передвигая headNode2 - headNode останется на месте.
Для примера этот код будет перемещать только headNode2:
Этот код заставит перемещаться headNode, но учитывая то что headNode2 является потомком headNode, headNode2 будет перемещаться вместе с headNode.
Если у вас возникли проблемы с пониманием этого, давайте разберем простой пример. Мы начнем с корневой SceneNode и пойдем вниз по иерархии нод.
Давайте предположим (возьмем наш случай), мы начнем с headNode (0, 0, 0) и переместим ее (translate) на (25, 0, 0). Таким образом новая позиция headNode станет (25, 0, 0) относительно его предка.
Позиция headNode2 (100, 0, 0) мы перемещаем ее (translate) на (10, 0, 10). Итого новая позиция headNode2 станет (110, 0, 10) относительно его предка (headNode).
Теперь представим где будут находится эти ноды.
Начнем с корневой SceneNode. Ее позиция всегда (0, 0, 0).
Сейчас положение headNode = (root + headNode): (0, 0, 0) + (25, 0, 0) = (25, 0, 0). Не удивительно.
headNode2 является потомком headNode, таким образом ее позиция будет (root + headNode + headNode2): (0, 0, 0) + (25, 0, 0) + (110, 0, 10) = (135, 0, 10).
Это всего лишь пример того как наследуются позиции SceneNode.
Впрочем необходимость вычислять абсолютные позиции нод возникает довольно редко.
Под конец заметим, что вы можете получить как объекты SceneNode так и Entity используя методы getSceneNode и getEntity объекта SceneManager. Следовательно нет необходимости хранить на них ссылки.
Имеет смысл сохранять ссылки только на те объекты, которыми вы часто пользуетесь.
Дополнительные рекомендации
К этому моменту у вас должно сложится общее понимание Entities, SceneNodes и SceneManager.
Мы предлагаем начать с кода, расположенного выше, и добавлять и удалять головы огра со сцены.
Как только вы сделаете это, удалите все содержимое функции createScene и давайте поэкспериментируем со следующими фрагментами кода.
МАСШТАБИРОВАНИЕ (SCALE)
Чтобы масштабировать модели, воспользуемся методом SceneNode->scale.
Пропробуйте изменять значения которые мы передаем в функцию scale, и увидеть как изменяется содержимое сцены.
ВРАЩЕНИЕ
Вы можете вращать объект используя функции yaw, pitch, и roll передавая им в качестве параметров угол вращения в градусах или радианах. В огре это объекты Degree и Radian соответственно.
pitch это вращение вокруг оси X, yaw вращает объект вокруг оси Y а roll - вокруг оси Z.
Используйте правую руку для удобства: поместите ваш палец в направлении оси, сожмите оставшиеся пальцы.
Направление согнутой части руки - положительное вращение вокруг оси.
Попробуем изменить значение объекта Degree которое мы передаем и объединим несколько трансформаций.
В Microsoft Visual Studio 2010 может возникнуть ошибка "'Degree' is an undeclared identifier."
Это может быть исправлено с помощью вызова функции Ogre::Degree, позволяя при компилировать использовать вращение.
СРЕДА РАЗРАБОТКИ OGRE
Большинство файлов (.dll и .cfg) на которые мы ссылаемся в этом туториале можно найти в каталоге OgreSDK/bin как release так и debug версию.
Ваши программы в режиме Debug должны использовать файлы из каталога debug OgreSDK, в режиме Release - файлы из каталоге release соответственно.
В этой части туториала рассматривается в основном платформа windows.
Для Linux эта же информация применима по большей части, но к примеру библиотеки будут иметь расширение .so и могут находится в других каталогах. Также некоторые вещи могут немного отличатся.
Со всеми возникающими вопросами идем на форум.
Библиотеки и плагины
Получив представление об окружении Ogre, стоит объяснить как библиотеки Ogre работают в целом.
Ogre разделен на 3 большие группы библиотек: Основная библиотека, плагины и либы от сторонних производителей.
ОСНОВНАЯ БИБЛИОТЕКА
Основная группа библиотек состоит из самой библиотеки и библиотек которые она использует.
Основная библиотека Ogre - OgreMain.dll
Эта dll требует некоторые другие библиотеки, такие как cg.dll.
Эти библиотеки использует каждое приложение Ogre без исключений.
ПЛАГИНЫ
Вторая группа библиотек это плагины.
Довольно большая часть функциональности Ogre вынесена в подключаемые библиотеки и может быть включена или выключена в зависимости от потребности.
Базовые плагины которые поставляются вместе с Ogre имеют в названии файла префикс "Plugin_".
Также вы можете создавать собственные плагины если у вас есть в этом необходимость, но в этом туториале этой темы мы не коснемся.
Для системы рендеринга (OpenGL, DirectX) Ogre также использует плагины.
Эти плагины имеют префикс "RenderSystem_".
Эти плагины существуют для того, чтобы вы могли добавлять или удалять системы редеринга из вашего приложения.
Особенно полезно это если вы пишете шейдеры или что нибудь зависимое от (для примера) OpenGL и вам необходимо запретить возможность запускать приложение под DirectX. В таком случае можно просто удалить соответствующий плагин RenderSystem.
В дополнение, если вашей целью является разработка под нестандартную платформу, вы можете написать собственный плагин для RenderSystem, но в нашем туториале мы этого не коснемся.
В следующей секции будет рассказано как удалить плагины.
БИБЛИОТЕКИ ОТ ТРЕТЬИХ ЛИЦ
Третья группа библиотек это библиотеки от сторонних производителей.
Ogre сам по себе является просто библиотекой для рендеринга.
Он не занимается отрисовкой пользовательского интерфейса, обработкой сообщений от мыши и клавиатуры, обработкой физики и всем таким.
Для всего этого вам необходимо использовать другие библиотеки.
Демонстрационные приложения Ogre и SDK включают в себя некоторые такие библиотеки.
Обработку сообщений клавиатуры и мыши берет на себя OIS (система ввода). Эта библиотека содержится в файле OIS.dll.
Cg (C for Graphics) используемая CgProgramManager находится в Cg.dll.
Также существуют другие библиотеки (не включенные в SDK) которые расширяют функциональность Ogre (такие как звук и обработка физики) по которым вы можете найти информацию на вики и форумах.
ПОДВЕДЕМ ИТОГИ
Моралью этой истории является то, что при тестировании приложения локально, не стоит удалять ничего, чтобы проверить как ваше приложение работает со всем этим.
Когда вы будете готовы распространять свои приложения, вам необходимо собрать его в Release режиме и включить в дистрибутив Release библиотеки которые использует ваша программа.
Если ваше приложение не использует Cg ProgramManager но использует OIS, тогда нет нужды включать в дистрибутив библиотеки от Cg и CgProgramManager, но о библиотеке OIS необходимо позаботится.
ФАЙЛЫ КОНФИГУРАЦИИ
Ogre использует при запуске несколько конфигурационных файлов.
Они контролируют какие плагины будут какие плагины будут загружены, где находятся ресурсы приложения и все такое.
Мы быстро пробежимся по каждому из таких конфигурационных файлов и объясним что они делают.
Как обычно, если у вас возникают дополнительные вопросы, добро пожаловать на форум.
Файл plugins.cfg содержит ссылки на плагины которые использует приложение.
Чтобы добавить или удалить плагин из приложения просто отредактируйте этот файл.
Удалить плагин можно убрав из этого файла соответствующую строку или закомментировав ее добавив # в начале строки.
Включить плагин можно добавив строку вида "Plugin=[имя_плагина]".
Мы не дописываем .dll в конце имени плагина.
Префиксы "RenderSystem_" или "Plugin_" мы тоже не указываем.
Вы также можете указать каталог где находятся плагины изменив параметр "PluginFolder".
Можно указывать как абсолютные так и относительные пути, но переменные окружения типа $(SomeVariable) использовать не получится.
Файл resources.cfg содержит список каталогов в которых Ogre ищет ресурсы.
Ресурсы включают в себя скрипты, 3d объекты, текстуры и все такое.
В этом файле аналогично можно указывать как абсолютные так и относительные пути, но нельзя переменные окружения типа $(SomeVariable).
Заметим что Ogre не ищет ресурсы в подкаталогах, так что придется прописать путь к каждой из папок.
К примеру если у вас есть иерархия каталогов вроде "res\meshes" и "res\meshes\small", в ресурсный файл придется добавить две строки содержащие пути к обоим каталогам.
В файле media.cfg содержится более детальная информация о ресурсах.
Не думаю что сейчас у вас будет необходимость изменять этот файл, так что мы опустим детали.
Больше информации ищите на форумах посвященных Ogre.
ogre.cfg это сгененрированый Ogre файл конфигурации экрана.
Этот файл хранит ваши индивидуальные настройки графики.
Этот файл не стоит передавать с вашей программой, у других возможно будут совсем другие настройки.
Кстати не стоит редактировать его руками, оставьте эту задачу окну конфигурации Ogre.
quake3settings.cfg используется BSPSceneManager.
Сейчас мы не используем этот файл, поэтому его описание мы пропустим.
Этот файл тоже нет смысла распространять если вы не используете BSPSceneManager, но если даже используете, то его содержимое может полностью различатся в зависимости от требований вашего приложения.
Это были все конфигурационные файлы, которые используются непосредственно огром.
Для запуска Ogre необходимы файлы "plugins.cfg", "resources.cfg", и "media.cfg".
В следующих туториалах мы расскажем больше о том как изменить их расположение и какие дополнительные возможности они предоставляют.
ЗАКЛЮЧЕНИЕ
На этом моменте у вас уже должно сложится базовое представление о классах SceneManager, SceneNode и Entity.
Вы не должны быть знакомы со всем функциями, которых мы касались.
Так как это базовые объекты и мы будем использовать их довольно часто.
В следующих туториалах вы получите о них более полное представление.
Вы также познакомились с тем как настраивать Ogre в вашем проекте.
Переведено на Нотабеноиде
http://notabenoid.org/book/19615/64000
Переводчики: alexx_x, proVIDec, wuffur
Настройки
Готово:
