Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 3: Terrain, Sky, and Fog
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
ВВЕДЕНИЕ alexx_x 09.07.11 в 04:53 |
|
|
В этом руководстве мы объясним как работать с ландшафтом (terrain), небом (sky) и туманом (fog) в вашем приложении. alexx_x 09.07.11 в 04:54 В этом уроке мы рассмотрим, как работать с ландшафтом, небом и туманом в ваших приложениях Ogre. Mingun 23.07.11 в 16:10 |
||
|
После этой статьи вы поймете разницу между Skybox, Skyplane и Skydome, и научитесь пользоваться ими. alexx_x 09.07.11 в 04:55 |
||
|
Также вы узнаете разницу между типами туманов и сможете их использовать. alexx_x 09.07.11 в 04:56 Также вы узнаете разницу между различными типами тумана и способами их использования. Mingun 17.10.11 в 14:47 |
||
|
ДЛЯ НАЧАЛА proVIDec 08.07.11 в 04:25 С ЧЕГО НАЧАТЬ Mingun 23.07.11 в 16:09 |
||
|
В предыдущих версии Ogre, вы должны были использовать TerrainScene Manager если вы хотели добавить поддержку ландшафта в ваше приложение. alexx_x 09.07.11 в 04:57 В предыдущих версиях Ogre вы должны были использовать <b>менеджер сцены Terrain</b>, если вы хотели добавить поддержку ландшафта в ваши приложения Ogre. Mingun 17.10.11 в 14:52 |
+1 | |
|
Больше в этом нет необходимости благодаря новой системе ландшафта (terrain system) в Ogre. alexx_x 09.07.11 в 04:59 Теперь в этом нет необходимости, поскольку появилась новая <b>система ландшафта Ogre</b>. Mingun 23.07.11 в 16:56 |
||
|
Начиная с Ogre 1.7 (Cthugha) нам стали доступными три компонента: Terrain, Paging и Property. alexx_x 09.07.11 в 05:00 |
+6 | |
|
Ogre Terrain использует компонент Paging для динамической подгрузки ландшафта. alexx_x 11.07.11 в 05:28 Компоненты Terrain и Paging связаны между собой, Ogre Terrain может использовать компонент Paging – да, вы угадали – для страничной подкачки. Mingun 17.10.11 в 14:58 |
+5 | |
|
Это руководство описывает компонент Terrain, описание Paging будет в следующих статьях. alexx_x 11.07.11 в 05:31 Этот урок научит основам использования компонента Ogre Terrain, подкачку оставим для последующих уроков. Mingun 17.10.11 в 15:01 |
||
|
КОД alexx_x 11.07.11 в 05:31 |
||
|
Измените заголовочный файл вашего класса BaseTurtorial3 таким образом: alexx_x 11.07.11 в 05:31 Приведите заголовочный файл вашего класса BasicTutorial3 в такой вид: Mingun 17.10.11 в 15:02 |
||
|
Убедитесь что ваш .cpp файл выглядит так (до функции main()): alexx_x 11.07.11 в 05:32 |
||
|
ЛИНКОВЩИК alexx_x 11.07.11 в 05:32 ПАРАМЕТРЫ ЛИНКОВЩИКА Mingun 23.07.11 в 16:59 |
||
|
Для того чтобы мы могли скомпилировать наш код, вам необходимо прилинковать библиотеку компонента Terrain. alexx_x 11.07.11 в 05:34 |
||
|
Добавьте ссылку на библиотеку 'OgreTerrain.lib' для Release конфигурации вашего проекта, и 'OgreTerrain_d.lib' для Debug версии соответственно. (В Code::Blocks это правый клик по проекту -> Build options -> вкладка Linker settings -> кнопка Add). alexx_x 11.07.11 в 05:36 Под Windows добавьте библиотеки 'OgreTerrain.lib' для релизной и 'OgreTerrain_d.lib' для отладочной версии вашего проекта в список дополнительных зависимостей линковщика. Mingun 17.10.11 в 15:10 |
||
|
Правый клик по проекту BasicTurtorial в solution window. alexx_x 11.07.11 в 05:37 Чтобы сделать это, щелкните правой кнопкой мыши по проекту BasicTutorial3 в окне обозревателя решений (Solution Window). Mingun 23.07.11 в 17:01 |
||
|
Далее свойства, появится окно Configuration manager, выбираем конфигурацию из выпадающего меню слева вверху, затем Configuration properties -> Linker -> Input и добавим ссылку на файл. alexx_x 11.07.11 в 05:39 Выберите пункт Свойства (Properties), появится окно Configuration manager, выберите конфигурацию из выпадающего меню слева вверху, затем перейдите по пути Configuration properties -> Linker -> Input и добавьте ссылку на файл. Mingun 23.07.11 в 17:03 |
||
|
Для CMake, добавим строку кода после "find_package(OGRE REQUIRED)" в вашем файле CMakeLists.txt: alexx_x 11.07.11 в 05:40 Если вы используете систему сборки CMake, добавьте следующий код в файл CMakeLists.txt после строки "find_package(OGRE REQUIRED)", чтобы система сборки CMake знала о зависимости: Mingun 23.07.11 в 17:09 |
||
|
Для autotools, следуйте инструкции в "Setting Up An Application" которая идет вместе с autotools для того чтобы создать ваш файл configure.ac с компонентом Terrain. alexx_x 11.07.11 в 05:41 Если вы используете систему сборки autotools, следуйте инструкциям в документе "Настройка приложения при помощи autotools" ("Setting Up An Application with the autotools") для создания файла конфигурации configure.ac, включающего компонент Terrain. Mingun 23.07.11 в 17:14 |
||
|
Файл должен выглядеть так: alexx_x 11.07.11 в 05:42 После выполнения этих инструкций, файл должен выглядеть как-то так: Mingun 23.07.11 в 17:15 |
||
|
ЛАНДШАФТ alexx_x 11.07.11 в 05:42 |
||
|
Проект, которые мы будем делать в этой части руководства содержит два основных компонента: классы TerrainGroup и Terrain. wuffur 11.07.11 в 07:41 Проект, который мы будем делать в этом уроке, использует два главных класса: <b>TerrainGroup</b> и <b>Terrain</b>. Mingun 23.07.11 в 17:20 |
+2 | |
|
Существует также класс TerrainGlobalOptions, который содержит опции, но они используются как вспомогательный компонент. wuffur 11.07.11 в 07:48 Еще есть класс <b>TerrainGlobalOptions</b>, но он используется как вспомогательный компонент. Mingun 23.07.11 в 17:22 |
||
|
Вы можете представить класс TerrainGroup, как среднюю зону как поляна, луг или игровая площадка. wuffur 11.07.11 в 07:49 Класс TerrainGroup представляет собой небольшой кусок земли типа поляны, луга или игрового поля. Mingun 24.07.11 в 06:53 |
||
|
Класс TerrainGroup может собирать множество частей Ландшафта внутри себя. Его подраздел используется для LOD рендеринга, в котором используется расстояния от камеры до каждой из частей Ландшафта. wuffur 11.07.11 в 07:52 Внутри себя он может содержать несколько частей ландшафта, представленных классом Terrain. Это подразделение используется для отрисовки LOD'ов в зависимости от расстояния от камеры до каждой части ландшафта. Mingun 24.07.11 в 06:55 |
||
|
Terrain состоит из своеобразной плитки (полигонов) с натянутой на них текстурой. alexx_x 11.07.11 в 13:11 В свою очередь Terrain состоит из тайлов с натянутой на них текстурой. wuffur 12.07.11 в 10:11 В свою очередь, объект Terrain состоит из плитки полигонов (тайлов) с привязанным к ней материалом. Mingun 24.07.11 в 06:58 |
+1 | |
|
Мы будем использовать TerrainGroup без включения пейджинга; Системы ландшафта использующие пейджинг будут описаны в продвинутых руководствах. wuffur 11.07.11 в 08:26 Мы будем использовать один объект TerrainGroup без использования страничной подкачки; использование страничного ландшафта будет описано в продвинутых уроках. Mingun 24.07.11 в 07:00 |
||
|
До тех пор пока мы начнем рендерить Ландшафт, мы должны установить все необходимые параметры в Системе Ландшафта Ogre. wuffur 11.07.11 в 08:27 Перед собственно отрисовкой ландшафта мы должны установить все необходимые параметры <b>системы ландшафта Ogre</b>. Mingun 24.07.11 в 07:02 |
||
|
РАБОТА С КАМЕРОЙ wuffur 11.07.11 в 08:28 |
||
|
Во-первых давайте изменим наш объект камера для нашего ландшафта. wuffur 11.07.11 в 08:28 Во-первых, давайте изменим наш объект камеры для лучшей визуализации ландшафта. Mingun 24.07.11 в 07:09 |
||
|
Добавьте этот код в функцию createScene класса BasicTutorial3 (BasicTutorial3::createScene) wuffur 11.07.11 в 08:29 |
||
|
Помимо базовой настройки позиции и ориентации камеры, этот код устанавливает ближнюю (near) и дальнюю (far) дистанцию отсечения. alexx_x 11.07.11 в 13:12 Помимо установки позиции и ориентации камеры, этот код также устанавливает расстояния до ближней и дальней плоскостей отсечения. Mingun 24.07.11 в 07:10 |
||
|
Ландшафты обычно имеют большой размер, и мы хотим чтобы наша камера могла видеть достаточно далеко. alexx_x 11.07.11 в 13:14 Ландшафт часто имеет достаточно большой размер, и мы хотим, чтобы наша камера могла видеть достаточно далеко. Mingun 17.10.11 в 15:28 |
||
|
Если система рендеринга поддерживает это, сделаем это расстояние бесконечным. alexx_x 11.07.11 в 13:14 Если система визуализации поддерживает такую возможность, сделаем расстояние до дальней плоскости отсечения бесконечным. Mingun 24.07.11 в 07:16 |
||
|
НАСТРОЙКА НАПРАВЛЕННОГО И ОКРУЖАЮЩЕГО ОСВЕЩЕНИЯ alexx_x 11.07.11 в 13:15 |
||
|
Компонент Terrain использует направленный свет для расчета собственной карты освещения, поэтому помещаем на сцену источник такого освещения: alexx_x 11.07.11 в 13:17 |
+2 | |
|
Также устанавливаем некоторый уровень окружающего освещения чтобы сделать переходы между границами света и тени более размытыми. alexx_x 11.07.11 в 13:18 |
||
|
НАСТРАИВАЕМ НАШ ЛАНДШАФТ alexx_x 11.07.11 в 13:18 |
||
|
Сперва мы создадим новый набор глобальных свойств для объекта Terrain. Для этой цели используется класс TerrainGlobalOptions. alexx_x 11.07.11 в 13:19 |
||
|
Это класс просто содержащий настройки по умолчанию для всех объектов ландшафта которые мы будем создавать. Он предоставляет несколько функций которые мы можем использовать чтобы записать или получать эти значения. alexx_x 11.07.11 в 13:22 Этот класс просто содержит настройки по умолчанию для всех объектов ландшафта, которые мы будем создавать, а также предоставляет функции для получения и установки этих настроек. Mingun 24.07.11 в 07:26 |
||
|
Также есть локальная для каждой TerrainGroup настройка "DefaultImportSettings", которую мы рассмотрим далее. alexx_x 11.07.11 в 13:23 Также для каждого объекта TerrainGroup существует локальная настройка DefaultImportSettings, которую мы рассмотрим далее. Mingun 24.07.11 в 07:28 |
||
|
Затем мы создадим наш объект TerrainGroup, класс который обеспечивает управление сеткой ландшафта, но не выполняет динамической загрузки. (Которую берет на себя компонент Paging. Его мы рассмотрим в продвинутых руководствах). alexx_x 11.07.11 в 13:25 Затем создадим объект TerrainGroup – вспомогательный класс, обеспечивающий управление сеткой ландшафта, но не выполняющий динамической подгрузки (которую берет на себя компонент Paging, но его мы рассмотрим в продвинутых уроках). Mingun 24.07.11 в 07:32 |
||
|
Конструктор TerrainGroup в качестве параметра принимает ссылку на объект SceneManager, настройку выравнивания, размер и размер в мировых координатах. alexx_x 11.07.11 в 13:26 Конструктор TerrainGroup в качестве параметров принимает ссылку на экземпляр SceneManager, параметр выравнивания (в какой плоскости будет находиться ландшафт), количество вершин по стороне одного куска ландшафта и размер этого куска в мировых координатах. Mingun 24.07.11 в 07:50 |
+1 | |
|
Затем мы указываем TerrainGroup в какой файл будет сохранен ландшафт, используя функцию setFilenameConvention. alexx_x 11.07.11 в 13:27 Затем мы указываем TerrainGroup, какое имя мы желаем использовать при сохранении нашего ландшафта, используя функцию setFilenameConvention. Mingun 17.10.11 в 15:37 |
||
|
И напоследок указываем начальные координаты terrain group. alexx_x 11.07.11 в 13:28 И напоследок указываем начало координат внутри данной группы ландшафта. Mingun 24.07.11 в 07:39 |
+2 | |
|
Пришло время настройки нашего ландшафта: alexx_x 11.07.11 в 13:29 |
||
|
Мы познакомимся в функцией configureTerrainDefaults позже. alexx_x 11.07.11 в 13:29 С функцией configureTerrainDefaults мы познакомимся позже. Mingun 24.07.11 в 07:43 |
||
|
Обратите внимание что функция принимает в качестве параметра наш направленный свет. alexx_x 11.07.11 в 13:30 Обратите внимание, что в качестве параметра она принимает наш источник направленного освещения. Mingun 24.07.11 в 07:44 |
||
|
Затем мы определяем наш ландшафт и приказываем TerrainGroup загрузить его. alexx_x 11.07.11 в 13:30 Теперь определяем все куски ландшафта и приказываем TerrainGroup загрузить их: Mingun 24.07.11 в 07:55 |
+1 |
