Ogre3D Intermediate Tutorials / Промежуточные туториалы Ogre3D: Intermediate Tutorial 6: Projective Decals

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

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

ВВЕДЕНИЕ

proVIDec 25.09.11 в 06:17

1

В этом уроке мы рассмотрим добавление проективных декалей на объекты сцены.

Mingun 13.10.11 в 14:15

0

Проективное текстурирование очень полезно, когда вы хотите сделать что-нибудь, вроде индикатора выделения на земле, перекрестья прицела, нарисованного непосредственно на цели, либо ещё что-нибудь с помощью декалей, которые проецируются на какой-нибудь объект (однако, сами не становятся неотъемлимой частью текстуры этого объекта).

Mingun 13.10.11 в 14:13

0

Вот снимок экрана с изображением текстуры, спроецированной на любимую каждому голову Огра:

H0tHead 27.09.11 в 04:48

1

С ЧЕГО НАЧАТЬ

Mingun 13.10.11 в 14:18

0

НОВЫЕ ТЕКСТУРЫ

proVIDec 25.09.11 в 06:17

1

Перед тем как мы начнем наш проект, мы должны добавить две текстуры, которые будем потом использовать:

H0tHead 27.09.11 в 04:48

1

Лучше всего положить эти файлы в папку <tt>media/materials/textures</tt> (для большинства людей эта папка располагается в папке SDK Ogre).

Mingun 13.10.11 в 14:20

0

Также убедитесь, что все имена текстур находятся в нижнем регистре и их имена совпадают с именами текстур, используемых в этом уроке. Версия огра 1.7 не чувствительна к регистру букв в названии текстур. Данное условие проверять не обязательно. (прим. переводчика)

H0tHead 27.09.11 в 04:51

0

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

Mingun 13.10.11 в 14:24

0
+1

НАЧАЛЬНЫЙ КОД

Mingun 13.10.11 в 14:20

0

Настройте свой проект Intermediate Tutorial 6 подобно тому, что показано ниже:

H0tHead 27.09.11 в 04:52

0

Скомпилируйте и запустите программу перед тем как мы продолжим.

H0tHead 27.09.11 в 04:53

0

Вы должны увидеть шесть голов огра.

H0tHead 27.09.11 в 04:53

0

ПРОЕКЦИОННЫЕ ДЕКАЛИ

H0tHead 27.09.11 в 04:53

0

КОНУС ОТСЕЧЕНИЯ

H0tHead 27.09.11 в 04:53

0

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

H0tHead 27.09.11 в 04:55

0

Огр использует это для отображения с камер( класс Camera напрямую наследуется от класса Frustum)

H0tHead 27.09.11 в 04:57

0

В этом уроке мы будем использовать конус отсечения для проецирования декалей на наши объекты(меши) в сцене.

H0tHead 27.09.11 в 04:58

0

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

H0tHead 27.09.11 в 04:59

0

Найдите метод createProjector() и добавьте следующий код:

H0tHead 27.09.11 в 04:59

1

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

H0tHead 27.09.11 в 05:01

0

Если вы хотите создать проектор, который будет сохранять постоянный размер проекционной текстуры независимо от дистанции, вы должны добавить следующее в ваш код( в нашем уроке мы не будем этого делать):

H0tHead 27.09.11 в 05:02

0

setOrthoWindowHeight() используется вместе с соотношением сторон и устанавливает размер ортографического конуса.

H0tHead 27.09.11 в 05:03

0

Перед тем как продолжить, примите к сведению куда наш конус будет проецировать декаль.

H0tHead 27.09.11 в 05:05

0

В этом приложении мы используем круг, образованный 6-ю головами огра, наш проектор располагается в центре этого круга( немного смещен вверх на 5 единиц) и ориентирован по направлению -Z (до тех пор пока мы его не изменим, это направление по умолчанию).

H0tHead 27.09.11 в 05:08

0

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

H0tHead 27.09.11 в 05:09

0

ИЗМЕНЯЕМ МАТЕРИАЛ

H0tHead 27.09.11 в 05:09

0

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

H0tHead 27.09.11 в 05:11

0

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

H0tHead 27.09.11 в 05:11

0

Конус отсечения определяет положение. размеры и форму проецируемой декали.

H0tHead 27.09.11 в 06:43

0

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

H0tHead 27.09.11 в 06:46

0

Первое что мы сделаем - это добавим материалу еще один проход.

H0tHead 27.09.11 в 06:46

0

Найдите метод makeMaterialReceiveDecal() и добавьте следующий код:

H0tHead 27.09.11 в 06:48

0

После создания прохода мы должны настроить освещение и смешивание.

H0tHead 27.09.11 в 06:49

0

Мы добавим новую текстуру, которая будет корректно смешиваться с текущей текстурой на объекте.

H0tHead 27.09.11 в 06:49

0

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

H0tHead 27.09.11 в 06:51

0

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

H0tHead 27.09.11 в 06:53

0

Если вы хотите, чтобы цвет декали в вашем приложении зависел от освещения, не добавляйте последний код в вашу функцию:

H0tHead 27.09.11 в 06:54

0

После создания прохода, необходимо создать текстурную единицу используя нашу текстуру decal.png

H0tHead 27.09.11 в 06:55

0

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

H0tHead 27.09.11 в 06:56

0

Последние две функции устанавливают фильтрацию и тип адресации текстурных координат.

H0tHead 27.09.11 в 06:56

0

Мы установили режим адресации Clamp( заделка ), таким образом наша текстура не будет повторятся на объекте.

H0tHead 27.09.11 в 06:57

0

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

H0tHead 27.09.11 в 09:15

0

Это предотвращает размытие прозрачной границы декали по текстуре.

H0tHead 27.09.11 в 09:16

0

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

H0tHead 27.09.11 в 09:18

0

Это все, что необходимо для установки материала.

H0tHead 27.09.11 в 09:18

0

ВЫЗОВ ФУНКЦИЙ

H0tHead 27.09.11 в 09:18

0

Мы создали необходимые методы, теперь мы должны вызвать их для создания проектора и создания материалов.

H0tHead 27.09.11 в 09:19

0

Добавьте следующий код в конец метода createScene:

H0tHead 27.09.11 в 09:19

0

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

H0tHead 27.09.11 в 09:22

0
Минутку...

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