Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 3: Terrain, Sky, and Fog

← →
Английский оригинал Перевод на русский

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

ВВЕДЕНИЕ

alexx_x 09.07.11 в 04:53

1

В этом руководстве мы объясним как работать с ландшафтом (terrain), небом (sky) и туманом (fog) в вашем приложении.

alexx_x 09.07.11 в 04:54

0

В этом уроке мы рассмотрим, как работать с ландшафтом, небом и туманом в ваших приложениях Ogre.

Mingun 23.07.11 в 16:10

0

После этой статьи вы поймете разницу между Skybox, Skyplane и Skydome, и научитесь пользоваться ими.

alexx_x 09.07.11 в 04:55

1

Также вы узнаете разницу между типами туманов и сможете их использовать.

alexx_x 09.07.11 в 04:56

1

Также вы узнаете разницу между различными типами тумана и способами их использования.

Mingun 17.10.11 в 14:47

0

ДЛЯ НАЧАЛА

proVIDec 08.07.11 в 04:25

0

С ЧЕГО НАЧАТЬ

Mingun 23.07.11 в 16:09

0

В предыдущих версии Ogre, вы должны были использовать TerrainScene Manager если вы хотели добавить поддержку ландшафта в ваше приложение.

alexx_x 09.07.11 в 04:57

0

В предыдущих версиях Ogre вы должны были использовать <b>менеджер сцены Terrain</b>, если вы хотели добавить поддержку ландшафта в ваши приложения Ogre.

Mingun 17.10.11 в 14:52

0
+1

Больше в этом нет необходимости благодаря новой системе ландшафта (terrain system) в Ogre.

alexx_x 09.07.11 в 04:59

0

Теперь в этом нет необходимости, поскольку появилась новая <b>система ландшафта Ogre</b>.

Mingun 23.07.11 в 16:56

0

Начиная с Ogre 1.7 (Cthugha) нам стали доступными три компонента: Terrain, Paging и Property.

alexx_x 09.07.11 в 05:00

0
+6

Ogre Terrain использует компонент Paging для динамической подгрузки ландшафта.

alexx_x 11.07.11 в 05:28

1

Компоненты Terrain и Paging связаны между собой, Ogre Terrain может использовать компонент Paging – да, вы угадали – для страничной подкачки.

Mingun 17.10.11 в 14:58

0
+5

Это руководство описывает компонент Terrain, описание Paging будет в следующих статьях.

alexx_x 11.07.11 в 05:31

0

Этот урок научит основам использования компонента Ogre Terrain, подкачку оставим для последующих уроков.

Mingun 17.10.11 в 15:01

0

КОД

alexx_x 11.07.11 в 05:31

1

Измените заголовочный файл вашего класса BaseTurtorial3 таким образом:

alexx_x 11.07.11 в 05:31

1

Приведите заголовочный файл вашего класса BasicTutorial3 в такой вид:

Mingun 17.10.11 в 15:02

0

Убедитесь что ваш .cpp файл выглядит так (до функции main()):

alexx_x 11.07.11 в 05:32

1

ЛИНКОВЩИК

alexx_x 11.07.11 в 05:32

0

ПАРАМЕТРЫ ЛИНКОВЩИКА

Mingun 23.07.11 в 16:59

1

Для того чтобы мы могли скомпилировать наш код, вам необходимо прилинковать библиотеку компонента Terrain.

alexx_x 11.07.11 в 05:34

1

Добавьте ссылку на библиотеку 'OgreTerrain.lib' для Release конфигурации вашего проекта, и 'OgreTerrain_d.lib' для Debug версии соответственно. (В Code::Blocks это правый клик по проекту -> Build options -> вкладка Linker settings -> кнопка Add).

alexx_x 11.07.11 в 05:36

1

Под Windows добавьте библиотеки 'OgreTerrain.lib' для релизной и 'OgreTerrain_d.lib' для отладочной версии вашего проекта в список дополнительных зависимостей линковщика.

Mingun 17.10.11 в 15:10

0

Правый клик по проекту BasicTurtorial в solution window.

alexx_x 11.07.11 в 05:37

0

Чтобы сделать это, щелкните правой кнопкой мыши по проекту BasicTutorial3 в окне обозревателя решений (Solution Window).

Mingun 23.07.11 в 17:01

0

Далее свойства, появится окно Configuration manager, выбираем конфигурацию из выпадающего меню слева вверху, затем Configuration properties -> Linker -> Input и добавим ссылку на файл.

alexx_x 11.07.11 в 05:39

0

Выберите пункт Свойства (Properties), появится окно Configuration manager, выберите конфигурацию из выпадающего меню слева вверху, затем перейдите по пути Configuration properties -> Linker -> Input и добавьте ссылку на файл.

