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

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

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

Так как мы создаем только один ландшафт, мы вызываем функцию defineTerrain один раз.

alexx_x 11.07.11 в 13:47

1

Если бы мы захотели создать несколько разнообразных поверхностей, мы могли бы сделать это здесь.

alexx_x 11.07.11 в 13:48

0

Но если бы мы захотели создать несколько кусков ландшафта, мы сделали бы это здесь.

Mingun 24.07.11 в 07:59

1

Более подробно с функцией defineTerrain мы познакомимся позднее.

alexx_x 11.07.11 в 13:49

1

Теперь, если мы только что импортировали наши ландшафты, мы хотим рассчитать карты смешивания (blendmaps):

alexx_x 11.07.11 в 13:50

0

Если мы впервые импортировали куски ландшафта, нам необходимо рассчитать карты смешивания:

Mingun 24.07.11 в 08:02

1

Этот цикл перебирает все доступные нам ландшафты и у каждого вызывает функцию initBlendMaps.

alexx_x 11.07.11 в 13:51

1

Этот цикл перебирает все доступные нам куски ландшафта и на каждом вызывает функцию initBlendMaps.

Mingun 24.07.11 в 08:03

0

Описание этой функции будет позднее.

alexx_x 11.07.11 в 13:52

1

Теперь все, что осталось сделать - это подчистить исходное создание ландшафта:

wuffur 11.07.11 в 17:19

0

Теперь все, что осталось сделать – это подчистить за собой мусор, оставшийся после начального создания ландшафта:

Mingun 24.07.11 в 08:05

0

ВСЕ ЕЩЕ ФУНКЦИЯ createScene

wuffur 13.07.11 в 06:38

0

ВИД ФУНКЦИИ createScene В ДАННЫЙ МОМЕНТ

Mingun 24.07.11 в 08:06

0

Так выглядела функция createScene класса BasicTutorial3 до сих пор:

wuffur 11.07.11 в 17:22

0

В данный момент функция createScene() нашего класса BasicTutorial3 выглядит так:

Mingun 17.10.11 в 15:47

0

Не пробуйте компилировать сейчас - программа не будет работать до тех пор пока мы не включим служебные(вспомогательные) функции!

wuffur 11.07.11 в 17:23

0

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

alexx_x 13.07.11 в 07:51

0

Не пытайтесь скомпилировать программу сейчас - она не будет работать, поскольку мы ещё не реализовали несколько служебных функций.

Mingun 24.07.11 в 08:08

1
+1

configureTerrainDefaults

wuffur 11.07.11 в 17:23

0

Функция configureTerrainDefaults

Mingun 24.07.11 в 08:08

0

Компонент Ogre Terrain довольно хорошо настраивается.
mTerrainGlobals - это экземпляр класса Ogre::TerrainGlobalOptions.

wuffur 11.07.11 в 17:56

1

Найдите функцию configureTerrainDefaults и добавьте следующий код:

wuffur 11.07.11 в 17:56

1

Во-первых, мы определили две глобальные опции: MaxPixelError и CompositeMapDistance.

wuffur 11.07.11 в 17:57

1

MaxPixelError определяет насколько точным наш ландшафт будет.

wuffur 11.07.11 в 17:58

0

MaxPixelError определяет, насколько точным будет наш ландшафт.

Mingun 24.07.11 в 08:13

0

Нижнее значение будет означать более детальный ландшафт, за дополнительные машинные ресурсы (из-за большего количества вершин).

wuffur 11.07.11 в 18:00

0

Меньшее значение этого параметра будет означать более аккуратный ландшафт за счет большей нагрузки на компьютер (из-за увеличения количества полигонов)

alexx_x 13.07.11 в 08:02

1

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

Mingun 17.10.11 в 15:54

0

CompositeMapDistance определяет насколько далеко ландшафт в Ogre будет рендерится отображение света.

wuffur 11.07.11 в 18:01

0

CompositeMapDistance определяет на каком расстоянии от нас будет рендерится освещенный ландшафт (на большем расстоянием ландшафт будет рендерится без учета освещения).