Mingun 23.07.11 в 17:03

0

Для CMake, добавим строку кода после "find_package(OGRE REQUIRED)" в вашем файле CMakeLists.txt:

alexx_x 11.07.11 в 05:40

0

Если вы используете систему сборки CMake, добавьте следующий код в файл CMakeLists.txt после строки "find_package(OGRE REQUIRED)", чтобы система сборки CMake знала о зависимости:

Mingun 23.07.11 в 17:09

0

Для autotools, следуйте инструкции в "Setting Up An Application" которая идет вместе с autotools для того чтобы создать ваш файл configure.ac с компонентом Terrain.

alexx_x 11.07.11 в 05:41

0

Если вы используете систему сборки autotools, следуйте инструкциям в документе "Настройка приложения при помощи autotools" ("Setting Up An Application with the autotools") для создания файла конфигурации configure.ac, включающего компонент Terrain.

Mingun 23.07.11 в 17:14

0

Файл должен выглядеть так:

alexx_x 11.07.11 в 05:42

0

После выполнения этих инструкций, файл должен выглядеть как-то так:

Mingun 23.07.11 в 17:15

0

ЛАНДШАФТ

alexx_x 11.07.11 в 05:42

1

Проект, которые мы будем делать в этой части руководства содержит два основных компонента: классы TerrainGroup и Terrain.

wuffur 11.07.11 в 07:41

1

Проект, который мы будем делать в этом уроке, использует два главных класса: <b>TerrainGroup</b> и <b>Terrain</b>.

Mingun 23.07.11 в 17:20

0
+2

Существует также класс TerrainGlobalOptions, который содержит опции, но они используются как вспомогательный компонент.

wuffur 11.07.11 в 07:48

0

Еще есть класс <b>TerrainGlobalOptions</b>, но он используется как вспомогательный компонент.

Mingun 23.07.11 в 17:22

0

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

wuffur 11.07.11 в 07:49

0

Класс TerrainGroup представляет собой небольшой кусок земли типа поляны, луга или игрового поля.

Mingun 24.07.11 в 06:53

0

Класс TerrainGroup может собирать множество частей Ландшафта внутри себя. Его подраздел используется для LOD рендеринга, в котором используется расстояния от камеры до каждой из частей Ландшафта.

wuffur 11.07.11 в 07:52

0

Внутри себя он может содержать несколько частей ландшафта, представленных классом Terrain. Это подразделение используется для отрисовки LOD'ов в зависимости от расстояния от камеры до каждой части ландшафта.

Mingun 24.07.11 в 06:55

0

Terrain состоит из своеобразной плитки (полигонов) с натянутой на них текстурой.

alexx_x 11.07.11 в 13:11

1

В свою очередь Terrain состоит из тайлов с натянутой на них текстурой.

wuffur 12.07.11 в 10:11

1

В свою очередь, объект Terrain состоит из плитки полигонов (тайлов) с привязанным к ней материалом.

Mingun 24.07.11 в 06:58

1
+1

Мы будем использовать TerrainGroup без включения пейджинга; Системы ландшафта использующие пейджинг будут описаны в продвинутых руководствах.

wuffur 11.07.11 в 08:26

0

Мы будем использовать один объект TerrainGroup без использования страничной подкачки; использование страничного ландшафта будет описано в продвинутых уроках.

Mingun 24.07.11 в 07:00

0

До тех пор пока мы начнем рендерить Ландшафт, мы должны установить все необходимые параметры в Системе Ландшафта Ogre.

wuffur 11.07.11 в 08:27

0

Перед собственно отрисовкой ландшафта мы должны установить все необходимые параметры <b>системы ландшафта Ogre</b>.

Mingun 24.07.11 в 07:02

0

РАБОТА С КАМЕРОЙ

wuffur 11.07.11 в 08:28

1

Во-первых давайте изменим наш объект камера для нашего ландшафта.

wuffur 11.07.11 в 08:28

0

Во-первых, давайте изменим наш объект камеры для лучшей визуализации ландшафта.

Mingun 24.07.11 в 07:09

0

Добавьте этот код в функцию createScene класса BasicTutorial3 (BasicTutorial3::createScene)

wuffur 11.07.11 в 08:29

1

Помимо базовой настройки позиции и ориентации камеры, этот код устанавливает ближнюю (near) и дальнюю (far) дистанцию отсечения.

alexx_x 11.07.11 в 13:12

0

Помимо установки позиции и ориентации камеры, этот код также устанавливает расстояния до ближней и дальней плоскостей отсечения.

Mingun 24.07.11 в 07:10

0

Ландшафты обычно имеют большой размер, и мы хотим чтобы наша камера могла видеть достаточно далеко.

alexx_x 11.07.11 в 13:14

1

Ландшафт часто имеет достаточно большой размер, и мы хотим, чтобы наша камера могла видеть достаточно далеко.

Mingun 17.10.11 в 15:28

0

Если система рендеринга поддерживает это, сделаем это расстояние бесконечным.

alexx_x 11.07.11 в 13:14

0

Если система визуализации поддерживает такую возможность, сделаем расстояние до дальней плоскости отсечения бесконечным.

Mingun 24.07.11 в 07:16

0

НАСТРОЙКА НАПРАВЛЕННОГО И ОКРУЖАЮЩЕГО ОСВЕЩЕНИЯ

alexx_x 11.07.11 в 13:15

1

Компонент Terrain использует направленный свет для расчета собственной карты освещения, поэтому помещаем на сцену источник такого освещения:

alexx_x 11.07.11 в 13:17

1
+2

Также устанавливаем некоторый уровень окружающего освещения чтобы сделать переходы между границами света и тени более размытыми.

alexx_x 11.07.11 в 13:18

1

НАСТРАИВАЕМ НАШ ЛАНДШАФТ

alexx_x 11.07.11 в 13:18

1

Сперва мы создадим новый набор глобальных свойств для объекта Terrain. Для этой цели используется класс TerrainGlobalOptions.

alexx_x 11.07.11 в 13:19

1

Это класс просто содержащий настройки по умолчанию для всех объектов ландшафта которые мы будем создавать. Он предоставляет несколько функций которые мы можем использовать чтобы записать или получать эти значения.

alexx_x 11.07.11 в 13:22

0

Этот класс просто содержит настройки по умолчанию для всех объектов ландшафта, которые мы будем создавать, а также предоставляет функции для получения и установки этих настроек.

Mingun 24.07.11 в 07:26

1

Также есть локальная для каждой TerrainGroup настройка "DefaultImportSettings", которую мы рассмотрим далее.

alexx_x 11.07.11 в 13:23

0

Также для каждого объекта TerrainGroup существует локальная настройка DefaultImportSettings, которую мы рассмотрим далее.

Mingun 24.07.11 в 07:28

1

Затем мы создадим наш объект TerrainGroup, класс который обеспечивает управление сеткой ландшафта, но не выполняет динамической загрузки. (Которую берет на себя компонент Paging. Его мы рассмотрим в продвинутых руководствах).

alexx_x 11.07.11 в 13:25

0

Затем создадим объект TerrainGroup &ndash; вспомогательный класс, обеспечивающий управление сеткой ландшафта, но не выполняющий динамической подгрузки (которую берет на себя компонент Paging, но его мы рассмотрим в продвинутых уроках).

Mingun 24.07.11 в 07:32

0

Конструктор TerrainGroup в качестве параметра принимает ссылку на объект SceneManager, настройку выравнивания, размер и размер в мировых координатах.

alexx_x 11.07.11 в 13:26

0

Конструктор TerrainGroup в качестве параметров принимает ссылку на экземпляр SceneManager, параметр выравнивания (в какой плоскости будет находиться ландшафт), количество вершин по стороне одного куска ландшафта и размер этого куска в мировых координатах.

Mingun 24.07.11 в 07:50

1
+1

Затем мы указываем TerrainGroup в какой файл будет сохранен ландшафт, используя функцию setFilenameConvention.

alexx_x 11.07.11 в 13:27

0

Затем мы указываем TerrainGroup, какое имя мы желаем использовать при сохранении нашего ландшафта, используя функцию setFilenameConvention.

Mingun 17.10.11 в 15:37

0

И напоследок указываем начальные координаты terrain group.

alexx_x 11.07.11 в 13:28

0

И напоследок указываем начало координат внутри данной группы ландшафта.

Mingun 24.07.11 в 07:39

1
+2

Пришло время настройки нашего ландшафта:

alexx_x 11.07.11 в 13:29

1

Мы познакомимся в функцией configureTerrainDefaults позже.

alexx_x 11.07.11 в 13:29

0

С функцией configureTerrainDefaults мы познакомимся позже.

Mingun 24.07.11 в 07:43

1

Обратите внимание что функция принимает в качестве параметра наш направленный свет.

alexx_x 11.07.11 в 13:30

0

Обратите внимание, что в качестве параметра она принимает наш источник направленного освещения.

Mingun 24.07.11 в 07:44

1

Затем мы определяем наш ландшафт и приказываем TerrainGroup загрузить его.

alexx_x 11.07.11 в 13:30

0

Теперь определяем все куски ландшафта и приказываем TerrainGroup загрузить их:

Mingun 24.07.11 в 07:55

1
+1
Минутку...

Следующая страница →