alexx_x 13.07.11 в 08:05

0

CompositeMapDistance определяет, на сколько далеко ландшафт будет отрисовываться с наложенной картой освещения.

Mingun 24.07.11 в 08:15

0

В следующий раз будет разбираться с отображением света, используя наш направленный свет:

wuffur 11.07.11 в 18:03

0

Далее, давайте разберемся с картой освещения, используя наш источник направленного освещения:

Mingun 24.07.11 в 08:16

0

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

wuffur 12.07.11 в 08:34

0

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

Mingun 24.07.11 в 08:22

0
+1

Теперь мы определим некоторые значения ImportData:

wuffur 12.07.11 в 08:35

0

Далее мы определяем некоторые значения ImportData:

Mingun 24.07.11 в 08:24

0

Мы не будем описывать, что и как с этими значениями в этом разделе руководства, но параметры terrainSize и worldSize установлены так, чтобы соответствовать нашим глобальным размерам (что мы говорили о нашей TerrainGroup) и inputScale определяет как картинка heightmap увеличина в размере.

wuffur 12.07.11 в 08:38

0

В этом уроке мы не будем останавливаться на том, что это за значения и какими они могут быть, но отметим, что параметры terrainSize и worldSize установлены таким образом, что они совпадают с нашими глобальными размерами (которые мы задали в конструкторе TerrainGroup), а параметр inputScale определяет степень увеличения (масштаба) изображения карты высот.

Mingun 24.07.11 в 08:31

0

Мы используем масштаб, из-за того, что картинки имеют ограниченную точность(замечание: вы можете использовать значение высоты в необработанных данных с плавающей точкой, чтобы избежать использование inputScale, но эти карты обычно требуют некоторую компрессию данных с потерями. В этом случае вы можете поставить значение inputScale = 1 )

wuffur 12.07.11 в 08:42

0

Здесь мы используем масштабирование, поскольку изображения имеют ограниченную точность представления (замечание: вы можете использовать карты высот с необработанными значениями с плавающей точкой для того, чтобы избежать использования параметра inputScale, но эти карты обычно используют сжатие с потерями. В этом случае вы можете установить параметр inputScale равным 1).

Mingun 24.07.11 в 08:41

0
+2

Необработанному значению heightmap, например, обычно не нужно масштабирование, из-за того, что величины накапливаются, как массив немасштабированных значений с плавающей точкой.

wuffur 12.07.11 в 08:51

0

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

Mingun 24.07.11 в 08:37

0

И последняя порция наших текстур:

wuffur 12.07.11 в 08:51

0

Последнее – текстуры:

Mingun 24.07.11 в 08:45

0
+2

Здесь мы устанавливаем числа текстур ландшафта равными 3, с помощью вызова defaultimp.layerList.resize(3).

wuffur 12.07.11 в 08:52

0

Здесь мы устанавливаем количество текстурных слоев ландшафта равным 3 с помощью вызова defaultimp.layerList.resize(3).

Mingun 24.07.11 в 08:43

0

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

wuffur 12.07.11 в 08:53

1

Параметр 'worldSize' определяет насколько большой будет каждая текстура при мультитекстурировании ландшафта(сплаттинге).

wuffur 12.07.11 в 08:56

1
+2

Более низкое значение будет увеличивать разрешение структур подвергающихся рендерингу.

wuffur 12.07.11 в 09:01

0

Меньшие значения будут увеличивать разрешение отрисованных текстурных слоев.

Mingun 24.07.11 в 08:54

0

Генератор материала по-умолчанию берет по две текстуры на каждый слой:

wuffur 12.07.11 в 09:01

1

1. diffuse_specular - рассеянные текстуры с зеркальной картой на альфа канале.

wuffur 12.07.11 в 09:30

0

1. diffuse_specular – текстура рассеянного освещения с картой бликов в альфа-канале.

Mingun 24.07.11 в 08:56

0

2. normal_height - нормальные карты с картой высоты на альфа канале.

wuffur 12.07.11 в 09:30

0

2. normal_height – карта нормалей с картой высот в альфа-канале.

Mingun 24.07.11 в 08:57

0

Вся наша функция configureTerrainDefaults выглядит так:

wuffur 12.07.11 в 09:30

1

А это наша функция defineTerrain:

wuffur 12.07.11 в 09:31

1

Эта функция простая, но умная:

wuffur 12.07.11 в 09:31

1

Это функция простая, но предельно ясная:

Mingun 17.10.11 в 16:26

1
+2

Во-первых, она спрашивает TerrainGroup, какое имя файла она будет использовать для генерации ландшафта

wuffur 12.07.11 в 09:40

0

Сначала она узнает у объекта TerrainGroup, какое имя файла тот использует при генерации ландшафта.

Mingun 24.07.11 в 09:00

0

Во-вторых, она проверяет, есть ли файл с таким именем в нашей группе ресурсов.

wuffur 12.07.11 в 09:41

1

Затем она проверяет, есть ли файл с таким именем в нашей группе ресурсов.

Mingun 17.10.11 в 16:27

0

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

wuffur 12.07.11 в 09:43

0

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

Mingun 24.07.11 в 09:03

0

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

wuffur 12.07.11 в 09:44

0

Если же его там нет, это означает, что мы должны сгенерировать ландшафт, а для этого загрузить изображение и использовать его для определения ландшафта.

Mingun 24.07.11 в 09:05

0

Функция использует маленькую вспомогательную функцию, называемую getTerrainImage().

wuffur 12.07.11 в 09:44

1
+1

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

wuffur 12.07.11 в 09:46

1
+2

Она загружает картинку 'terrain.png' и места, где расположены ресурсы, отражая ее, если в этом есть необходимость.

wuffur 12.07.11 в 09:48

1

Она загружает 'terrain.png' из архивов с ресурсами, зеркально отражая ее при необходимости.

Mingun 17.10.11 в 16:33

0

Она загружает 'terrain.png' из архивов с ресурсами, зеркально отражая ее при необходимости.

Mingun 17.10.11 в 16:33

0
+2

Замечание: Отражение производится для имитации бесшовного ландшафта и вы можете делать неограниченно большой ландшафт используя одну heightmap текстуру размера 513x513, это просто трюк.

wuffur 12.07.11 в 09:53

0

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

Mingun 24.07.11 в 09:13

0

Если карты высот(heightmap текстуры) вашего ландшафта уже бесшовные и вам не нужно их отражать, то вы можете просто определить свои собственные карты высот для каждого куска ландшафта

wuffur 12.07.11 в 10:02

0

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

Mingun 24.07.11 в 09:16

0

В этом разделе руководства мы использует только объект TerrainGroup размера 1x1 (посмотрите на функцию createScene()) поэтому этот код в действительности не используется.

wuffur 12.07.11 в 10:07

0

В этом уроке мы используем объект TerrainGroup размером 1x1 (посмотрите на функцию createScene()), так что на самом деле этот код не используется.

Mingun 24.07.11 в 09:18

0

Вы помните три типа слоев ландшафта, определенных в configureTerrainDefaults()?

wuffur 12.07.11 в 10:08

1

Теперь мы собираем смещивать их принимая в расчет высоту тайла.

wuffur 12.07.11 в 10:09

0

Теперь мы будем смешивать их на основе ВЫСОТЫ тайла.

Mingun 24.07.11 в 09:21

0

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

wuffur 12.07.11 в 10:13

0

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

Mingun 24.07.11 в 09:23

0

Это функция initBlendMaps во всей своей полноте:

wuffur 12.07.11 в 12:53

1

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

wuffur 12.07.11 в 12:54

0

В этом уроке мы не будем углубляться в подробности того, как она работает.

Mingun 24.07.11 в 09:26

0

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

wuffur 12.07.11 в 12:55

0

Достаточно знать то, что она использует высоту ландшафта для сплаттинга трех его слоев.

Mingun 24.07.11 в 09:29

0
Минутку...

← Предыдущая страница

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